คำถามติดแท็ก functional-programming

ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์ที่พยายามที่จะแก้ปัญหาการคำนวณโดยการประเมินผลของฟังก์ชั่นที่ถูกผูกมัดเอาท์พุทจะถูกกำหนดโดยปัจจัยการผลิตของพวกเขามากกว่าสถานะของโปรแกรม ในรูปแบบของการเขียนโปรแกรมนี้ผลข้างเคียงและข้อมูลที่ไม่แน่นอนจะเลิกใช้และมักจะแยกอย่างเคร่งครัด

18
คุณจะทำอย่างไรถ้าลูกค้าของคุณไม่ต้องการใช้การเขียนโปรแกรมเชิงวัตถุ
ฉันกำลังเขียนโปรแกรมเพื่อจำลองกิจกรรมของมดในกริด (PDF) มดสามารถเคลื่อนที่ไปรอบ ๆ หยิบสิ่งของและวางสิ่งของได้ ปัญหาคือในขณะที่การกระทำของมดและตำแหน่งของมดแต่ละตัวนั้นสามารถติดตามได้โดยแอตทริบิวต์ของคลาสได้อย่างง่ายดาย (และเราสามารถสร้างมดหลายตัวได้อย่างง่ายดาย) ลูกค้าของฉันบอกว่าเนื่องจากเขามีพื้นหลังในการเขียนโปรแกรมการทำงาน การจำลองที่จะทำโดยใช้การโปรแกรมเชิงฟังก์ชัน เพื่อให้ชัดเจนคำดั้งเดิมจากลูกค้าคือ "no class" เท่านั้น แต่ไม่ใช่ "Programming programming" ดังนั้นฉันคิดว่าเขาไม่ได้หมายถึงการเขียนโปรแกรมการทำงานและฉันสามารถทำมันได้อย่างจำเป็น นอกจากนี้ฉันไม่เคยมีประสบการณ์การเขียนโปรแกรมฟังก์ชั่นมาก่อน อย่างไรก็ตามฉันคิดว่ามันมีประโยชน์ที่จะมุ่งเน้นไปที่คำถามนี้โดยเฉพาะอย่างยิ่งเกี่ยวกับความต้องการการเขียนโปรแกรมการทำงานมากกว่าเพียงแค่ "ทำมันจำเป็น" คุณจะรับมือกับสถานการณ์นี้อย่างไร คุณลองชักชวนลูกค้าของคุณว่าการใช้การเขียนโปรแกรมเชิงวัตถุนั้นสะอาดกว่าหรือไม่ลองทำตามที่เขาต้องการและให้รหัสที่มีคุณภาพต่ำแก่เขาหรือทำอย่างอื่น?

5
การเขียนโปรแกรมแบบอะซิงโครนัสในภาษาเชิงหน้าที่
ฉันส่วนใหญ่เป็นโปรแกรมเมอร์ C / C ++ ซึ่งหมายความว่าประสบการณ์ส่วนใหญ่ของฉันอยู่กับกระบวนทัศน์เชิงกระบวนทัศน์และเชิงวัตถุ อย่างไรก็ตามในขณะที่โปรแกรมเมอร์ C ++ หลายคนตระหนักดี C ++ ได้เปลี่ยนการเน้นในช่วงหลายปีที่ผ่านมาเป็นรูปแบบการใช้งานแบบเอสคิว ไม่ว่าในขณะที่ฉันมีประสบการณ์การเขียนโค้ดในรูปแบบการทำงานโดยใช้ C ++ ฉันมีประสบการณ์น้อยมากกับภาษาที่ใช้งานได้จริงเช่น Lisp, Haskell เป็นต้น ฉันเพิ่งเริ่มศึกษาภาษาเหล่านี้เนื่องจากความคิดที่ว่า "ไม่มีผลข้างเคียง" ในภาษาที่ใช้งานได้ล้วนทำให้ฉันทึ่งเสมอโดยเฉพาะอย่างยิ่งเกี่ยวกับแอพพลิเคชั่นของมันในการทำงานพร้อมกันและการคำนวณแบบกระจาย อย่างไรก็ตามมาจากพื้นหลัง C ++ ฉันสับสนว่า philsophy "ไม่มีผลข้างเคียง" นี้ทำงานร่วมกับการเขียนโปรแกรมแบบอะซิงโครนัสได้อย่างไร โดยการเขียนโปรแกรมแบบอะซิงโครนัสฉันหมายถึงเฟรมเวิร์ก / API / รูปแบบการเข้ารหัสที่ให้ผู้ใช้จัดการเหตุการณ์เพื่อจัดการเหตุการณ์ที่เกิดขึ้นแบบอะซิงโครนัส (นอกกระแสของโปรแกรม) ซึ่งรวมถึงไลบรารีแบบอะซิงโคร ตัวจัดการสัญญาณหรือตัวจัดการเหตุการณ์ Java GUI สิ่งหนึ่งที่สิ่งเหล่านี้มีเหมือนกันคือธรรมชาติของการเขียนโปรแกรมแบบอะซิงโครนัสดูเหมือนจะต้องการการสร้างผลข้างเคียง (สถานะ) เพื่อให้กระแสหลักของโปรแกรมตระหนักว่ามีการเรียกใช้ตัวจัดการเหตุการณ์แบบอะซิงโครนัส โดยทั่วไปในเฟรมเวิร์กเช่น Boost.ASIO ตัวจัดการเหตุการณ์จะเปลี่ยนสถานะของวัตถุเพื่อให้เอฟเฟกต์ของเหตุการณ์นั้นแพร่กระจายเกินเวลาชีวิตของฟังก์ชันตัวจัดการเหตุการณ์ จริงๆแล้วตัวจัดการเหตุการณ์สามารถทำอะไรได้อีก? ไม่สามารถ "ส่งคืน" ค่าไปยังจุดโทรได้เนื่องจากไม่มีจุดโทร …

