คุณคิดว่าประโยชน์ของการเขียนโปรแกรมเชิงฟังก์ชันคืออะไร? แล้วสมัยนี้สมัครโปรแกรมเมอร์กันยังไง?
อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างการเขียนโปรแกรมเชิงฟังก์ชันและ OOP
คุณคิดว่าประโยชน์ของการเขียนโปรแกรมเชิงฟังก์ชันคืออะไร? แล้วสมัยนี้สมัครโปรแกรมเมอร์กันยังไง?
อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างการเขียนโปรแกรมเชิงฟังก์ชันและ OOP
คำตอบ:
รูปแบบของการเขียนโปรแกรมเชิงฟังก์ชันคือการอธิบายสิ่งที่คุณต้องการแทนที่จะได้รับ เช่น: แทนที่จะสร้าง for-loop ด้วยตัวแปรวนซ้ำและเดินผ่านอาร์เรย์ที่ทำบางสิ่งบางอย่างกับแต่ละเซลล์คุณจะบอกว่าสิ่งที่เทียบเท่ากับ "ป้ายกำกับนี้หมายถึงเวอร์ชันของอาร์เรย์นี้ซึ่งมีการใช้ฟังก์ชันนี้กับทุกเซลล์ องค์ประกอบ "
การเขียนโปรแกรมเชิงฟังก์ชันจะย้ายแนวคิดการเขียนโปรแกรมขั้นพื้นฐานไปยังคอมไพเลอร์แนวคิดต่างๆเช่นการทำความเข้าใจรายการและการแคช
ประโยชน์ที่ใหญ่ที่สุดของการเขียนโปรแกรมเชิงฟังก์ชันคือความกะทัดรัดเนื่องจากโค้ดสามารถกระชับได้มากขึ้น โปรแกรมที่ใช้งานได้ไม่ได้สร้างตัวแปรตัววนซ้ำเพื่อเป็นศูนย์กลางของลูปดังนั้นสิ่งนี้และค่าใช้จ่ายประเภทอื่น ๆ จะถูกตัดออกจากโค้ดของคุณ
ประโยชน์หลักอื่น ๆ คือการทำงานพร้อมกันซึ่งทำได้ง่ายกว่าด้วยการเขียนโปรแกรมเชิงฟังก์ชันเนื่องจากคอมไพเลอร์ดูแลการดำเนินการส่วนใหญ่ซึ่งเคยต้องการการตั้งค่าตัวแปรสถานะด้วยตนเอง (เช่นตัววนซ้ำในลูป)
ประโยชน์ด้านประสิทธิภาพบางประการสามารถเห็นได้ในบริบทของโปรเซสเซอร์ตัวเดียวเช่นกันขึ้นอยู่กับวิธีการเขียนโปรแกรมเนื่องจากภาษาและส่วนขยายที่ใช้งานได้ส่วนใหญ่สนับสนุนการประเมินที่ขี้เกียจ ใน Haskell คุณสามารถพูดว่า "ป้ายกำกับนี้แทนอาร์เรย์ที่มีเลขคู่ทั้งหมด" อาร์เรย์ดังกล่าวมีขนาดใหญ่ไม่สิ้นสุด แต่คุณสามารถขอองค์ประกอบที่ 100,000 ของอาร์เรย์นั้นได้ตลอดเวลาโดยไม่ต้องรู้ว่าในเวลาเริ่มต้นอาร์เรย์ - ค่าใดที่คุณต้องการมากที่สุด ค่าจะถูกคำนวณเมื่อคุณต้องการเท่านั้นและจะไม่มีการคำนวณเพิ่มเติม
ประโยชน์ที่ใหญ่ที่สุดคือไม่ใช่สิ่งที่คุณคุ้นเคย เลือกภาษาเช่น Scheme และเรียนรู้วิธีแก้ปัญหาแล้วคุณจะกลายเป็นโปรแกรมเมอร์ที่เก่งขึ้นในภาษาที่คุณรู้จักอยู่แล้ว มันเหมือนกับการเรียนรู้ภาษาที่สองของมนุษย์ คุณคิดว่าโดยพื้นฐานแล้วคนอื่นเป็นรูปแบบของตัวคุณเองเพราะคุณไม่มีอะไรจะเปรียบเทียบได้ การเปิดเผยต่อผู้อื่นโดยเฉพาะอย่างยิ่งสิ่งที่ไม่เกี่ยวข้องกับสิ่งที่คุณรู้อยู่แล้วเป็นคำแนะนำ
เหตุใดการเขียนโปรแกรมเชิงฟังก์ชันจึงเป็นเรื่องสำคัญ
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
บทคัดย่อ
เมื่อซอฟต์แวร์มีความซับซ้อนมากขึ้นการจัดโครงสร้างให้ดีจึงมีความสำคัญมากขึ้นเรื่อย ๆ ซอฟต์แวร์ที่มีโครงสร้างดีนั้นเขียนและแก้จุดบกพร่องได้ง่ายและมีชุดโมดูลที่สามารถนำมาใช้ซ้ำได้เพื่อลดต้นทุนการเขียนโปรแกรมในอนาคต
ในบทความนี้เราแสดงให้เห็นว่าคุณลักษณะสองประการของภาษาที่ใช้งานได้โดยเฉพาะฟังก์ชันลำดับที่สูงขึ้นและการประเมินแบบขี้เกียจสามารถมีส่วนสำคัญในการแยกส่วน ตัวอย่างเช่นเราจัดการรายการและโครงสร้างตั้งโปรแกรมอัลกอริทึมเชิงตัวเลขหลายตัวและใช้การฮิวริสติกอัลฟาเบต้า (อัลกอริทึมจากปัญญาประดิษฐ์ที่ใช้ในโปรแกรมเล่นเกม) เราสรุปได้ว่าเนื่องจากความเป็นโมดูลเป็นกุญแจสำคัญในการเขียนโปรแกรมที่ประสบความสำเร็จการเขียนโปรแกรมเชิงฟังก์ชันจึงมีข้อดีที่สำคัญสำหรับการพัฒนาซอฟต์แวร์
ดังนั้นจุดเริ่มต้นที่ดีคือการพยายามทำความเข้าใจบางสิ่งที่เป็นไปไม่ได้ในภาษาที่จำเป็น แต่เป็นไปได้ในภาษาที่ใช้งานได้
หากคุณกำลังพูดถึงความสามารถในการคำนวณไม่มีอะไรที่เป็นไปได้ในการเขียนโปรแกรมเชิงฟังก์ชัน แต่ไม่จำเป็น (หรือในทางกลับกัน)
ประเด็นของกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกันไม่ได้อยู่ที่การทำให้สิ่งต่าง ๆ เป็นไปได้อย่างที่ไม่เคยทำได้มาก่อนการทำให้สิ่งต่างๆเป็นเรื่องง่ายที่เคยยาก
การเขียนโปรแกรมเชิงฟังก์ชันมีจุดมุ่งหมายเพื่อให้คุณเขียนโปรแกรมที่กระชับปราศจากข้อบกพร่องและสามารถขนานกันได้ง่ายขึ้น
ไม่จำเป็นต้องเป็นอย่างใดอย่างหนึ่ง: การใช้ภาษาเช่น C # 3.0 ช่วยให้คุณสามารถผสมผสานองค์ประกอบที่ดีที่สุดของแต่ละองค์ประกอบได้ OO สามารถใช้สำหรับโครงสร้างขนาดใหญ่ในระดับชั้นเรียนขึ้นไปรูปแบบการทำงานสำหรับโครงสร้างมาตราส่วนขนาดเล็กที่ระดับวิธีการ
การใช้รูปแบบฟังก์ชันช่วยให้สามารถเขียนโค้ดที่ประกาศเจตนาได้อย่างชัดเจนโดยไม่ต้องผสมกับคำสั่งโฟลว์การควบคุม ฯลฯ เนื่องจากหลักการเช่นการเขียนโปรแกรมแบบไม่มีผลข้างเคียงจึงง่ายกว่ามากในการหาเหตุผลเกี่ยวกับโค้ดและตรวจสอบความถูกต้อง .
ฉันคิดว่าตัวอย่างที่เป็นประโยชน์ที่สุดของความจำเป็นในการเขียนโปรแกรมเชิงฟังก์ชันคือการทำงานพร้อมกัน - โปรแกรมที่ใช้งานได้นั้นปลอดภัยต่อเธรดโดยธรรมชาติและเนื่องจากการเพิ่มขึ้นของฮาร์ดแวร์แบบมัลติคอร์นี้มีความสำคัญสูงสุด
การเขียนโปรแกรมเชิงฟังก์ชันยังเพิ่มความเป็นโมดูลาร์ - คุณมักจะเห็นวิธีการ / ฟังก์ชันในความจำเป็นที่ยาวเกินไป - คุณแทบจะไม่เห็นฟังก์ชันยาวเกินสองสามบรรทัด และเนื่องจากทุกอย่างถูกแยกออก - การใช้งานซ้ำจึงได้รับการปรับปรุงให้ดีขึ้นมากและการทดสอบหน่วยก็ทำได้ง่ายมาก
เมื่อโปรแกรมเติบโตขึ้นจำนวนคำสั่งในคำศัพท์ของเราจะสูงเกินไปทำให้ใช้งานได้ยากมาก นี่คือจุดที่การเขียนโปรแกรมเชิงวัตถุทำให้ชีวิตของเราง่ายขึ้นเพราะมันช่วยให้เราจัดระเบียบคำสั่งของเราได้ดีขึ้น เราสามารถเชื่อมโยงคำสั่งทั้งหมดที่เกี่ยวข้องกับลูกค้ากับเอนทิตีลูกค้า (คลาส) ซึ่งจะทำให้คำอธิบายชัดเจนขึ้นมาก อย่างไรก็ตามโปรแกรมยังคงเป็นลำดับของคำสั่งที่ระบุว่าควรดำเนินการอย่างไร
การเขียนโปรแกรมเชิงฟังก์ชันเป็นวิธีการขยายคำศัพท์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ไม่ จำกัด เฉพาะการเพิ่มคำสั่งดั้งเดิมใหม่ นอกจากนี้เรายังสามารถเพิ่มโครงสร้างการควบคุมใหม่ - ดั้งเดิมที่ระบุวิธีที่เราสามารถรวมคำสั่งเข้าด้วยกันเพื่อสร้างโปรแกรม ในภาษาที่จำเป็นเราสามารถเขียนคำสั่งตามลำดับหรือใช้โครงสร้างที่สร้างขึ้นในจำนวน จำกัด เช่นลูป แต่ถ้าคุณดูโปรแกรมทั่วไปคุณจะยังเห็นโครงสร้างที่เกิดซ้ำมากมาย วิธีทั่วไปในการรวมคำสั่ง
อย่าคิดว่าการเขียนโปรแกรมเชิงฟังก์ชันในแง่ของ "ความต้องการ" ให้คิดว่าเป็นเทคนิคการเขียนโปรแกรมอื่นที่จะเปิดใจของคุณเช่นเดียวกับ OOP แม่แบบภาษาแอสเซมบลีและอื่น ๆ อาจเปลี่ยนวิธีคิดของคุณโดยสิ้นเชิงเมื่อ (ถ้า) คุณเรียนรู้ ท้ายที่สุดแล้วการเรียนรู้การเขียนโปรแกรมเชิงฟังก์ชันจะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น
หากคุณยังไม่รู้จักการเขียนโปรแกรมเชิงฟังก์ชันการเรียนรู้จะช่วยให้คุณสามารถแก้ปัญหาได้หลายวิธี
FP เป็นลักษณะทั่วไปอย่างง่ายที่ส่งเสริมฟังก์ชันให้เป็นค่าชั้นหนึ่งในขณะที่ OOP มีไว้สำหรับการจัดโครงสร้างโค้ดขนาดใหญ่ อย่างไรก็ตามมีการทับซ้อนกันอยู่บ้างโดยที่รูปแบบการออกแบบ OOP สามารถแสดงได้โดยตรงและกระชับกว่ามากโดยใช้ฟังก์ชันชั้นหนึ่ง
หลายภาษามีทั้ง FP และ OOP รวมถึง OCaml, C # 3.0 และ F #
ไชโยจอนฮาร์โรป