ทำไมการเขียนโปรแกรมฟังก์ชั่น


38

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


6
ใหญ่มากในการเขียนโปรแกรม AI
น้ำ

3
@aqua - ไม่ควรเป็นคำตอบสำหรับทำไมไม่
Martin Beckett

5
ฉันอยากจะชี้ให้เห็นว่าแม้แต่ภาษา OO ดั้งเดิมก็เริ่มที่จะรวมแนวคิดจากการเขียนโปรแกรมการทำงาน Linq (ใน. NET) เป็นเคสในประเด็น
apoorv020

ฉันคิดว่าการเขียนโปรแกรมแบบใช้งานได้ฝึกสมองของคุณให้มากขึ้นและสามารถนำไปสู่รหัสที่มีสาระแหลมคมจริงๆ ดังนั้นมันจึงค่อนข้างเย็น
Adel

2
@ apoorv020: และข้อมูลทั่วไป, สิ่งอันดับและการรวบรวมขยะและ ... ทั้งหมดมีต้นกำเนิดในภาษาที่ใช้งานได้
Jon Harrop

คำตอบ:


60

เริ่มต้นด้วยทำไมเรื่องฟังก์ชั่นการเขียนโปรแกรม แล้วย้ายไปทำไมทำไมการเขียนโปรแกรมฟังก์ชั่นเรื่องเรื่อง กระสุนไม่กี่:

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

5
+1 - สิ่งเหล่านี้ล้วนเป็นจุดที่ยอดเยี่ยมและพวกเขาก็อธิบายได้อย่างกระชับและละเอียดมากขึ้นกว่าสิ่งที่ฉันพยายามทำ
jmort253

1
กับจุดที่สี่ของคุณคุณไม่ได้หมายถึงภาษาที่สามารถพิสูจน์ได้ถูกต้องหรือโปรแกรมที่เขียนในภาษา? อย่างไรก็ตามทั้งภาษาที่ไม่บริสุทธิ์และโปรแกรมที่เขียนด้วยภาษาที่ไม่บริสุทธิ์สามารถพิสูจน์ได้ว่าถูกต้องมันเป็นเรื่องที่ยากและยุ่งกว่า
Jörg W Mittag

1
@ Jörg W Mittag มันง่ายกว่ามากที่จะให้เหตุผลเกี่ยวกับคุณสมบัติของภาษาเอง ความหมายเชิง Denotational นั้นเป็นเรื่องเล็กน้อยสำหรับภาษาที่ใช้งานได้และค่อนข้างซับซ้อนสำหรับความจำเป็น
SK-logic

ตลกว่าลิงก์ที่สองมีอาร์กิวเมนต์ "ชัดเจน" บางอย่างโดยรู้ว่าฉันไม่ได้อ่านลิงก์ที่ 1
jokoon

+1: คำตอบที่ดี ฉันชอบวิธีที่คุณใส่สัญลักษณ์แสดงหัวข้อ # 1 และ # 2 เป็นคำพูด
จิมจี

9

แนวคิดการเขียนโปรแกรมเชิงหน้าที่สร้างรากฐานที่จะเปลี่ยนวิธีที่คุณคิดและช่วยคุณแก้ปัญหาในโลกแห่งความจริง

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

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

โดยสรุปการเขียนโปรแกรมฟังก์ชั่นช่วยสอนวิธีการเรียนรู้


บางทีมันอาจไม่จำเป็นต้องใช้ชื่อจริงเหรอ? การออกแบบโปรแกรม 'ถูกต้อง' ไม่ใช่หรือ?

4

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

อย่างไรก็ตามตอนนี้เมื่อฉันเข้าสู่แอพบางตัวที่ต้องแยกการแสดงผลและตรรกะนั่นคือเมื่อฉันเริ่มแยกตรรกะและรหัสที่แสดงทั้งหมดเพื่อให้ง่ายขึ้นสำหรับการทำสิ่งที่ดีที่สุด

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


1
+1 - ฉันชอบที่คุณใช้เทคนิคที่ดีที่สุดสำหรับงาน: ตรวจสอบให้แน่ใจว่าเหมาะสม
jmort253

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

"สามัญสำนึกคือสิ่งที่ยุติธรรมที่สุดในโลกเพราะแต่ละคนคิดว่าเขาเป็นคนที่มีความสมบูรณ์มากแม้กระทั่งคนที่ยากที่สุดที่จะพึงพอใจในเรื่องอื่น ๆ ทั้งหมดไม่ได้อยู่ในนิสัยที่ต้องการมากกว่านั้น มี." - Descartes

3

เพราะมันเน้นคำกริยาไม่ใช่คำนาม บางครั้งมันเป็นคำกริยาที่สำคัญ


OOP เน้นคำนาม บางครั้งมันเป็นคำนามที่สำคัญ เราจะรู้ได้อย่างไรว่า? - Dilemma เท็จ ระบบหยุดทำงาน

3

เพราะโดยทั่วไปจะใช้รหัสน้อยกว่าเพื่อให้งานเดียวกันสำเร็จ รหัสน้อยที่จะเขียนเป็นรหัสน้อยกว่าที่จะรักษา นอกจากจะเป็นโค้ดที่น้อยกว่ามันก็มีแนวโน้มที่จะมีสถานะน้อยลงและทำให้ง่ายขึ้นเล็กน้อยในการให้เหตุผล (เมื่อคุณคุ้นเคยกับมัน)


ดังนั้นนั่นไม่ได้เป็นเพียงนิยามของ 'ดีกว่า' ใช่ไหม ทำไมเราต้องการทำสิ่งอื่นนอกเหนือจากสิ่งที่คุณอธิบาย

2

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

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