5
เหตุใดสหภาพแรงงานจึงเลือกปฏิบัติที่เกี่ยวข้องกับการโปรแกรมเชิงปฏิบัติ
ในหลายปีของการเขียนโปรแกรม OO ฉันเข้าใจว่าสหภาพที่เลือกปฏิบัติคืออะไร แต่ฉันไม่เคยคิดถึงพวกเขาเลย ฉันเพิ่งได้เขียนโปรแกรมฟังก์ชั่นบางอย่างใน C # และตอนนี้ฉันพบว่าฉันอยากได้พวกเขา นี่ทำให้ฉันงุนงงเพราะบนใบหน้าของมันแนวคิดของสหภาพที่ถูกเลือกปฏิบัติดูเหมือนจะค่อนข้างเป็นอิสระจากการทำงานของขั้ว / OO มีบางสิ่งที่มีอยู่ในการเขียนโปรแกรมการทำงานที่ทำให้สหภาพแรงงานที่ถูกเลือกปฏิบัติมีประโยชน์มากกว่าพวกเขาจะอยู่ใน OO หรือว่าโดยการบังคับให้ตัวเองวิเคราะห์ปัญหาด้วยวิธีที่ "ดีกว่า" ฉันแค่ปรับมาตรฐานของฉัน รูปแบบ?

4
เหตุใดฉันจึงไม่ต้องการ ORM ในภาษาที่ใช้งานได้เช่น Scala
ฉันสงสัยว่าฉันสามารถเปลี่ยนจาก Java เป็น Scala ในโครงการ Spring + Hibernate เพื่อใช้ประโยชน์จากคุณสมบัติ Scala บางอย่างเช่นการจับคู่รูปแบบตัวเลือกและสิ่งที่ฉันคิดว่าเป็นไวยากรณ์ที่สะอาดกว่าโดยทั่วไป ฉันกำลังมองหา ORM เป็นค่าเริ่มต้นในระบบนิเวศของ Scala และฉันพบว่าคิดว่าเปิดใช้งาน (แต่ส่วนใหญ่ฉันพยายามค้นหาว่าไฮเบอร์เนตสามารถใช้กับ Scala ได้หรือไม่) ค้นหาสิ่งนี้ฉันได้อ่านสิ่งนี้ในเอกสารประกอบการเล่นเกี่ยวกับ JPA + Scala แต่ประเด็นที่สำคัญที่สุดคือ: คุณต้องการ Relationnal to mapper Objects จริงๆหรือไม่เมื่อคุณมีพลังของภาษาที่ใช้งานได้? อาจจะไม่. JPA เป็นวิธีที่สะดวกในการสรุปการขาดพลังงานในการแปลงข้อมูลของ Java แต่ก็รู้สึกผิดเมื่อคุณเริ่มใช้จาก Scala ฉันไม่มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับวิธีการใช้การเขียนโปรแกรมเชิงฟังก์ชั่นเพื่อสร้างแอปพลิเคชันที่สมบูรณ์ (นั่นเป็นเหตุผลที่ฉันตั้งใจจะใช้ Scala เพื่อที่ฉันจะได้เข้าใจสิ่งที่เพิ่มขึ้นเนื่องจากมันรวม OO + Functional) ทำไมฉันไม่ต้องการ ORM ด้วยภาษาที่ใช้งานได้และอะไรคือแนวทางการทำงานเพื่อแก้ไขปัญหาการคงอยู่ของโมเดลโดเมน แนวทาง DDD สำหรับตรรกะทางธุรกิจยังคงสมเหตุสมผลกับ Scala …

