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

ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์การเขียนโปรแกรมตามการสร้าง abstractions โดยใช้ฟังก์ชั่นหลีกเลี่ยงผลข้างเคียงและการเปลี่ยนแปลงของรัฐ การเขียนโปรแกรมใช้งานได้จริงนั้นปลอดภัยต่อเธรด

17
คุณจะทำอะไรที่มีประโยชน์โดยไม่เปลี่ยนสถานะได้อย่างไร
ฉันได้อ่านสิ่งต่าง ๆ มากมายเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นเมื่อเร็ว ๆ นี้และฉันสามารถเข้าใจได้เกือบทั้งหมด แต่สิ่งหนึ่งที่ฉันไม่สามารถห่อหัวของฉันคือการเข้ารหัสไร้สัญชาติ ดูเหมือนว่าสำหรับฉันแล้วการทำให้โปรแกรมง่ายขึ้นโดยการลบสถานะที่ไม่แน่นอนออกมานั้นก็เหมือนกับ "การทำให้ง่ายขึ้น" โดยการเอาแดชบอร์ดออก: ผลิตภัณฑ์ที่เสร็จแล้วอาจจะง่ายกว่า แต่โชคดีที่ทำให้มันโต้ตอบกับผู้ใช้ปลายทาง ทุกแอปพลิเคชันผู้ใช้ที่ฉันสามารถนึกถึงเกี่ยวข้องเป็นแนวคิดหลัก ถ้าคุณเขียนเอกสาร (หรือโพสต์ SO) สถานะจะเปลี่ยนไปด้วยอินพุตใหม่ทุกรายการ หรือถ้าคุณเล่นวิดีโอเกมมีตัวแปรสถานะเป็นจำนวนมากเริ่มต้นจากตำแหน่งของตัวละครทั้งหมดที่มีแนวโน้มที่จะเคลื่อนไหวอย่างต่อเนื่อง คุณจะทำอะไรที่มีประโยชน์โดยไม่ติดตามการเปลี่ยนแปลงค่าได้อย่างไร ทุกครั้งที่ฉันพบบางสิ่งที่กล่าวถึงปัญหานี้มันเขียนด้วยฟังก์ชั่นด้านเทคนิคจริงๆซึ่งถือว่าเป็นพื้นหลัง FP ที่หนักหน่วงที่ฉันไม่มี ไม่มีใครรู้วิธีที่จะอธิบายสิ่งนี้กับคนที่มีความเข้าใจที่ดีและมั่นคงของการเขียนโปรแกรมที่จำเป็น แต่ใครเป็น n00b ที่สมบูรณ์ในด้านการทำงาน? แก้ไข: กลุ่มคำตอบจนถึงตอนนี้ดูเหมือนจะพยายามโน้มน้าวใจฉันถึงข้อดีของค่าที่ไม่เปลี่ยนรูปแบบ ฉันได้ส่วนนั้น มันทำให้รู้สึกที่สมบูรณ์แบบ สิ่งที่ฉันไม่เข้าใจคือวิธีที่คุณสามารถติดตามค่าที่ต้องเปลี่ยนแปลงและเปลี่ยนแปลงอย่างต่อเนื่องโดยไม่มีตัวแปรที่ไม่แน่นอน

8
วิธีการใช้ underscore.js เป็นเครื่องมือแม่แบบ?
ฉันพยายามเรียนรู้เกี่ยวกับจาวาสคริปต์ใหม่ ๆ ในฐานะภาษาเซิร์ฟเวอร์และภาษาที่ใช้งานได้ ไม่กี่วันที่ผ่านมาฉันได้ยินเกี่ยวกับ node.js และแสดงกรอบงาน จากนั้นฉันเห็น underscore.js เป็นชุดฟังก์ชันยูทิลิตี้ ผมเห็นคำถามนี้ใน StackOverflow มันบอกว่าเราสามารถใช้ underscore.js เป็นเครื่องมือแม่แบบ ใครรู้บทเรียนที่ดีเกี่ยวกับวิธีการใช้ underscore.js สำหรับการสร้างเทมเพลตโดยเฉพาะอย่างยิ่งสำหรับผู้ที่มีประสบการณ์น้อยกับจาวาสคริปต์ขั้นสูง ขอบคุณ

