คำถามติดแท็ก f#

F # เป็นภาษาเชิงวัตถุที่ใช้งานได้สั้นกระชับและมีประสิทธิภาพสำหรับ. NET ซึ่งช่วยให้คุณเขียนโค้ดง่ายๆเพื่อแก้ปัญหาที่ซับซ้อน

3
อะไรคือความแตกต่างที่ใหญ่ที่สุดระหว่าง F # และ Scala?
F # และ Scala เป็นทั้ง langugages โปรแกรมการทำงานที่ไม่ได้บังคับให้นักพัฒนาใช้เฉพาะประเภทข้อมูลที่ไม่เปลี่ยนรูป พวกเขาทั้งสองมีการสนับสนุนวัตถุสามารถใช้ไลบรารีที่เขียนในภาษาอื่นและเรียกใช้บนเครื่องเสมือน ดูเหมือนว่าทั้งสองภาษาจะใช้ ML อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่าง F # และ Scala แม้ว่าข้อเท็จจริงที่ว่า F # ได้รับการออกแบบสำหรับ. NET และ Scala สำหรับแพลตฟอร์ม Java?

3
เหตุใดโมเดลโดเมน anemic จึงถือว่าไม่ดีใน C # / OOP แต่สำคัญมากใน F # / FP
ในโพสต์บล็อกใน F # เพื่อความสนุกสนานและผลกำไรกล่าวว่า: ในการออกแบบฟังก์ชั่นมันสำคัญมากที่จะแยกพฤติกรรมออกจากข้อมูล ชนิดข้อมูลนั้นง่ายและ "โง่" จากนั้นคุณก็มีฟังก์ชั่นหลายอย่างที่ทำงานกับชนิดข้อมูลเหล่านั้น สิ่งนี้เป็นสิ่งที่ตรงกันข้ามกับการออกแบบเชิงวัตถุที่มีการรวมพฤติกรรมและข้อมูลเข้าด้วยกัน ท้ายที่สุดแล้วนั่นคือสิ่งที่ชั้นเรียน ในความเป็นจริงการออกแบบเชิงวัตถุในความเป็นจริงคุณไม่ควรมี แต่พฤติกรรม - ข้อมูลเป็นส่วนตัวและสามารถเข้าถึงได้ผ่านวิธีการ ในความเป็นจริงอู๊ดไม่ได้มีพฤติกรรมพอรอบประเภทข้อมูลถือเป็นสิ่งที่ไม่ดีและยังมีชื่อ: ความ " รูปแบบโดเมนโลหิตจาง " ระบุว่าใน C # เราดูเหมือนจะยืมต่อจาก F # และพยายามเขียนโค้ดสไตล์การทำงานมากขึ้น ทำไมเราไม่ยืมความคิดในการแยกข้อมูล / พฤติกรรมและคิดว่ามันไม่ดี? มันเป็นเพียงแค่ว่าคำจำกัดความไม่ได้มาพร้อมกับ OOP หรือมีเหตุผลที่เป็นรูปธรรมว่ามันไม่ดีใน C # ที่ด้วยเหตุผลบางอย่างไม่ได้ใช้ใน F # (และในความเป็นจริงจะกลับรายการ)? (หมายเหตุ: ฉันสนใจเป็นพิเศษในความแตกต่างใน C # / F # ที่สามารถเปลี่ยนความคิดเห็นของสิ่งที่ดี / ไม่ดีแทนที่จะเป็นบุคคลที่อาจไม่เห็นด้วยกับความเห็นทั้งในโพสต์บล็อก)

