ค่า (วิทยาการคอมพิวเตอร์)
ค่า ในทางวิทยาการคอมพิวเตอร์ หมายถึงนิพจน์ที่ไม่สามารถประเมินค่าต่อได้อีก (รูปแบบบรรทัดฐาน)[1] สมาชิกของแบบชนิดก็คือค่าของแบบชนิดนั้น[2] ตัวอย่างเช่น นิพจน์ 1 + 2
ยังไม่เรียกว่าเป็นค่า เพราะยังสามารถลดทอนได้อีกเป็นนิพจน์ 3
แต่นิพจน์ 3
ก็ไม่สามารถลดทอนได้มากกว่านี้อีกแล้วดังนั้นมันจึงเป็นค่า
ค่าของตัวแปร จะถูกกำหนดโดยการจับคู่ที่สอดคล้องกันในสภาพแวดล้อมของแบบชนิด (typing environment) ในภาษาโปรแกรมที่ตัวแปรสามารถกำหนดค่าได้ การแยกออกเป็น ค่าทางขวา (r-value คือเนื้อหา) และค่าทางซ้าย (l-value คือตำแหน่ง) ในการกำหนดค่าของตัวแปรเป็นสิ่งจำเป็น[3]
ในภาษาโปรแกรมเชิงประกาศ (ระดับสูง) ค่าจะต้องมีคุณสมบัติความโปร่งใสเชิงอ้างอิง (referential transparency) หมายความว่า ค่าผลลัพธ์เป็นอิสระจากตำแหน่งของหน่วยความจำที่เก็บบันทึกซึ่งนิพจน์ (หรือนิพจน์ย่อย) จำเป็นต้องใช้คำนวณหาค่า เฉพาะเนื้อหาที่ตำแหน่งนั้น (คือบิตต่าง ๆ อันประกอบด้วย 0 และ 1) และการตีความของมันเท่านั้นที่มีนัยสำคัญ
ค่าทางซ้ายและค่าทางขวา
[แก้]ภาษาโปรแกรมบางภาษาใช้แนวคิด ค่าทางซ้าย (l-value) และ ค่าทางขวา (r-value) กล่าวคือ ค่าทางซ้ายมีตำแหน่งหน่วยความจำที่สามารถเข้าถึงได้โดยโปรแกรมที่กำลังทำงาน (ผ่านตัวดำเนินการตำแหน่งเช่น "&" ในภาษาซี/ซีพลัสพลัสเป็นต้น) หมายความว่าค่าทางซ้ายจะเป็นตัวแปร หรือตัวอ้างอิงที่ถูกอ้างอิงกลับไปยังตำแหน่งที่เจาะจง ส่วนค่าทางขวาอาจเหมือนค่าทางซ้ายหรือไม่เหมือนก็ได้ (ศัพท์ ค่าทางขวา ถูกใช้เพื่อแยกความหมายออกจาก ค่าทางซ้าย เท่านั้น) ให้ลองพิจารณานิพจน์ของภาษาซี 4 + 9
เมื่อทำงาน คอมพิวเตอร์จะสร้างค่าจำนวนเต็ม 13 ขึ้นมา แต่เนื่องจากโปรแกรมยังไม่ได้กำหนดอย่างชัดเจนว่าค่า 13 นี้จะเก็บไว้ที่ใดในคอมพิวเตอร์ ดังนั้นนิพจน์ดังกล่าวจึงเป็นค่าทางขวา ในทางตรงข้าม ถ้าโปรแกรมภาษาซีประกาศตัวแปร x และกำหนดค่า 13 ให้กับ x ดังนั้นนิพจน์ x
ก็จะมีค่าเป็น 13 และเป็นค่าทางซ้าย
ศัพท์ ค่าทางซ้าย ในภาษาซี เดิมทีหมายถึงบางสิ่งบางอย่างที่สามารถกำหนดค่าได้ (ด้วยชื่อของมันที่แสดงว่าอยู่ทางซ้ายของตัวดำเนินการกำหนดค่า) แต่ตั้งแต่มีคำสงวน const
(ค่าคงตัว) เพิ่มเข้ามาในภาษา ศัพท์ดังกล่าวกลายเป็น ค่าทางซ้ายที่ดัดแปรได้ (modifiable l-value)
นิพจน์ค่าทางซ้ายเป็นตัวกำหนด (หรืออ้างถึง) วัตถุ ค่าทางซ้ายประเภทดัดแปรไม่ได้ สามารถระบุตำแหน่งได้แต่เปลี่ยนแปลงค่าไม่ได้ ส่วนค่าทางซ้ายประเภทดัดแปรได้ อนุญาตให้วัตถุที่กำหนดสามารถระบุตำแหน่งและเปลี่ยนแปลงค่าได้ด้วย สำหรับค่าทางขวาสามารถเป็นนิพจน์อะไรก็ได้ รวมทั้งนิพจน์ที่ไม่มีการระบุตำแหน่ง
แนวคิดสัญกรณ์ค่าทางซ้ายและค่าทางขวาเสนอแนะขึ้นครั้งแรกในภาษาซีพีแอล
ในภาษาแอสเซมบลี
[แก้]ค่าที่ใช้ในภาษาแอสเซมบลีสามารถเป็นข้อมูลเสมือนอะไรก็ได้โดยชนิดข้อมูลที่กำหนด ตัวอย่างเช่นสายอักขระ ตัวเลข หรือตัวอักษรตัวเดียว
ตัวประมวลผลส่วนใหญ่มีชุดคำสั่งหนึ่งชุดหรือมากกว่านั้นเพื่อเก็บบันทึก "ค่าใช้ทันที" (immediate value) ค่าใช้ทันทีที่เก็บไว้จะเป็นส่วนหนึ่งของชุดคำสั่งเมื่อเรียกใช้งาน ซึ่งมักจะบรรจุเข้า บวกเพิ่ม หรือลบออกจากเรจิสเตอร์ ชุดคำสั่งส่วนอื่นเป็นรหัสปฏิบัติการและเป้าหมาย อย่างหลังนี้บอกเป็นนัยว่า ค่าที่ไม่ได้ใช้ทันทีอาจยังหลงเหลืออยู่ในเรจิสเตอร์ หรือถูกเก็บอยู่ที่ใดสักแห่งในหน่วยความจำ ซึ่งจำเป็นต้องใช้ชุดคำสั่งที่มีการระบุตำแหน่งทางตรงหรือทางอ้อมไปยังค่านั้น
ตัวประมวลผลบางชนิดรองรับค่าใช้ทันทีที่มีขนาดมากกว่าหนึ่งหน่วย เช่น 8 บิตหรือ 16 บิต โดยใช้รหัสปฏิบัติการและรหัสช่วยจำที่เป็นเอกลักษณ์สำหรับแต่ละชุดคำสั่งที่แตกต่างกัน หากโปรแกรมเมอร์ให้ค่าของข้อมูลที่ไม่เหมาะสม แอสเซมเบลอร์จะแจ้งเตือนข้อความผิดพลาด "เกินพิสัย" (out of range) แอสเซมเบลอร์ส่วนมากอนุญาตให้ค่าใช้ทันทีแสดงออกเป็นข้อมูลแอสกี เลขฐานสิบ ฐานสิบหก ฐานแปด หรือฐานสอง ดังนั้นตัวอักขระ "A" จึงมีความหมายเหมือนกับ "65" หรือ "0x41" เป็นต้น ลำดับไบต์ของสายอักขระอาจต่างกันไปในตัวประมวลผล ขึ้นอยู่กับแอสเซมเบลอร์และสถาปัตยกรรมคอมพิวเตอร์
หมายเหตุ
[แก้]- ↑ Mitchell 1996, p. 92.
- ↑ Mitchell 1996, p. 9.
- ↑ Mitchell 1996, pp. 389–390.
อ้างอิง
[แก้]- Mitchell, John C. (1996). Foundations for Programming Languages. The MIT Press. ISBN 0-262-13321-0.
- Strachey, Christopher (2000). "Fundamental Concepts in Programming Languages". Higher-Order and Symbolic Computation. 13: 11–49. doi:10.1023/A:1010000313106. S2CID 14124601.