4
"การยก" ใน Scala คืออะไร
บางครั้งเมื่อฉันอ่านบทความในระบบนิเวศสกาล่าฉันอ่านคำว่า "การยก" / "ยกขึ้น" น่าเสียดายที่มันไม่ได้อธิบายว่ามันหมายถึงอะไรกันแน่ ฉันได้ทำการวิจัยและดูเหมือนว่าการยกมีบางอย่างเกี่ยวกับค่านิยมในการใช้งานหรืออะไรทำนองนั้น แต่ฉันไม่สามารถหาข้อความที่อธิบายว่าการยกกำลังนั้นเกี่ยวข้องกับการเริ่มต้นที่เป็นมิตร มีความสับสนเพิ่มเติมผ่านเฟรมเวิร์กLiftซึ่งยกชื่อขึ้นมา แต่มันก็ไม่ได้ช่วยตอบคำถาม "การยก" ใน Scala คืออะไร

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

11
คำอธิบายที่ดีที่สุดสำหรับภาษาที่ไม่มีค่า null
บ่อยครั้งเมื่อโปรแกรมเมอร์กำลังบ่นเกี่ยวกับข้อผิดพลาด / ข้อยกเว้นของโมฆะบางคนถามว่าเราทำอะไรโดยไม่มีโมฆะ ฉันมีความคิดพื้นฐานเกี่ยวกับความเท่ของตัวเลือกประเภทต่าง ๆ แต่ฉันไม่มีความรู้หรือทักษะทางภาษาที่จะแสดงได้ดีที่สุด อะไรคือคำอธิบายที่ยอดเยี่ยมของสิ่งต่อไปนี้ที่เขียนในวิธีที่เข้าถึงโปรแกรมเมอร์โดยเฉลี่ยที่เราสามารถชี้ให้บุคคลนั้นเห็นได้ ความไม่พึงประสงค์ของการมีการอ้างอิง / พอยน์เตอร์จะเป็นโมฆะโดยค่าเริ่มต้น ประเภทตัวเลือกทำงานอย่างไรรวมถึงกลยุทธ์ในการตรวจสอบกรณีว่างเช่น การจับคู่รูปแบบและ ความเข้าใจแบบ monadic ทางเลือกอื่น ๆ เช่นการกินข้อความไม่มี (ด้านอื่น ๆ ที่ฉันพลาด)

15
Javascript ลดจำนวนอาร์เรย์ของวัตถุ
ว่าผมต้องการที่จะสรุปสำหรับแต่ละองค์ประกอบในa.xarr arr = [{x:1},{x:2},{x:4}] arr.reduce(function(a,b){return a.x + b.x}) >> NaN ฉันเชื่อว่าขวานไม่ได้กำหนดไว้ในบางจุด งานต่อไปนี้ใช้ได้ดี arr = [1,2,4] arr.reduce(function(a,b){return a + b}) >> 7 ฉันทำอะไรผิดในตัวอย่างแรก

17
ในฟังก์ชั่นการเขียนโปรแกรม functor คืออะไร?
ฉันเจอคำว่า 'Functor' สองสามครั้งในขณะที่อ่านบทความต่าง ๆ เกี่ยวกับฟังก์ชันการเขียนโปรแกรม แต่ผู้เขียนมักจะถือว่าผู้อ่านเข้าใจคำนั้นอยู่แล้ว การมองไปรอบ ๆ บนเว็บได้ให้คำอธิบายทางเทคนิคมากเกินไป (ดูบทความ Wikipedia ) หรือคำอธิบายที่คลุมเครืออย่างไม่น่าเชื่อ (ดูหัวข้อใน Functors ที่เว็บไซต์ ocaml-tutorial ) ใครบางคนสามารถกำหนดคำอธิบายการใช้งานและอาจเป็นตัวอย่างของวิธีการสร้างและใช้งานผู้ใช้ แก้ไข : ในขณะที่ฉันสนใจในทฤษฎีหลังคำ แต่ฉันสนใจทฤษฎีน้อยกว่าฉันในการนำไปปฏิบัติและใช้ประโยชน์จากแนวคิด แก้ไข 2 : ดูเหมือนว่ามีบางจุดเชื่อมโยงข้ามที่เกิดขึ้น: ฉันหมายถึงเฉพาะ Funisors ของการเขียนโปรแกรมการทำงานไม่ใช่วัตถุฟังก์ชั่นของ C ++