10
เมื่อได้รับฝูงม้าฉันจะค้นหาความยาวแตรโดยเฉลี่ยของยูนิคอร์นทั้งหมดได้อย่างไร
คำถามข้างต้นเป็นตัวอย่างนามธรรมของปัญหาทั่วไปที่ฉันพบในรหัสดั้งเดิมหรือปัญหาที่เกิดจากการพยายามแก้ไขปัญหานี้ก่อนหน้านี้ ฉันคิดวิธีการกรอบ NET อย่างน้อยหนึ่งวิธีที่มีจุดประสงค์เพื่อแก้ไขปัญหานี้เช่นเดียวกับEnumerable.OfType<T>วิธีการ แต่ความจริงที่ว่าท้ายที่สุดคุณก็สอบปากคำชนิดของวัตถุที่รันไทม์ไม่ได้อยู่กับฉัน นอกเหนือจากการถามม้าแต่ละตัว "คุณเป็นยูนิคอร์นหรือไม่" วิธีการต่อไปนี้อยู่ในใจ: โยนข้อยกเว้นเมื่อมีความพยายามที่จะทำให้ความยาวของฮอร์นที่ไม่ใช่ของยูนิคอร์น (เปิดเผยการทำงานที่ไม่เหมาะสมสำหรับม้าแต่ละตัว) ส่งคืนค่าเริ่มต้นหรือค่าเวทย์มนตร์สำหรับความยาวของฮอร์นที่ไม่ใช่ของยูนิคอร์น (ต้องใช้การตรวจสอบเริ่มต้นที่ทำตัวกลมกลืนตลอดรหัสใด ๆ ที่ต้องการกระทืบสถิติฮอร์นบนกลุ่มของม้าที่อาจไม่ใช่ยูนิคอร์น) ทำไปด้วยมรดกและสร้างวัตถุแยกต่างหากบนม้าที่บอกคุณว่าม้าเป็นยูนิคอร์นหรือไม่ (ซึ่งอาจผลักปัญหาเดียวกันลงมาที่เลเยอร์) ฉันมีความรู้สึกว่าสิ่งนี้จะได้รับคำตอบที่ดีที่สุดด้วยคำว่า "ไม่ใช่คำตอบ" แต่คุณจะแก้ไขปัญหานี้อย่างไรและหากเป็นเช่นนั้นบริบทของการตัดสินใจของคุณคืออะไร ฉันยังสนใจในข้อมูลเชิงลึกใด ๆ ว่าปัญหานี้ยังคงมีอยู่ในรหัสการทำงานหรือไม่ สิ่งนี้ถูกตั้งค่าสถานะว่าซ้ำซ้อนกับคำถามต่อไปนี้: จะหลีกเลี่ยงการดาวน์สตรีมได้อย่างไร คำตอบสำหรับคำถามนั้นสมมติว่ามีใครอยู่ในความครอบครองของHornMeasurerที่เขาจะต้องทำการวัดทั้งหมด แต่นั่นเป็นการจัดวางรหัสฐานที่ค่อนข้างถูกสร้างขึ้นภายใต้หลักการด้านสิทธิประโยชน์ที่ทุกคนควรมีอิสระในการวัดแตรของม้า ไม่มีกHornMeasurer. คำตอบที่ได้รับการยอมรับจะสะท้อนวิธีการตามข้อยกเว้นที่ระบุไว้ข้างต้น นอกจากนี้ยังมีความสับสนในความคิดเห็นเกี่ยวกับว่าม้าและยูนิคอร์นเป็นม้าทั้งคู่หรือว่าเป็นยูนิคอร์นเป็นสายพันธุ์ที่มีมนต์ขลังของม้า ควรพิจารณาถึงความเป็นไปได้ทั้งสองอย่างหรือไม่?

