ค่า (วิทยาการคอมพิวเตอร์)

ค่า ในทางวิทยาการคอมพิวเตอร์ หมายถึงนิพจน์ที่ไม่สามารถประเมินค่าต่อได้อีก (รูปแบบบรรทัดฐาน)[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" เป็นต้น ลำดับไบต์ของสายอักขระอาจต่างกันไปในตัวประมวลผล ขึ้นอยู่กับแอสเซมเบลอร์และสถาปัตยกรรมคอมพิวเตอร์

หมายเหตุ แก้

  1. Mitchell 1996, p. 92.
  2. Mitchell 1996, p. 9.
  3. 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.

แหล่งข้อมูลอื่น แก้