16
Javascript เทียบเท่ากับฟังก์ชั่น zip ของ Python
มีฟังก์ชัน javascript ที่เทียบเท่ากับฟังก์ชัน zip ของ Python หรือไม่ นั่นคือให้หลายอาร์เรย์ที่มีความยาวเท่ากันสร้างอาร์เรย์ของคู่ ตัวอย่างเช่นถ้าฉันมีสามอาร์เรย์ที่มีลักษณะเช่นนี้: var array1 = [1, 2, 3]; var array2 = ['a','b','c']; var array3 = [4, 5, 6]; อาร์เรย์เอาต์พุตควรเป็น: var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]

17
array_map ของ PHP รวมถึงปุ่มต่างๆ
มีวิธีทำสิ่งนี้ไหม: $test_array = array("first_key" => "first_value", "second_key" => "second_value"); var_dump(array_map(function($a, $b) { return "$a loves $b"; }, array_keys($test_array), array_values($test_array))); แต่แทนที่จะโทรarray_keysและarray_valuesส่งผ่านโดยตรง$test_arrayตัวแปรหรือไม่ ผลลัพธ์ที่ต้องการคือ: array(2) { [0]=> string(27) "first_key loves first_value" [1]=> string(29) "second_key loves second_value" }

6
รายการของสตริงหนึ่งสตริง
ให้บอกว่าคุณมี: List<string> los = new List<string>(); ในโลกแห่งการทำงานที่บ้าคลั่งนี้เราอาศัยอยู่ในยุคนี้ซึ่งหนึ่งในนั้นจะดีที่สุดสำหรับการสร้างสตริงหนึ่งโดยเชื่อมต่อสิ่งเหล่านี้: String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s)); string disp = los.Aggregate<string>((a, b) => a + b); หรือ StringBuilder เก่าแบบธรรมดา foreach หรือมีวิธีที่ดีกว่า

11
เหตุใดการเปลี่ยนแปลงไม่ได้จึงสำคัญ (หรือจำเป็น) ใน JavaScript
ฉันกำลังทำงานกับReact JSและReact Native framework ในช่วงครึ่งทางฉันพบว่า Immutability หรือห้องสมุด Immutable -JSเมื่อฉันอ่านเกี่ยวกับการใช้ Flux และ Redux ของ Facebook คำถามคือทำไมการไม่เปลี่ยนรูปจึงสำคัญมาก? เกิดอะไรขึ้นในการกลายพันธุ์วัตถุ? มันไม่ได้ทำให้สิ่งต่าง ๆ ง่ายขึ้น? ยกตัวอย่างให้เราพิจารณาแอพอ่านข่าวแบบง่ายโดยมีหน้าจอเปิดเป็นมุมมองรายการของหัวข้อข่าว หากฉันตั้งค่าให้บอกว่าอาร์เรย์ของวัตถุที่มีค่าเริ่มต้นฉันไม่สามารถจัดการมันได้ นั่นคือสิ่งที่หลักการเปลี่ยนแปลงไม่ได้พูดว่าใช่มั้ย (แก้ไขให้ถูกต้องหากฉันทำผิด) แต่จะเกิดอะไรขึ้นถ้าฉันมีวัตถุข่าวใหม่ที่ต้องได้รับการปรับปรุง ในกรณีปกติฉันสามารถเพิ่มวัตถุลงในอาร์เรย์ได้ ฉันจะประสบความสำเร็จในกรณีนี้ได้อย่างไร ลบร้านค้าและสร้างใหม่หรือไม่ การเพิ่มวัตถุลงในอาร์เรย์เป็นการดำเนินการที่ไม่แพงหรือไม่