8
เหตุใดแนวคิดของการประเมินแบบขี้เกียจจึงมีประโยชน์
ดูเหมือนว่าการประเมินนิพจน์ที่ขี้เกียจสามารถทำให้โปรแกรมเมอร์สูญเสียการควบคุมคำสั่งที่เรียกใช้งานโค้ด ฉันมีปัญหาในการทำความเข้าใจว่าทำไมจึงเป็นที่ยอมรับหรือต้องการโดยโปรแกรมเมอร์ กระบวนทัศน์นี้สามารถใช้เพื่อสร้างซอฟต์แวร์ที่สามารถคาดการณ์ได้ซึ่งทำงานได้ตามที่ตั้งใจไว้เมื่อเราไม่รับประกันว่าจะให้มีการประเมินการแสดงออกเมื่อใดและที่ไหน

10
ผู้สนับสนุนการเขียนโปรแกรมเชิงฟังก์ชั่นจะตอบข้อความนี้ใน Code Complete อย่างไร
ในหน้า 839 ของรุ่นที่สอง Steve McConnell กำลังพูดถึงวิธีการทั้งหมดที่โปรแกรมเมอร์สามารถ "พิชิตความซับซ้อน" ในโปรแกรมขนาดใหญ่ เคล็ดลับของเขาถึงจุดสูงสุดด้วยข้อความนี้: "การเขียนโปรแกรมเชิงวัตถุให้ระดับของนามธรรมที่ใช้กับอัลกอริธึมและข้อมูลในเวลาเดียวกันซึ่งเป็นนามธรรมชนิดหนึ่งที่การสลายตัวของฟังก์ชั่นเพียงอย่างเดียวไม่ได้ให้" เมื่อรวมกับข้อสรุปของเขาว่า "การลดความซับซ้อนนั้นเป็นกุญแจสำคัญที่สุดในการเป็นโปรแกรมเมอร์ที่มีประสิทธิภาพ" (หน้าเดียวกัน) สิ่งนี้ดูเหมือนจะเป็นความท้าทายอย่างมากสำหรับการเขียนโปรแกรมเชิงหน้าที่ การถกเถียงกันระหว่าง FP และ OO มักถูกนำเสนอโดย FP proponents เกี่ยวกับปัญหาของความซับซ้อนที่เกิดขึ้นโดยเฉพาะจากความท้าทายของการเกิดพร้อมกันหรือการขนาน แต่การทำงานพร้อมกันนั้นไม่ได้เป็นเพียงความซับซ้อนของโปรแกรมเมอร์ซอฟต์แวร์เท่านั้นที่จะต้องมีชัย บางทีการมุ่งเน้นไปที่การลดความซับซ้อนหนึ่งประเภทนั้นเพิ่มขึ้นอย่างมากในมิติอื่น ๆ เช่นในหลาย ๆ กรณีกำไรที่ได้ไม่คุ้มกับต้นทุน หากเราเปลี่ยนเงื่อนไขของการเปรียบเทียบระหว่าง FP และ OO จากประเด็นเฉพาะเช่นการเห็นพ้องด้วยหรือนำกลับมาใช้ใหม่เพื่อการจัดการความซับซ้อนระดับโลกการอภิปรายนั้นจะมีลักษณะอย่างไร แก้ไข ความแตกต่างที่ฉันต้องการเน้นคือ OO ดูเหมือนว่าจะห่อหุ้มและเป็นนามธรรมห่างจากความซับซ้อนของข้อมูลและอัลกอริทึมในขณะที่ฟังก์ชั่นการเขียนโปรแกรมฟังก์ชั่นดูเหมือนสนับสนุนให้รายละเอียดการดำเนินงานของโครงสร้างข้อมูล ดูตัวอย่างเช่น Stuart Halloway (ผู้เสนอชื่อ Clojure FP) ที่นี่บอกว่า "ข้อมูลจำเพาะของประเภทข้อมูล" เป็น "ผลลัพธ์เชิงลบของลักษณะ OO แบบใช้สำนวน" และนิยมวางแนวคิด …