9
ข้อผิดพลาดในโลกแห่งความเป็นจริงในการแนะนำ F # เข้ากับ codebase ขนาดใหญ่และทีมวิศวกร [ปิด]
ฉันเป็น CTO ของ บริษัท ซอฟต์แวร์ที่มี codebase ขนาดใหญ่ (ทั้งหมด C #) และทีมวิศวกรขนาดใหญ่ ฉันสามารถดูได้ว่าส่วนต่าง ๆ ของรหัสจะง่ายกว่าในการเขียนใน F # ทำให้เกิดเวลาในการพัฒนาที่เร็วขึ้นข้อผิดพลาดที่น้อยลงการใช้งานแบบขนานที่ง่ายขึ้น ฯลฯ โดยทั่วไปแล้วการเพิ่มผลิตผลโดยรวมสำหรับทีมของฉัน อย่างไรก็ตามฉันยังสามารถเห็นข้อผิดพลาดในการทำงานหลายประการของการแนะนำ F # ได้แก่ : 1) ทุกคนต้องเรียนรู้ F # และมันไม่สำคัญเหมือนการเปลี่ยนจากพูด Java เป็น C # สมาชิกในทีมที่ไม่ได้เรียนรู้ F # จะไม่สามารถทำงานในส่วน F # ของ codebase 2) กลุ่มของโปรแกรมเมอร์ F # ที่จ้างได้ ณ ขณะนี้ (ธ.ค. 2010) …

4
เหตุใด F # จึงมีโหมดโต้ตอบ แต่ไม่ใช่ C #
F # ออกมาพร้อมกับ REPL แบบโต้ตอบ C # ไม่มีการเรียงลำดับและจริง ๆ แล้วเป็นเรื่องยากที่จะเล่นโดยไม่ต้องตั้งค่าโปรเจ็กต์เต็มรูปแบบ (แม้ว่า LINQpad จะใช้งานได้ มีบางสิ่งที่แตกต่างกันโดยพื้นฐานเกี่ยวกับภาษาที่อนุญาตให้ F # มีคอนโซลการโต้ตอบ แต่ทำให้ยากต่อการปรับใช้สำหรับ C # หรือไม่ ตั้งแต่หลายปีต่อมาผู้คนยังคงมาที่คำถามนี้ฉันควรทราบว่าตอนนี้มีตัวเลือกมากมาย คุณสามารถใช้ PowerShell (ติดตั้งล่วงหน้าในเครื่อง windows สมัยใหม่ทุกรุ่น) เพื่อเล่นกับ. Net framework หรือคุณสามารถใช้LinqPad ต้นแบบพลรหัส หรือคุณสามารถใช้ScriptCsหรือคุณสามารถใช้สภาพแวดล้อม jsfiddle ประเภทออนไลน์เช่นComplify.netหรือJsil ตัวเลือกมากมาย
32 c#  .net  tools  f# 

3
ทำไมไม่ใส่คำอธิบายประกอบพารามิเตอร์ฟังก์ชั่น?
เพื่อให้คำถามนี้ตอบได้สมมติว่าค่าใช้จ่ายของความคลุมเครือในใจของโปรแกรมเมอร์นั้นแพงกว่าการกดแป้นพิเศษเล็กน้อย ระบุว่าทำไมฉันจะอนุญาตให้เพื่อนร่วมทีมของฉันหนีไปโดยไม่ใส่หมายเหตุประกอบพารามิเตอร์ฟังก์ชันของพวกเขา ใช้โค้ดต่อไปนี้เป็นตัวอย่างของสิ่งที่อาจเป็นโค้ดที่ซับซ้อนกว่านี้: let foo x y = x + y ตอนนี้การตรวจสอบอย่างรวดเร็วของคำแนะนำเครื่องมือจะแสดงให้คุณเห็นว่า F # ได้พิจารณาแล้วว่าคุณต้องการให้ x และ y เป็น ints ถ้านั่นคือสิ่งที่คุณตั้งใจไว้ทุกอย่างก็ดี แต่ฉันไม่รู้ว่านั่นคือสิ่งที่คุณต้องการหรือไม่ จะเกิดอะไรขึ้นถ้าคุณสร้างรหัสนี้เพื่อเชื่อมสองสายเข้าด้วยกัน หรือถ้าฉันคิดว่าคุณอาจหมายถึงการเพิ่มคู่? หรือถ้าฉันไม่ต้องการเลื่อนเมาส์ไปเหนือพารามิเตอร์ฟังก์ชันทุกตัวเพื่อกำหนดประเภทของมัน ตอนนี้ใช้ตัวอย่างนี้: let foo x y = "result: " + x + y ตอนนี้ F # สมมติว่าคุณตั้งใจจะเชื่อมสตริงดังนั้น x และ y จึงถูกนิยามเป็นสตริง อย่างไรก็ตามในฐานะที่เป็น schmuck ที่ไม่ดีที่รักษารหัสของคุณฉันอาจดูที่นี่และสงสัยว่าบางทีคุณอาจต้องการเพิ่ม x และ …
28 f#  parameters 

3
ทำไมคำหลัก rec จำเป็นใน F #
ใน F # มีความจำเป็นต้องใช้recคำหลัก ใน Haskell ไม่จำเป็นต้องบอกอย่างชัดเจนว่าฟังก์ชั่นที่ให้มานั้นเรียกซ้ำหรือไม่ ด้วยบทบาทของการเรียกซ้ำในการเขียนโปรแกรมเชิงฟังก์ชันการออกแบบ F # ดูเหมือนจะค่อนข้างแปลกสำหรับฉัน เป็นการตัดสินใจออกแบบภาษาที่ดีหรือมีเหตุผลทางประวัติศาสตร์หรือมีข้อ จำกัด ในการใช้งานเท่านั้น

2
Y combinator และการปรับหางเรียกให้เหมาะสม
คำจำกัดความของ Y combinator ใน F # คือ let rec y f x = f (y f) x f คาดว่าจะเป็นอาร์กิวเมนต์แรกที่มีความต่อเนื่องสำหรับปัญหาย่อยแบบเรียกซ้ำ การใช้ yf เป็นสิ่งต่อเนื่องเราจะเห็นว่า f จะถูกนำไปใช้กับการโทรติดต่ออย่างต่อเนื่องในขณะที่เราสามารถพัฒนาได้ let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... ปัญหาคือโครงร่างนี้ precludes โดยใช้การปรับ …

3
ประสิทธิภาพ F # เทียบกับประสิทธิภาพของ Erlang มีข้อพิสูจน์ว่า VM ของ Erlang เร็วขึ้นหรือไม่
ฉันใช้เวลาในการเรียนรู้การเขียนโปรแกรมฟังก์ชั่นและฉันมาถึงส่วนที่ฉันต้องการเริ่มต้นเขียนโครงการแทนการเล่นน้ำในแบบฝึกหัด / ตัวอย่าง ในขณะที่ทำการวิจัยของฉันฉันพบว่า Erlang ดูเหมือนว่าจะทรงพลังมากเมื่อพูดถึงการเขียนซอฟต์แวร์ที่เกิดขึ้นพร้อมกัน (ซึ่งเป็นเป้าหมายของฉัน) แต่ทรัพยากรและเครื่องมือสำหรับการพัฒนาไม่ได้พัฒนาเท่ากับผลิตภัณฑ์พัฒนาของ Microsoft F # สามารถทำงานบน linux (Mono) เพื่อให้ตรงตามข้อกำหนด แต่ในขณะที่มองไปรอบ ๆ บนอินเทอร์เน็ตฉันไม่สามารถเปรียบเทียบ F # กับ Erlang ได้ ตอนนี้ฉันกำลังเอนตัวไปที่ Erlang เพียงเพราะดูเหมือนว่าจะมีข่าวมากที่สุด แต่ฉันอยากรู้ว่าจริงๆแล้วมันมีความแตกต่างด้านประสิทธิภาพระหว่างสองระบบหรือไม่ เนื่องจากฉันคุ้นเคยกับการพัฒนาใน. NET ฉันอาจจะสามารถเพิ่มความเร็วด้วย F # เร็วกว่า Erlang มาก แต่ฉันไม่สามารถหาทรัพยากรใด ๆ ที่จะทำให้ฉันเชื่อว่า F # นั้นสามารถปรับขนาดได้เหมือนกับ Erlang ฉันสนใจการจำลองมากที่สุดซึ่งกำลังจะส่งข้อความที่ประมวลผลอย่างรวดเร็วไปยังโหนดแบบต่อเนื่อง หากฉันยังทำงานได้ไม่ดีกับสิ่งที่ฉันพยายามถามโปรดขอการยืนยันเพิ่มเติม
19 f#  erlang 

3
ภาษาทำงานเร็วที่สุด
ฉันเพิ่งได้รับการขุดเจาะเข้าไปในการเขียนโปรแกรมการทำงานโดยเฉพาะอย่างยิ่ง Haskell และ F #, ก่อนหน้านี้มากขึ้น หลังจาก googling ไปรอบ ๆ ฉันไม่สามารถหาการเปรียบเทียบเกณฑ์มาตรฐานของภาษาที่ใช้งานได้ดีกว่า (Scala, F # ฯลฯ ) ฉันรู้ว่ามันไม่ยุติธรรมสำหรับบางภาษา (Scala มาถึงใจ) เนื่องจากพวกเขาเป็นลูกผสม แต่ฉันแค่อยากจะรู้ว่ามีประสิทธิภาพที่ดีกว่าซึ่งในการดำเนินงานและโดยรวม

2
F # เสนออะไรที่มีประโยชน์อย่างยิ่งสำหรับการพัฒนาเว็บที่ใช้ฐานข้อมูลหรือไม่?
ในที่สุดองค์กรของฉันอัพเกรดเป็น MS Visual Studio 2010 ในปีนี้ หนึ่งในคุณสมบัติใหม่ที่ยิ่งใหญ่ที่ Visual Studio 2010 นำเสนอคือภาษาการเขียนโปรแกรม F # ฉันเข้าใจว่า F # เสนอกระบวนทัศน์การเขียนโปรแกรมที่ใช้งานได้คล้ายกับ Lisp ซึ่งแตกต่างจาก Lisp แม้ว่า F # จะถูกรวบรวมเป็นโค้ดที่ได้รับการจัดการสำหรับ. NET Framework ตอนนี้ฉันทำงานในการพัฒนาโปรแกรมประยุกต์บนเว็บที่ใช้ฐานข้อมูล ตอนนี้ฉันกำลังทำงานกับแอปพลิเคชัน n-tier พร้อมรหัส SQL ที่ส่วนท้ายและเว็บแอปพลิเคชัน AJAX C # .net ที่ส่วนหน้า ฉันต้องการทราบว่า F # เสนออะไรที่จะเป็นประโยชน์อย่างยิ่งสำหรับการพัฒนาประเภทนี้หรือไม่

4
การจับคู่รูปแบบกับประเภทการออกแบบที่ใช้สำนวนหรือไม่ดีหรือไม่?
ดูเหมือนว่ารหัส F # มักจะจับคู่รูปแบบกับประเภท อย่างแน่นอน match opt with | Some val -> Something(val) | None -> Different() ดูเหมือนทั่วไป แต่จากมุมมองของ OOP ที่ดูน่ากลัวอย่างมากเช่นโฟลว์ควบคุมตามการตรวจสอบประเภทรันไทม์ซึ่งโดยทั่วไปแล้วจะขมวดคิ้ว หากต้องการสะกดคำใน OOP คุณอาจต้องการใช้การโหลดมากเกินไป: type T = abstract member Route : unit -> unit type Foo() = interface T with member this.Route() = printfn "Go left" type Bar() = interface …

3
คุณควรใช้ C # และ F # ด้วยกัน
ฉันรู้ว่าคุณสามารถใช้ C # และ F # ร่วมกันในโครงการเดียวกันได้ แต่ฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีหรือไม่ สำหรับฉันแล้วการผสมสองรูปแบบการเข้ารหัสที่แตกต่างกันมาก (functional vs OOP) อาจทำให้เกิดการขาดการเชื่อมโยงในการออกแบบ ถูกต้องหรือไม่
16 design  f# 

5
ใครบางคนควรใช้ FP คิดว่าอ่านรหัสจำเป็น?
ฉันจบการศึกษาจากมหาวิทยาลัยเมื่อประมาณห้าเดือนที่แล้วและทำงานในท้องถิ่นเมื่อสี่เดือนที่ผ่านมา ขณะอยู่ที่มหาวิทยาลัยฉันเรียน Haskell, F # และอื่น ๆ ด้วยตัวเอง เราถูกสอน Java ที่มหาวิทยาลัย แต่ฉันได้สัมผัสกับการเขียนโปรแกรมการทำงานเร็ว ๆ นี้และใช้เวลากับมันมากกว่าที่ฉันทำกับการเขียนโปรแกรมที่จำเป็น เป็นผลให้สมองของฉันมีสายสำหรับการคิดการทำงาน บริษัท ที่ฉันเข้าร่วมใช้ Python และรหัสมีความจำเป็นอย่างยิ่ง ฉันมีเวลายากมากที่จะอ่านโค้ดที่จำเป็น ฉันไม่สามารถติดตามการกลายพันธุ์ เมื่อการทำ for-if-else-for-... การซ้อนกันมีความลึกมากกว่าสี่ระดับฉันจะสูญเสียการติดตามสิ่งที่เกิดขึ้นในโค้ดอย่างสมบูรณ์ เพื่อเพิ่มเข้าไป Python เป็นภาษาแบบไดนามิกดังนั้นจึงไม่มีประเภทในรหัส มัน' หลายสัปดาห์มาแล้วที่ฉันพยายามทำความเข้าใจส่วนหนึ่งของ codebase ของเรา (ซึ่งค่อนข้างซับซ้อนพอสมควร) แต่ฉันไม่ได้ทำความคืบหน้าใด ๆ เพื่อทำความเข้าใจ กรุณาเสนอเทคนิคการปฏิบัติเกี่ยวกับวิธีที่ฉันควรจะไปเกี่ยวกับการทำความเข้าใจรหัสที่ ขอบคุณล่วงหน้า! แก้ไข: บางทีฉันควรพูดถึงว่ามีความคิดเห็นไม่มากในรหัสและชื่อยังไม่ง่ายนัก

4
มีวิธีปฏิบัติที่ดีอะไรบ้างเมื่อพยายามสอนการเขียนโปรแกรมแบบเปิดเผยให้แก่โปรแกรมเมอร์ที่มีความจำเป็น
ฉันเสนอให้ทำการฝึกอบรมเล็กน้อยใน F # ที่ บริษัท ของฉันและพวกเขาดูเหมือนจะแสดงความสนใจ พวกเขามักจะเป็นโปรแกรมเมอร์ VB6 และ C # ที่ไม่ปฏิบัติตามการเขียนโปรแกรมด้วยความหลงใหลมากเกินไป ที่ถูกกล่าวว่าฉันรู้สึกว่ามันง่ายกว่าที่จะเขียนรหัสที่ถูกต้องเมื่อคุณคิดในเรื่องการทำงานเพื่อให้พวกเขาควรได้รับประโยชน์จากมันแน่นอน ใครบ้างที่สามารถให้คำแนะนำเกี่ยวกับวิธีที่ฉันควรเข้าหานี้ ไอเดีย อย่ามุ่งเน้นไปที่ไวยากรณ์แทนที่จะมุ่งเน้นไปที่วิธีการใช้ภาษานี้และสำนวนที่มันส่งเสริม ลองนึกถึงตัวอย่างที่เป็นความเจ็บปวดในการเขียนในรูปแบบที่จำเป็น แต่แปลเป็นรหัสที่สง่างามเมื่อเขียนในรูปแบบที่เปิดเผย

4
ฟังก์ชั่นการเขียนโปรแกรม - Immutability
ฉันพยายามที่จะเข้าใจการจัดการกับข้อมูลที่ไม่เปลี่ยนรูปแบบใน FP (โดยเฉพาะใน F # แต่ FP อื่น ๆ ก็โอเคเช่นกัน) และทำลายนิสัยเดิมของการคิดแบบเต็มรัฐ (OOP) ส่วนหนึ่งของคำตอบที่เลือกสำหรับคำถามที่นี่ย้ำการค้นหาของฉันสำหรับการแก้ไขปัญหาที่แก้ไขโดยการเป็นตัวแทนใน OOP กับสิ่งที่ไม่เปลี่ยนรูปใน FP (ตัวอย่างเช่น: คิวกับ Producers & Consumer) ความคิดหรือลิงค์ยินดีต้อนรับ? ขอบคุณล่วงหน้า. แก้ไข : หากต้องการเพิ่มความกระจ่างของคำถามอีกเล็กน้อยโครงสร้างที่ไม่เปลี่ยนรูปแบบ (เช่นคิว) จะถูกแชร์กันในหลาย ๆ เธรดพร้อมกัน (เช่นผู้ผลิตและผู้บริโภค) ใน FP ได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.