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

ค่า ในทางวิทยาการคอมพิวเตอร์ หมายถึงนิพจน์ที่ไม่สามารถประเมินค่าต่อได้อีก (รูปแบบบรรทัดฐาน) สมาชิกของแบบชนิดก็คือค่าของแบบชนิดนั้น ตัวอย่างเช่น นิพจน์ codice_1 ยังไม่เรียกว่าเป็นค่า เพราะยังสามารถลดทอนได้อีกเป็นนิพจน์ codice_2 แต่นิพจน์ codice_2 ก็ไม่สามารถลดทอนได้มากกว่านี้อีกแล้วดังนั้นมันจึงเป็นค่า

"ค่าของตัวแปร" จะถูกกำหนดโดยการจับคู่ที่สอดคล้องกันในสภาพแวดล้อมของแบบชนิด (typing environment) ในภาษาโปรแกรมที่ตัวแปรสามารถกำหนดค่าได้ การแยกออกเป็น ค่าทางขวา (r-value คือเนื้อหา) และค่าทางซ้าย (l-value คือตำแหน่ง) ในการกำหนดค่าของตัวแปรเป็นสิ่งจำเป็น

ในภาษาโปรแกรมเชิงประกาศ (ระดับสูง) ค่าจะต้องมีคุณสมบัติความโปร่งใสเชิงอ้างอิง (referential transparency) หมายความว่า ค่าผลลัพธ์เป็นอิสระจากตำแหน่งของหน่วยความจำที่เก็บบันทึกซึ่งนิพจน์ (หรือนิพจน์ย่อย) จำเป็นต้องใช้คำนวณหาค่า เฉพาะเนื้อหาที่ตำแหน่งนั้น (คือบิตต่าง ๆ อันประกอบด้วย 0 และ 1) และการตีความของมันเท่านั้นที่มีนัยสำคัญ

ภาษาโปรแกรมบางภาษาใช้แนวคิด ค่าทางซ้าย (l-value) และ ค่าทางขวา (r-value) กล่าวคือ ค่าทางซ้ายมีตำแหน่งหน่วยความจำที่สามารถเข้าถึงได้โดยโปรแกรมที่กำลังทำงาน (ผ่านตัวดำเนินการตำแหน่งเช่น "&" ในภาษาซี/ซีพลัสพลัสเป็นต้น) หมายความว่าค่าทางซ้ายจะเป็นตัวแปร หรือตัวอ้างอิงที่ถูกอ้างอิงกลับไปยังตำแหน่งที่เจาะจง ส่วนค่าทางขวาอาจเหมือนค่าทางซ้ายหรือไม่เหมือนก็ได้ (ศัพท์ "ค่าทางขวา" ถูกใช้เพื่อแยกความหมายออกจาก "ค่าทางซ้าย" เท่านั้น) ให้ลองพิจารณานิพจน์ของภาษาซี codice_4 เมื่อทำงาน คอมพิวเตอร์จะสร้างค่าจำนวนเต็ม 13 ขึ้นมา แต่เนื่องจากโปรแกรมยังไม่ได้กำหนดอย่างชัดเจนว่าค่า 13 นี้จะเก็บไว้ที่ใดในคอมพิวเตอร์ ดังนั้นนิพจน์ดังกล่าวจึงเป็นค่าทางขวา ในทางตรงข้าม ถ้าโปรแกรมภาษาซีประกาศตัวแปร x และกำหนดค่า 13 ให้กับ x ดังนั้นนิพจน์ codice_5 ก็จะมีค่าเป็น 13 และเป็นค่าทางซ้าย

ศัพท์ "ค่าทางซ้าย" ในภาษาซี เดิมทีหมายถึงบางสิ่งบางอย่างที่สามารถกำหนดค่าได้ (ด้วยชื่อของมันที่แสดงว่าอยู่ทางซ้ายของตัวดำเนินการกำหนดค่า) แต่ตั้งแต่มีคำสงวน codice_6 (ค่าคงตัว) เพิ่มเข้ามาในภาษา ศัพท์ดังกล่าวกลายเป็น "ค่าทางซ้ายที่ดัดแปรได้" (modifiable l-value)

นิพจน์ค่าทางซ้ายเป็นตัวกำหนด (หรืออ้างถึง) วัตถุ ค่าทางซ้ายประเภทดัดแปรไม่ได้ สามารถระบุตำแหน่งได้แต่เปลี่ยนแปลงค่าไม่ได้ ส่วนค่าทางซ้ายประเภทดัดแปรได้ อนุญาตให้วัตถุที่กำหนดสามารถระบุตำแหน่งและเปลี่ยนแปลงค่าได้ด้วย สำหรับค่าทางขวาสามารถเป็นนิพจน์อะไรก็ได้ รวมทั้งนิพจน์ที่ไม่มีการระบุตำแหน่ง

แนวคิดสัญกรณ์ค่าทางซ้ายและค่าทางขวาเสนอแนะขึ้นครั้งแรกในภาษาซีพีแอล

ค่าที่ใช้ในภาษาแอสเซมบลีสามารถเป็นข้อมูลเสมือนอะไรก็ได้โดยชนิดข้อมูลที่กำหนด ตัวอย่างเช่นสายอักขระ ตัวเลข หรือตัวอักษรตัวเดียว

ตัวประมวลผลส่วนใหญ่มีชุดคำสั่งหนึ่งชุดหรือมากกว่านั้นเพื่อเก็บบันทึก "ค่าใช้ทันที" (immediate value) ค่าใช้ทันทีที่เก็บไว้จะเป็นส่วนหนึ่งของชุดคำสั่งเมื่อเรียกใช้งาน ซึ่งมักจะบรรจุเข้า บวกเพิ่ม หรือลบออกจากเรจิสเตอร์ ชุดคำสั่งส่วนอื่นเป็นรหัสปฏิบัติการและเป้าหมาย อย่างหลังนี้บอกเป็นนัยว่า ค่าที่ไม่ได้ใช้ทันทีอาจยังหลงเหลืออยู่ในเรจิสเตอร์ หรือถูกเก็บอยู่ที่ใดสักแห่งในหน่วยความจำ ซึ่งจำเป็นต้องใช้ชุดคำสั่งที่มีการระบุตำแหน่งทางตรงหรือทางอ้อมไปยังค่านั้น

ตัวประมวลผลบางชนิดรองรับค่าใช้ทันทีที่มีขนาดมากกว่าหนึ่งหน่วย เช่น 8 บิตหรือ 16 บิต โดยใช้รหัสปฏิบัติการและรหัสช่วยจำที่เป็นเอกลักษณ์สำหรับแต่ละชุดคำสั่งที่แตกต่างกัน หากโปรแกรมเมอร์ให้ค่าของข้อมูลที่ไม่เหมาะสม แอสเซมเบลอร์จะแจ้งเตือนข้อความผิดพลาด "เกินพิสัย" (out of range) แอสเซมเบลอร์ส่วนมากอนุญาตให้ค่าใช้ทันทีแสดงออกเป็นข้อมูลแอสกี เลขฐานสิบ ฐานสิบหก ฐานแปด หรือฐานสอง ดังนั้นตัวอักขระ "A" จึงมีความหมายเหมือนกับ "65" หรือ "0x41" เป็นต้น ลำดับไบต์ของสายอักขระอาจต่างกันไปในตัวประมวลผล ขึ้นอยู่กับแอสเซมเบลอร์และสถาปัตยกรรมคอมพิวเตอร์