วันนี้เราจะพูดถึงการเขียนโปรแกรมเชิงฟังก์ชัน โดยเฉพาะอย่างยิ่ง เราจะดูความแตกต่างระหว่างการเขียนโปรแกรมเชิงประกาศและการเขียนโปรแกรมที่จำเป็น
อันดับแรก มาดูข้อกำหนดกันอย่างรวดเร็ว จากนั้นเราจะเปรียบเทียบรูปแบบการเขียนโปรแกรมเหล่านี้และดูว่ามีลักษณะอย่างไรใน Java และภาษาสนับสนุนการอยู่ร่วมกันอย่างมีความสุขหรือไม่
การเขียนโปรแกรมเชิงฟังก์ชันเป็นกระบวนทัศน์ที่เข้าใจว่าฟังก์ชันเป็นฟังก์ชันทางคณิตศาสตร์ ไม่ใช่รูทีนย่อยเหมือนในการเขียนโปรแกรมเชิงขั้นตอน นั่นคือในกระบวนทัศน์ทั้งสองนี้ตีความคำว่า "ฟังก์ชัน" ต่างกัน จำสิ่งนี้ไว้และอย่าสับสน Java ไม่ทำให้คุณสับสน เนื่องจากโปรแกรมย่อยเรียกว่า "เมธอด" ในขณะที่ฟังก์ชันหมายถึงฟังก์ชันทางคณิตศาสตร์ (เช่น ฟังก์ชันแลมบ์ดาหรือการอ้างอิงเมธอด)
ในทางปฏิบัติ ในการเขียนโปรแกรมเชิงขั้นตอน ฟังก์ชันไม่ได้ขึ้นอยู่กับตัวแปรอินพุตเท่านั้น แต่ยังขึ้นอยู่กับปัจจัยภายนอกด้วย (เช่น ตัวแปรอื่นๆ นอกฟังก์ชันหรือสถานะของระบบ) นั่นหมายความว่าการเรียกใช้ฟังก์ชันเดียวกันโดยมีอาร์กิวเมนต์เดียวกันแต่ในบริบทที่แตกต่างกันอาจให้ผลลัพธ์ที่แตกต่างกัน ในการเขียนโปรแกรมเชิงฟังก์ชัน เมื่อฟังก์ชันถูกเรียกใช้ด้วยอาร์กิวเมนต์เดียวกัน ฟังก์ชันจะให้ผลลัพธ์ที่เหมือนกันเสมอ เนื่องจากฟังก์ชันขึ้นอยู่กับข้อมูลที่ป้อนเข้าเท่านั้น
ข้อดีของการเขียนโปรแกรมเชิงฟังก์ชัน
- ปรับปรุงความน่าเชื่อถือของรหัส
- การทดสอบหน่วยที่สะดวก
- โอกาสในการปรับแต่งโค้ดระหว่างการคอมไพล์
- โอกาสสำหรับการทำงานพร้อมกัน
ข้อเสียของการเขียนโปรแกรมเชิงฟังก์ชัน
ข้อเสียของการเขียนโปรแกรมเชิงฟังก์ชันเกิดจากคุณสมบัติเดียวกันนี้ทั้งหมด:
-
ไม่มีคำสั่งมอบหมาย แต่ค่าใหม่จะถูกเก็บไว้ในตัวแปรใหม่ ซึ่งนำไปสู่ความจำเป็นในการจัดสรรอย่างต่อเนื่องและปล่อยหน่วยความจำโดยอัตโนมัติ ด้วยเหตุนี้ การรวบรวมขยะที่มีประสิทธิภาพสูงจึงเป็นส่วนสำคัญของระบบใดๆ ที่รันโปรแกรมการทำงาน
-
การประเมินที่ไม่เข้มงวดหมายถึงลำดับของการเรียกใช้ฟังก์ชันไม่สามารถคาดเดาได้ ซึ่งสร้างปัญหา I/O เมื่อลำดับของการดำเนินการมีความสำคัญ
สรุปการตรวจสอบการเขียนโปรแกรมการทำงานอย่างรวดเร็วของเรา ทีนี้มาดูรูปแบบการเขียนโปรแกรมกัน
การเขียนโปรแกรมที่จำเป็นเป็นกระบวนทัศน์การเขียนโปรแกรมที่มีลักษณะดังต่อไปนี้:
-
ซอร์สโค้ดของโปรแกรมประกอบด้วยคำสั่ง (คำสั่ง)
-
ต้องปฏิบัติตามคำแนะนำตามลำดับ
-
ข้อมูลที่สร้างขึ้นโดยการดำเนินการตามคำสั่งก่อนหน้านี้สามารถอ่านได้จากหน่วยความจำโดยคำสั่งที่ตามมา
-
ข้อมูลที่ได้รับจากการดำเนินการตามคำสั่งสามารถเขียนลงในหน่วยความจำได้
นี่คือคุณสมบัติหลักของภาษาที่จำเป็น:
- การใช้ตัวแปรบูลีน
- การใช้ตัวดำเนินการมอบหมาย
- การใช้นิพจน์ผสม
- การใช้รูทีนย่อย
โปรแกรมที่จำเป็นเป็นเหมือนคำสั่งที่แสดงอารมณ์ที่จำเป็นในภาษาธรรมชาติ กล่าวอีกนัยหนึ่ง โปรแกรมที่จำเป็นคือลำดับของคำสั่ง
ภาษาโปรแกรมที่จำเป็น ได้แก่ C และ C++
การเขียนโปรแกรมเชิงประกาศเป็นกระบวนทัศน์การเขียนโปรแกรมที่ระบุวิธีแก้ปัญหา นั่นคือมีการอธิบายผลลัพธ์สุดท้าย ไม่ใช่วิธีการบรรลุผล HTML เป็นตัวอย่างของภาษาประกาศ เมื่อเขียนแท็กในภาษานี้ เราไม่คิดว่าองค์ประกอบต่างๆ จะถูกวาดบนหน้าเว็บอย่างไร เราแค่อธิบายว่าหน้าควรมีลักษณะอย่างไร
ภาษาโปรแกรมเชิงประกาศอีกภาษาหนึ่งคือ SQL
ลองเปรียบเทียบรูปแบบการเขียนโปรแกรมทั้งสองโดยพิจารณาจากตัวอย่างในชีวิตจริง: เราจะอธิบายให้คน ๆ หนึ่งฟังถึงวิธีการไปยังสถานที่ใดสถานที่หนึ่งได้อย่างไร
ลองนึกภาพสถานการณ์นี้: ชายคนหนึ่งมาหาเราที่ถนนและถามว่า "ฉันจะไปพิพิธภัณฑ์ได้อย่างไร"
ด้วยแนวทางที่จำเป็น เราจะให้อัลกอริทึมวิธีการเดินเท้าแก่เขา:
- เลี้ยวตรงนี้
- เดิน 2 ช่วงตึกเป็นเส้นตรง
- เลี้ยวขวา
- …
ด้วยวิธีการที่เปิดเผย เราจะเพียงแค่ให้ที่อยู่ แล้วคนๆ นั้นจะไปยังสถานที่ที่เหมาะสมด้วยตัวเขาเอง
ปัจจุบัน Javaเป็น ภาษาโปรแกรม แบบหลายกระบวนทัศน์ หลายกระบวนทัศน์หมายความว่าภาษาสนับสนุนหลายกระบวนทัศน์
ในช่วงวิวัฒนาการอันยาวนาน ภาษาได้ขยายโมเดลเชิงวัตถุเพื่อให้ผู้ใช้มีเครื่องมือที่แตกต่างกันและสามารถเลือกเครื่องมือที่ดีที่สุดสำหรับงานเฉพาะของพวกเขา
ด้วยเหตุนี้ ปัจจุบัน Java จึงสนับสนุนทั้งแนวทางที่จำเป็น (เช่น การเขียนโค้ดสำหรับการเรียกใช้เมธอด) และแนวทางการประกาศ (เช่น คำอธิบายประกอบที่มีในขณะรันไทม์)
สรุป:
-
มีกระบวนทัศน์ในการเขียนโปรแกรมที่หลากหลาย
-
มีวิธีการที่เปิดเผยและจำเป็น
-
คุณควรเลือกแบบที่เหมาะกับงานที่ทำอยู่
-
Java เป็นภาษาหลายกระบวนทัศน์ที่รองรับทั้งสองวิธี
GO TO FULL VERSION