..


ลิงก์ผู้สนับสนุน

การเขียนโปรแกรมทำงานในทับทิม

บทความที่เขียนโดย Alessio Saltarini
หน้า 1 จาก 2

การแนะนำ

การเขียนโปรแกรมทำงาน (FP) เป็นทางเลือกที่กระบวนทัศน์ในการเขียนโปรแกรมเพื่อให้แบบดั้งเดิม (การเขียนโปรแกรมโครงสร้างหรือความจำเป็นและ object - oriented programming) ที่คิดค้นเป็น"แลมบ์ดาแคลคูลัส"โดย อลอนโซ่คริสตจักร ใน 30 ปีที่ดีก่อนที่จะเป็นที่รู้จักกันว่า ว่าสิ่งที่มันเป็นคอมพิวเตอร์

การศึกษาของคริสตจักรทำหน้าที่เป็นพื้นฐานสำหรับการพัฒนาโปรแกรมภาษา Lisp, และแล้วพวกเขาก็ถูกทอดทิ้งเกือบสมบูรณ์เช่นที่พวกเขาอ้างว่าการเขียนโปรแกรมคอมพิวเตอร์ที่จำเป็นที่สร้างพื้นฐานและเป็น Pascal, C, และในวันนี้ที่ทันสมัย​​ C + + และ Java

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

โปรแกรมการทำงานเป็นมักจะประกอบด้วยฟังก์ชั่นที่ใช้เป็น input ฟังก์ชันการทำงานที่ใช้เวลาทำงานอื่นเป็น input อื่น, และดังนั้นบน

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

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

Ruby และ FP

วันนี้ที่น่าสนใจนี้ได้รับการปลุกให้ตื่น แต่เนื่องจากการเขียนโปรแกรมทำงานทำให้มีผลมาจากการที่มีคุณค่ามาก : มันไม่สามารถนำไปสู่​​ความหมายโดยข้อบกพร่องที่ใช้เวลา ในคำอื่น ๆ ที่รวบรวมเวลาหรือเป็นครั้งแรกที่ทั้งมันทำงานหรือไม่ทำงาน ไม่สามารถทำงานในวิธีการที่ไม่ได้คาด a priori (ในโปรแกรมการทำงานในความเป็นจริงมีแนวคิดของไม่มีข้อยกเว้น)

ดังนั้นจึงเกิดและบางส่วนจะเจริญรุ่งเรืองภาษาทำงาน (มากหรือน้อยบริสุทธิ์และมีการสนับสนุนมากขึ้นหรือน้อยสำหรับการเขียนโปรแกรมแบบดั้งเดิม) เช่น : ML / OCaml , Haskell , F # .

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

และแต่ละแผนที่

ลักษณะแรกของภาษาที่สนับสนุนในทาง FP บางเป็นไปได้ใน iterators ห้องสมุดมาตรฐานการทำงานของคุณ ตัวอย่างเช่น






 $ องค์ประกอบ = [1,2,3,4,5]







 Elementi.map $ {| elem | ทำให้ elem} + 1



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

ฟังก์ชั่นเหล่านี้เรียกว่าฟังก์ชั่นใน FP high - order, ฟังก์ชั่นเช่นที่ใช้เป็นหลายหน้าที่เป็นอินพุท

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

ว่า"แผนที่"หรือ"บริษัท "สำหรับองค์ประกอบของแต่ละคอลเลกชัน (อาร์เรย์ใน Ruby เราจะกล่าวว่า) การทำงานบางอย่างที่กำหนดไว้ในบล็อก

สิ่งเดียวกันที่จะเกิดขึ้นตามธรรมชาติด้วย :

 



 Elementi.each $ {...}

 
ปิด : proc และแลมบ์ดา

ปิดที่มีแนวคิดคล้ายกับว่าการสั่งซื้อสูงฟังก์ชัน : ความสามารถในการกำหนดอย่างมีนัยสำคัญการทำงานของตัวแปรที่ทำหน้าที่เกี่ยวกับการใช้ชีวิตในบริบทที่แตกต่างจากของฟังก์ชัน (เช่นตัวแปรระดับโลกหรือตัวแปรของฟังก์ชันอื่น ๆ ) เป็นที่

ใน Ruby, ฉันสามารถเขียนปิดการใช้ฟังก์ชันที่ไม่ระบุชื่อที่สามารถกำหนดด้วยคำหลัก Proc.new หรือ lambda

นี่คือตัวอย่าง :






 คูณ def (คูณ)



    



 กลับ lambda {| n | n คูณ *}







 ท้าย









 per3 คูณ = (3)









 ทำให้ per3.call (3) # => 9







 ทำให้ per3.call (per8.call (2)) # => 48



ไม่ตรงกับตัวเองชัดเจนในตัวอย่างนี้ผมกำหนดฟังก์ชัน"คูณ" ฟังก์ชั่นนี้แปลก ๆ คืออะไร? ที่นี่ฉันก็ไม่ได้ใช้ตัวแปรใด ๆ !

อาร์กิวเมนต์ไม่ได้เป็นตัวแปรตัวคูณเป็นเพียงตัวยึดสำหรับค่าคงที่หรือฟังก์ชันอื่น

แต่ในการเขียนโปรแกรมแบบดั้งเดิม, ฉันเขียน :






 คูณ def (a, b)



    



 กลับ b *







 ท้าย









 ทำให้การคูณ (3.3)



ที่สามารถเห็นได้ แต่ผมกำหนดปิดใช้"ดำเนินการ"ที่ผมเรียก per3 ซึ่งกำหนดพฤติกรรมของทั้งหมดคูณ"x3" จากนั้นผมเรียกว่าการดำเนินการนี​​้ 3 จำนวน ฉันยังสามารถเรียกมัน recursively! หรือเรียกว่าแทนค่าคงที่ในการทำงานอื่น

ในการเขียนโปรแกรมแบบดั้งเดิม แต่ผมถูกบังคับให้กำหนดล่วงหน้าจำนวนของตัวแปรที่เกี่ยวข้องในการทำธุรกรรม -- จึง จำกัด การคูณของจำนวนสองจำนวน -- และที่สำคัญที่สุดที่ฉันมีการแทรกแนวคิดของรัฐที่มีการจัดสรรหน่วยความจำสำหรับตัวแปรสองตัวที่ มีค่าที่จะคูณ

ในประเภทเดียวกัน ...
E - Learning
Ruby และ Ruby on Rails (หลักสูตร) Ruby และ Ruby on Rails (หลักสูตร)
สร้างโปรแกรมซอฟต์แวร์และเว็บด้วยทับทิมและ ร. จาก 39 €
ลิงก์ผู้สนับสนุน