กำหนด
คำสั่ง define ใน Scheme เป็นโครงสร้างอเนกประสงค์ที่ใช้ในการสร้างการเชื่อมโยงส่วนกลางหรือท้องถิ่น โดยทั่วไปจะใช้เพื่อกำหนดตัวแปรและฟังก์ชัน ทำให้สามารถนำมาใช้ซ้ำและเข้าถึงได้ทั่วทั้งสคริปต์หรือภายในขอบเขตเฉพาะ การทำความเข้าใจ define เป็นสิ่งสำคัญสำหรับการเขียนโปรแกรม Scheme แบบโมดูลาร์ ใช้ซ้ำได้ และอ่านได้
วัตถุประสงค์ของ define
โครงสร้าง define มีจุดประสงค์หลายประการ:
- การกำหนดตัวแปร: กำหนดค่าให้กับชื่อตัวแปร ทำให้สามารถใช้ได้ในภายหลัง
- การกำหนดฟังก์ชัน: สร้างขั้นตอนที่นำมาใช้ซ้ำได้ซึ่งห่อหุ้มตรรกะเฉพาะ
- คำจำกัดความในเครื่อง: เมื่อใช้ภายในฟังก์ชัน
defineจะสร้างการเชื่อมโยงในเครื่องที่ไม่ส่งผลต่อเนมสเปซส่วนกลาง
การกำหนดตัวแปรด้วย define
การใช้งานพื้นฐานของ define คือการสร้างตัวแปรที่เก็บค่าคงที่หรือค่าที่คำนวณได้
ไวยากรณ์
(define variable-name value)ตัวอย่าง: การกำหนดค่าคงที่
(define pi 3.14159)
(* pi 2) ;; Computes 2πผลลัพธ์: 6.28318
การกำหนดฟังก์ชันด้วย define
คุณสามารถใช้ define เพื่อสร้างขั้นตอนที่นำมาใช้ซ้ำได้
ไวยากรณ์
(define (function-name parameter1 parameter2 ...)
body-expression)ตัวอย่าง: การกำหนดฟังก์ชันอย่างง่าย
(define (square x)
(* x x))
(square 4) ;; Computes 4²ผลลัพธ์: 16
คำจำกัดความท้องถิ่นด้วย define
เมื่อใช้ภายในฟังก์ชัน define จะสร้างการเชื่อมโยงเฉพาะที่สามารถเข้าถึงได้ภายในฟังก์ชันปิดล้อมเท่านั้น วิธีนี้จะหลีกเลี่ยงไม่ให้เนมสเปซส่วนกลางเสียหายและช่วยจัดระเบียบโค้ดของคุณ
ตัวอย่าง: ฟังก์ชั่น Local Helper
(define (process-values a b c)
(define (square x) (* x x)) ;; Local helper function
(define (cube x) (* x x x)) ;; Local helper function
(+ (square a) (cube b) (square c)))
(process-values 2 3 4)ผลลัพธ์: 41 (คำนวณ (2^2 + 3^3 + 4^2))
คุณสมบัติหลักของ define
ขอบเขตระดับโลกหรือระดับท้องถิ่น:
- เมื่อใช้ที่ระดับบนสุด
defineจะสร้างตัวแปรหรือฟังก์ชันส่วนกลาง - เมื่อใช้ภายในฟังก์ชันอื่น
defineจะสร้างการเชื่อมโยงในเครื่อง
- เมื่อใช้ที่ระดับบนสุด
การนำกลับมาใช้ใหม่:
- ฟังก์ชันที่กำหนดด้วย
defineสามารถนำมาใช้ซ้ำได้หลายครั้งในบริบทที่ต่างกัน
- ฟังก์ชันที่กำหนดด้วย
ปรับปรุงความสามารถในการอ่าน:
- การแบ่งลอจิกออกเป็นฟังก์ชันเล็กๆ ที่มีชื่อดี ช่วยเพิ่มความชัดเจนและความสามารถในการบำรุงรักษาโค้ดของคุณ
ความแตกต่างระหว่าง define และ let
| มุมมอง | define | let |
|---|---|---|
| วัตถุประสงค์ | สร้างการเชื่อมโยงส่วนกลางหรือท้องถิ่นสำหรับตัวแปรหรือฟังก์ชัน | สร้างการเชื่อมโยงชั่วคราวในขอบเขตที่แปลเป็นภาษาท้องถิ่น |
| ขอบเขต | ทั่วโลกเมื่ออยู่ที่ระดับบนสุด ท้องถิ่นเมื่ออยู่ในฟังก์ชันอื่น | อยู่ในบล็อก let เสมอ |
| การนำกลับมาใช้ใหม่ | ฟังก์ชันและตัวแปรสามารถนำมาใช้ซ้ำได้หลายแห่ง | ตัวแปรถูกผูกไว้ชั่วคราวสำหรับบล็อกเดียว |
| ไวยากรณ์ | กำหนดตัวแปรหรือฟังก์ชันอย่างชัดเจน | รวมการเชื่อมโยงตัวแปรเข้ากับการประเมินนิพจน์ |