ฟังก์ชั่น

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

ส่วนนี้ทำหน้าที่เป็นการแนะนำฟังก์ชันต่างๆ ใน ​​Scheme และวางรากฐานสำหรับการทำความเข้าใจประเภท คำจำกัดความ และการใช้งาน ส่วนต่อๆ ไปจะเจาะลึกลงไปถึงประเภทฟังก์ชันเฉพาะและความสามารถเฉพาะตัว

ไวยากรณ์และนิพจน์ขั้นต่ำ

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

(+ 1 2)         ; Adds 1 and 2, resulting in 3
(if #t 1 0)     ; Evaluates to 1 because the condition is true
(list 1 2 3)    ; Creates a list: (1 2 3)

เนื่องจากทุกสิ่งคือการแสดงออก โฟลว์การควบคุมจึงเข้ากับสไตล์เดียวกันกับการเรียกใช้ฟังก์ชันได้อย่างเป็นธรรมชาติ

ทำไมฟังก์ชั่นถึงมีความสำคัญ

ฟังก์ชันมีบทบาทสำคัญใน Scheme ด้วยเหตุผลหลายประการ:

  • การนำโค้ดกลับมาใช้ใหม่ได้: หลีกเลี่ยงการทำซ้ำโดยห่อหุ้มตรรกะให้เป็นส่วนประกอบที่นำมาใช้ซ้ำได้
  • ความเป็นโมดูล: แบ่งงานที่ซับซ้อนออกเป็นส่วนย่อยๆ ที่สามารถจัดการได้
  • พฤติกรรมแบบไดนามิก: ยอมรับพารามิเตอร์เพื่อจัดการอินพุตต่างๆ หรือปรับให้เข้ากับสถานการณ์ที่แตกต่างกัน
  • นามธรรมที่สูงขึ้น: ลดความซับซ้อนของตรรกะโดยเน้นไปที่ฟังก์ชัน “อะไร” ทำหน้าที่มากกว่า “อย่างไร” ของฟังก์ชัน

ภาพรวมของประเภทฟังก์ชัน

Scheme มีโครงสร้างฟังก์ชันที่หลากหลาย ซึ่งแต่ละโครงสร้างเหมาะกับกรณีการใช้งานเฉพาะ:

  1. ฟังก์ชันที่มีชื่อ เหล่านี้เป็นฟังก์ชันมาตรฐานที่กำหนดด้วย define พวกมันเป็นแกนหลักของสคริปต์ส่วนใหญ่

    (define (square x)
      (* x x))
  2. ฟังก์ชันที่ไม่ระบุชื่อ มีชื่อเรียกอีกอย่างว่า ฟังก์ชัน lambda ซึ่งเป็นฟังก์ชันที่ไม่มีชื่อซึ่งกำหนดไว้ในบรรทัดสำหรับการใช้งานครั้งเดียว

    (lambda (x) (* x x))
  3. ฟังก์ชันลำดับที่สูงกว่า ฟังก์ชันที่รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือส่งคืนฟังก์ชันเป็นผลลัพธ์ ช่วยให้สามารถใช้งานนามธรรมอันทรงพลัง เช่น การทำแผนที่ การกรอง และการลดขนาด

    (map (lambda (x) (* x x)) '(1 2 3 4))  ; Returns (1 4 9 16)

ไวยากรณ์ทั่วไปสำหรับฟังก์ชัน

ฟังก์ชันใน Scheme มีไวยากรณ์ที่เรียบง่ายและสอดคล้องกัน:

(define (function-name parameter1 parameter2 ...)
  body-expression)
  • function-name: ชื่อของฟังก์ชัน
  • parameter1, parameter2, ...: อาร์กิวเมนต์ที่ฟังก์ชันใช้
  • body-expression: ตรรกะที่ดำเนินการเมื่อมีการเรียกใช้ฟังก์ชัน

ตัวอย่าง:

(define (add x y)
  (+ x y))

(add 3 5)  ; Returns 8

ผลข้างเคียงและสถานะระดับโลก

ใน Lumi กระบวนการที่มีประโยชน์มากมายมีผลข้างเคียง: ปรับเปลี่ยนรูปภาพ เปลี่ยนรูปวาด เขียนไฟล์ หรือแสดงผลเอาต์พุต

  • แยกผลข้างเคียงออกเป็นขั้นตอนเล็กๆ ที่มีชื่อชัดเจน
  • หลีกเลี่ยงการเปลี่ยนบริบททั่วโลก เว้นแต่ในกรณีที่จำเป็น
  • เมื่อคุณเปลี่ยนบริบท (สี แปรง ฯลฯ) ให้ล้อมงานด้วย lumi-context-push และ lumi-context-pop เพื่อให้สถานะของผู้ใช้กลับคืนมา