5
การโปรแกรมในปรัชญา UNIX เหมือนกับการเขียนโปรแกรมเชิงหน้าที่หรือไม่?
สภาพแวดล้อมการเขียนโปรแกรม UNIX (ข้อความคลาสสิก) ระบุว่าวิธี UNIX ในการเขียนโปรแกรมคือการสร้างเครื่องมือขนาดเล็กที่กำหนดอย่างดีซึ่งสามารถรวมกันเพื่อแก้ไขปัญหาที่ซับซ้อนมากขึ้น ในการเรียนรู้ C และ Bash shell ฉันพบว่านี่เป็นแนวคิดที่ทรงพลังที่สามารถใช้เพื่อจัดการกับปัญหาการเขียนโปรแกรมที่หลากหลาย เพียงแค่ใช้แพลตฟอร์ม Linux แนวคิดนั้นค่อนข้างชัดเจนและใช้งานได้ตลอดเวลา การแสดงออกใด ๆ ที่เกิดขึ้นในบรรทัดคำสั่งที่เปลี่ยนเส้นทาง I / O, การเชื่อมโยงเครื่องมือระบบเช่น ls, grep, อื่น ๆ และอื่น ๆ แสดงให้เห็นว่าแนวคิดนี้มีประสิทธิภาพเพียงใด สิ่งที่ทำให้ฉันสับสนคือหลายโปรแกรมเหล่านี้เขียนด้วยภาษา C โดยใช้รูปแบบการเขียนโปรแกรมที่จำเป็น / ขั้นตอน แต่วิธีที่พวกเขาใช้และเชื่อมต่อเข้าด้วยกันในบรรทัดคำสั่งนั้นดูเหมือนโปรแกรมการทำงานกับฉันมากขึ้น ฟังก์ชั่นแยกที่ไม่ได้ขึ้นอยู่กับสถานะของโปรแกรมอื่น ๆ ที่มันอาจจะเข้าร่วม สิ่งนี้ถูกต้องหรือไม่การเข้าใจปรัชญาการเขียนโปรแกรมของ UNIX นั้นคือการเขียนโปรแกรมที่ใช้งานได้โดยใช้เครื่องมือที่อาจสร้างขึ้นโดยใช้รูปแบบการเขียนโปรแกรมที่จำเป็น?

3
Haskell vs Erlang สำหรับบริการบนเว็บ
ฉันกำลังมองหาที่จะเริ่มต้นโครงการทดลองโดยใช้ภาษาที่ใช้งานได้และพยายามที่จะตัดสินใจว่า Erlang และ Haskell เป็นคนบ้าและทั้งสองมีบางประเด็นที่ฉันชอบ ฉันชอบระบบที่แข็งแกร่งและความบริสุทธิ์ของ Haskell ฉันรู้สึกว่ามันจะง่ายต่อการเขียนรหัสที่เชื่อถือได้จริงๆ และฉันคิดว่าพลังของ Haskell จะทำให้บางสิ่งที่ฉันต้องการทำได้ง่ายขึ้นมาก ในด้านลบฉันได้รับความรู้สึกว่าบางส่วนของ Frameworks สำหรับการทำสิ่งต่างๆบนเว็บใน Haskell เช่น Yesod นั้นไม่ได้ก้าวหน้าไปกว่าชิ้นส่วน Erlang ของพวกเขา ฉันชอบวิธีการของ Erlang สำหรับเธรดและการยอมรับข้อผิดพลาด ฉันรู้สึกว่า scalability ของ Erlang อาจเป็นข้อดีหลัก ๆ ได้ ซึ่งนำไปสู่คำถามของฉันสิ่งที่ผู้คนได้รับจากการใช้แบ็กเอนด์เว็บแอปพลิเคชันใน Haskell และ Erlang มีแพ็คเกจสำหรับ Haskell เพื่อจัดหาเธรดและนักแสดงบางส่วนที่มีอยู่ใน Erlang หรือไม่?