13
มีวิธีการทางวิศวกรรมซอฟต์แวร์สำหรับการตั้งโปรแกรมการทำงานหรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ วิศวกรรมซอฟต์แวร์ตามที่ได้รับการสอนในปัจจุบันมุ่งเน้นไปที่การเขียนโปรแกรมเชิงวัตถุและมุมมองเชิงวัตถุ 'ธรรมชาติ' ของโลก มีวิธีการอย่างละเอียดที่อธิบายวิธีการแปลงโมเดลโดเมนเป็นโมเดลคลาสที่มีหลายขั้นตอนและสิ่งประดิษฐ์จำนวนมาก (UML) เช่น use-case-diagrams หรือ class-diagrams โปรแกรมเมอร์จำนวนมากใช้วิธีนี้ภายในและมีความคิดที่ดีเกี่ยวกับวิธีการออกแบบแอปพลิเคชันเชิงวัตถุตั้งแต่เริ่มต้น hype ใหม่คือการเขียนโปรแกรมใช้งานได้ซึ่งสอนในหนังสือและแบบฝึกหัดมากมาย แต่สิ่งที่เกี่ยวกับวิศวกรรมซอฟต์แวร์การทำงาน? ในขณะที่อ่านเกี่ยวกับ Lisp และ Clojure ฉันมาถึงสองข้อความที่น่าสนใจ: โปรแกรมการทำงานนั้นมักจะถูกพัฒนาจากล่างขึ้นบนแทนที่จะเป็นบนลงล่าง ('บน Lisp', Paul Graham) ฟังก์ชั่นโปรแกรมเมอร์ใช้แผนที่ที่ OO-โปรแกรมเมอร์ใช้วัตถุ / คลาส ('Clojure สำหรับ Java โปรแกรมเมอร์', พูดคุยโดย Rich Hickley) ดังนั้นวิธีการสำหรับการออกแบบอย่างเป็นระบบ (ตามรูปแบบ?) ของการใช้งานคือใน Lisp หรือ Clojure? ขั้นตอนทั่วไปคืออะไรฉันใช้สิ่งประดิษฐ์อะไรฉันจะแม็พสิ่งเหล่านั้นจากพื้นที่ปัญหาไปยังพื้นที่โซลูชันอย่างไร

11
เหตุใดจึงยังไม่ได้เขียนโปรแกรมที่ใช้งานได้ไป
ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันได้อ่านข้อความบางส่วนเกี่ยวกับการเขียนโปรแกรมเชิงประกาศ / การใช้งาน (ภาษา) ลองใช้ Haskell และเขียนด้วยตัวเอง จากสิ่งที่ฉันได้เห็นการเขียนโปรแกรมการทำงานมีข้อดีหลายประการมากกว่ารูปแบบที่จำเป็นคลาสสิก: โปรแกรมไร้สัญชาติ ไม่มีผลข้างเคียง เห็นพ้องด้วย; เล่นได้ดีมากด้วยเทคโนโลยีมัลติคอร์ที่สูงขึ้น โปรแกรมมักจะสั้นกว่าและในบางกรณีก็ง่ายต่อการอ่าน ผลผลิตเพิ่มขึ้น (ตัวอย่าง: Erlang) การเขียนโปรแกรมเชิงความคิดเป็นกระบวนทัศน์ที่เก่าแก่มาก (เท่าที่ฉันรู้) และอาจไม่เหมาะสำหรับศตวรรษที่ 21 เหตุใด บริษัท ที่ใช้หรือโปรแกรมที่เขียนในภาษาที่ใช้งานได้ยังคง“ หายาก” ทำไมเมื่อดูข้อดีของการเขียนโปรแกรมเพื่อการทำงานเรายังคงใช้ภาษาการเขียนโปรแกรมที่จำเป็นหรือไม่ อาจจะเร็วเกินไปสำหรับในปี 1990 แต่วันนี้

7
ความแตกต่างระหว่าง foldLeft และลด leeft ใน Scala
ฉันได้เรียนรู้ความแตกต่างพื้นฐานระหว่างfoldLeftและreduceLeft foldLeft: ค่าเริ่มต้นจะต้องถูกส่งผ่าน reduceLeft: ใช้องค์ประกอบแรกของการรวบรวมเป็นค่าเริ่มต้น พ่นข้อยกเว้นถ้าคอลเลกชันว่างเปล่า มีความแตกต่างอื่น ๆ อีกไหม? เหตุผลใดที่มีสองวิธีที่มีฟังก์ชั่นคล้ายกัน

6
Python: ทำไม functools.partial จึงมีความจำเป็น
แอพลิเคชันบางส่วนจะเย็น มีฟังก์ชั่นอะไรบ้างfunctools.partialที่คุณไม่สามารถผ่าน lambdas ได้? >>> sum = lambda x, y : x + y >>> sum(1, 2) 3 >>> incr = lambda y : sum(1, y) >>> incr(2) 3 >>> def sum2(x, y): return x + y >>> incr2 = functools.partial(sum2, 1) >>> incr2(4) 5 คือfunctoolsอย่างใดมีประสิทธิภาพมากขึ้นหรืออ่าน?

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