3
วิธีต่าง ๆ ในการดู monad
ในขณะที่เรียนรู้ Haskell ฉันได้พบกับบทเรียนมากมายที่พยายามอธิบายสิ่งที่ monads และทำไม monads มีความสำคัญใน Haskell แต่ละคนใช้การเปรียบเทียบดังนั้นการจับความหมายได้ง่ายขึ้น ในตอนท้ายของวันฉันได้จบลงด้วยมุมมองที่แตกต่างกัน 3 แบบว่า monad คืออะไร: ดู 1: Monad เป็นป้ายกำกับ บางครั้งฉันคิดว่า monad เป็นป้ายชื่อประเภทเฉพาะ ตัวอย่างเช่นฟังก์ชั่นของประเภท: myfunction :: IO Int myfunction เป็นฟังก์ชันที่เมื่อใดก็ตามที่มีการดำเนินการมันจะให้ค่า Int ชนิดของผลลัพธ์ไม่ใช่ Int แต่เป็น IO Int ดังนั้น IO จึงเป็นเลเบลของค่า Int เตือนผู้ใช้ให้รู้ว่าค่า Int เป็นผลลัพธ์ของกระบวนการที่ได้ทำการกระทำของ IO ดังนั้นค่า Int นี้จึงถูกทำเครื่องหมายเป็นค่าที่มาจากกระบวนการที่มี IO ดังนั้นค่านี้จึงเป็น "สกปรก" กระบวนการของคุณไม่บริสุทธิ์อีกต่อไป ดู …

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

4
return-type- (only)-Polymorphism ใน Haskell เป็นสิ่งที่ดีหรือไม่?
สิ่งหนึ่งที่ฉันไม่เคยคิดมาก่อนใน Haskell คือวิธีที่คุณสามารถมีค่าคงที่แบบ polymorphic และฟังก์ชั่นที่ประเภทการคืนค่าไม่สามารถกำหนดได้ตามประเภทอินพุตของพวกเขาเช่น class Foo a where foo::Int -> a บางเหตุผลที่ฉันไม่ชอบสิ่งนี้: ความโปร่งใสอ้างอิง: "ใน Haskell เมื่อได้รับอินพุตเดียวกันฟังก์ชั่นจะส่งคืนเอาต์พุตเดียวกันเสมอ" แต่นั่นเป็นเรื่องจริงหรือ read "3"return 3 เมื่อใช้ในIntบริบท แต่ส่งข้อผิดพลาดเมื่อใช้ใน a, say, (Int,Int)context ใช่คุณสามารถโต้แย้งได้ว่าreadการรับพารามิเตอร์ประเภท แต่ความนัยของพารามิเตอร์ประเภททำให้ความงามของมันหายไปในความคิดของฉัน ข้อ จำกัด monomorphism: หนึ่งในสิ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell แก้ไขให้ฉันถ้าฉันผิด แต่เหตุผลทั้งหมดสำหรับ MR คือการคำนวณที่มีลักษณะที่ใช้ร่วมกันอาจไม่ใช่เพราะพารามิเตอร์ type เป็นนัย ประเภทการเริ่มต้น: อีกสิ่งหนึ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell เกิดขึ้นเช่นถ้าคุณส่งผลลัพธ์ของฟังก์ชัน polymorphic ในผลลัพธ์ไปยังฟังก์ชัน polymorphic ในอินพุต อีกครั้งแก้ไขให้ฉันถ้าฉันผิด แต่สิ่งนี้จะไม่จำเป็นหากไม่มีฟังก์ชันที่ชนิดของการส่งคืนไม่สามารถกำหนดได้ตามประเภทอินพุต (และค่าคงที่แบบ …

6
การเรียนรู้ภาษาที่ใช้งานได้จะทำให้โปรแกรมเมอร์ OOP ดีขึ้นหรือไม่ [ปิด]
ในฐานะโปรแกรมเมอร์ Java / C # / C ++ ฉันได้ยินการพูดคุยเกี่ยวกับภาษาที่ใช้งานได้หลายอย่าง แต่ไม่เคยพบว่าจำเป็นต้องเรียนรู้ ฉันเคยได้ยินเช่นกันว่าระดับความคิดที่สูงขึ้นของภาษาที่ใช้งานได้ทำให้คุณเป็นโปรแกรมเมอร์ภาษา OOP / ขั้นตอนที่ดีขึ้น มีใครยืนยันได้ไหม มันพัฒนาทักษะการเขียนโปรแกรมของคุณในทางใดบ้าง อะไรคือตัวเลือกที่ดีของภาษาในการเรียนรู้โดยมีเป้าหมายเพื่อพัฒนาทักษะในภาษาที่ซับซ้อนน้อยกว่า?

5
การจับ / การโยนข้อยกเว้นทำให้วิธีการที่บริสุทธิ์นั้นไม่บริสุทธิ์หรือไม่?
ตัวอย่างโค้ดต่อไปนี้ให้บริบทกับคำถามของฉัน คลาสของห้องพักถูกเตรียมใช้งานด้วยผู้รับมอบสิทธิ์ ในการดำเนินการครั้งแรกของคลาสห้องไม่มีผู้คุมที่ได้รับมอบหมายที่โยนข้อยกเว้น ข้อยกเว้นดังกล่าวจะทำให้เกิดฟองขึ้นไปยังสถานที่ให้บริการภาคเหนือซึ่งมีการประเมินผู้ได้รับมอบหมาย (หมายเหตุ: วิธีการหลัก () แสดงให้เห็นถึงวิธีการที่อินสแตนซ์ของห้องพักจะใช้ในรหัสลูกค้า): public sealed class Room { private readonly Func<Room> north; public Room(Func<Room> north) { this.north = north; } public Room North { get { return this.north(); } } public static void Main(string[] args) { Func<Room> evilDelegate = () => { throw new Exception(); …

7
การเขียนโปรแกรมเชิงฟังก์ชันละเลยประโยชน์ที่ได้รับจาก“ ตามเกณฑ์ที่จะใช้ในการย่อยสลายระบบเป็นโมดูล” (การซ่อนข้อมูล) หรือไม่?
มีบทความคลาสสิกชื่อตามเกณฑ์ที่จะใช้ในการย่อยสลายระบบเป็นโมดูลที่ฉันเพิ่งอ่านเป็นครั้งแรก มันสมเหตุสมผลดีสำหรับฉันและอาจเป็นหนึ่งในบทความที่ OOP อ้างอิง ข้อสรุปของมัน: เราพยายามสาธิตโดยตัวอย่างเหล่านี้ว่ามันไม่ถูกต้องเสมอไปที่จะเริ่มการสลายตัวของระบบเป็นโมดูลบนพื้นฐานของแผนผังลำดับงาน ... แต่ละโมดูลได้รับการออกแบบมาเพื่อซ่อนการตัดสินใจจากสิ่งอื่น ในความเห็นที่ไม่มีการศึกษาและไม่มีประสบการณ์ของฉันการเขียนโปรแกรมฟังก์ชั่นใช้คำแนะนำตรงข้ามแน่นอนของบทความนี้ ความเข้าใจของฉันคือการเขียนโปรแกรมการทำงานทำให้การไหลของข้อมูลเป็นสำนวน ข้อมูลถูกส่งผ่านจากฟังก์ชั่นหนึ่งไปยังอีกฟังก์ชั่นแต่ละฟังก์ชั่นจะรับรู้ข้อมูลอย่างใกล้ชิดและ"เปลี่ยน"ไปพร้อมกัน และฉันคิดว่าฉันเคยเห็น Rich Hickey คุยกันในที่ที่เขาพูดถึงว่าการซ่อนข้อมูลนั้นเกินจริงหรือไม่จำเป็นหรืออะไร แต่ฉันจำไม่ได้แน่นอน ก่อนอื่นฉันต้องการทราบว่าการประเมินของฉันถูกต้องหรือไม่ กระบวนทัศน์ของ FP และบทความนี้ขัดแย้งกับปรัชญาหรือไม่? สมมติว่าพวกเขาไม่เห็นด้วย FP จะ "ชดเชย" อย่างไรหากไม่มีการซ่อนข้อมูล บางทีพวกเขาอาจเสียสละการซ่อนข้อมูล แต่ได้รับ X, Y และ Z ฉันต้องการทราบเหตุผลว่าทำไม X, Y และ Z จึงถือว่าเป็นประโยชน์มากกว่าการซ่อนข้อมูล หรือสมมติว่าพวกเขาไม่เห็นด้วย FP อาจรู้สึกว่าการซ่อนข้อมูลไม่ดี ถ้าเป็นเช่นนั้นทำไมจึงคิดว่าการซ่อนข้อมูลไม่ดี สมมติว่าพวกเขาเห็นด้วยฉันต้องการทราบว่าการนำ FPs ไปปฏิบัติใช้ของการซ่อนข้อมูลคืออะไร เห็นได้ชัดใน OOP คุณสามารถมีprivateฟิลด์ที่ไม่มีใครนอกชั้นเรียนสามารถเข้าถึงได้ ไม่มีสิ่งใดที่เปรียบเทียบกับฉันใน FP ฉันรู้สึกว่ามีคำถามอื่น …

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