เริ่มต้นด้วยตัวดำเนินการที่ง่ายที่สุด นั่นคือเครื่องหมายบวก (+) เครื่องหมายบวก (+) คือตัวดำเนินการไบนารี่ กล่าวคือ เครื่องหมายบวกเชื่อมต่อกับตัวเลขสองตัวเท่านั้น
ดังนั้น "1 บวก 2 บวก 3" จึงแสดงในคอมพิวเตอร์เป็น:
(1 + 2) + 3 // อ
1 + (2 + 3) // b แม้ว่าปกติเราจะเขียนมันเป็น 1 + 2 + 3 แต่ก็ไม่ได้หมายความว่าคณิตศาสตร์จะเท่ากับ 1+2+3
1+2+3 ในทางคณิตศาสตร์แทน a หรือ b ล่ะ?
หากการประเมินของคอมพิวเตอร์เป็นแบบเชื่อมโยง นิพจน์นี้จะเทียบเท่ากับประเภทแรก a หากเป็นแบบเชื่อมโยงที่ถูกต้อง นิพจน์นี้จะเทียบเท่ากับประเภทที่สอง b
ความเข้าใจง่ายๆ ของ 1 + 2 + 3 คือ "บวก 1, 2 และ 3 เข้าด้วยกัน" จริงๆ แล้วในทางคณิตศาสตร์ที่เราเผชิญอยู่คือการบวกเลขสามตัว แต่ในภาษาโปรแกรมมิใช่เพียงเท่านั้น
ดังที่ได้กล่าวไว้ก่อนหน้านี้ เครื่องหมาย + ไม่สามารถดำเนินการกับตัวเลขสามตัวขึ้นไปได้ และสามารถเข้าร่วมในการดำเนินการเพิ่มเติมด้วยตัวเลขสองตัวเท่านั้น
อย่างไรก็ตาม เครื่องหมายบวกและเครื่องหมายลบคือตัวดำเนินการเอกภาค แม้ว่าพวกมันจะใช้สัญลักษณ์เดียวกันกับตัวดำเนินการไบนารี่ บวกและลบ พวกมันต่างกัน ดังนั้น อย่าคิดว่า +4 เทียบเท่ากับ 0+4 พวกมันไม่เท่ากัน
+4 เป็นจำนวนเต็ม แต่ 0+4 เป็นนิพจน์การบวก ซึ่งประเมินเป็น +4 พอดี
ใน Java เราสามารถเขียน short a = +4 ได้ แต่เมื่อเราเขียน short a = 0 + 4 คำเตือนจะถูกสร้างขึ้น
มีอีกตัวอย่างหนึ่งเกี่ยวกับเรื่องสั้นเช่นกัน
สั้นข = 1;
สั้น b = b + 4; // คำเตือน
short b += 4; // ไม่มีการเตือน แล้ว 1 + 2 + 3 ทำงานอย่างไร? ในภาษาโปรแกรมของสถาปัตยกรรม von Neumann มีผลข้างเคียง - ฉันคุ้นเคยกับการเรียกสิ่งเหล่านั้นว่า "เมื่อกระบวนการคำนวณของคอมพิวเตอร์แตกต่างจากกระบวนการคิดของสมองของโปรแกรมเมอร์ จะเรียกว่าผลข้างเคียง" (ถึงแม้ ไม่ได้เขียนแบบนี้ในหนังสือ) ใช่ แต่ฉันคิดอย่างนั้นมาตลอด) เดิมทีคุณคิดว่ามันจะเป็นเช่นนี้ แต่ปรากฎว่าคอมพิวเตอร์ไม่ทำเช่นนี้ฉันเรียกว่าผลข้างเคียง
หากคุณได้อ่าน "คำชี้แจงและสำนวน" ก่อนหน้านี้แล้ว คุณสามารถเข้าใจได้ดังนี้:
1 + 2 คือนิพจน์ที่มีค่าส่งคืนเป็น 3 ค่าที่ส่งกลับของนิพจน์นี้จะถูกเพิ่มไปยังนิพจน์อื่น 3 + 3 และผลลัพธ์สุดท้ายคือ 6
เราเขียนโค้ดนี้ใหม่โดยใช้คำสั่ง:
// คำนวณ 1 + 2 + 3
วาร์ ก = 1 + 2;
var b = a + 3;ถ้าเราประเมินนิพจน์นี้ด้วยเสียงกระเพื่อม ก็ไม่มีผลข้างเคียง
(+ (+ 1 2) 3) ถ้ายังไม่เข้าใจหรือตัวอย่างนี้พิเศษเกินไปก็ให้เปลี่ยนเป็นตัวอย่างอื่นดีกว่า
5 > 4 > 3 ในทางคณิตศาสตร์ สมการนี้ประเมินว่าเป็นจริง เมื่อเราเขียนโค้ดนี้ในภาษา C มันจะคืนค่าเท็จแน่นอน
เหตุผลเหมือนกับข้างบน เครื่องหมายที่มากกว่า (>) คือการดำเนินการแบบไบนารี่ ไม่สามารถเปรียบเทียบตัวเลขสามตัวได้โดยตรง ผลลัพธ์ที่ส่งคืนด้วย 5 > 4 จะเป็นจริง เมื่อเปรียบเทียบกับ 3 จริงจะถูกแปลงเป็น 1 ซึ่งก็คือ 1 > 3 ผลลัพธ์สุดท้ายจึงเป็นเท็จตามธรรมชาติ
กล่าวโดยสรุป เราจะกลับไปสู่มุมมองในบทความ "งบและนิพจน์": ทุกนิพจน์ในภาษาการเขียนโปรแกรมมีค่า
แม้ว่าตัวดำเนินการในภาษาการเขียนโปรแกรมจะเหมือนกับตัวดำเนินการในภาษาคณิตศาสตร์ แต่ก็ไม่เท่ากัน เมื่อคุณเขียนโปรแกรม ให้เขียนให้คนอื่นได้อ่าน เมื่อคุณดีบั๊กโปรแกรม คุณต้องเรียนรู้ที่จะคิดเกี่ยวกับความหมายของโค้ดด้วยวิธีทางคอมพิวเตอร์
ฉันคุ้นเคยกับการทำความเข้าใจตัวดำเนินการว่าเป็นฟังก์ชัน ตัวอย่างเช่น 2 + 5 จริงๆ แล้วคือการเพิ่ม (2, 5) หรือ 2.เพิ่ม (5) ฉันจะบอกเธอแบบลับๆ หรือเปล่าว่า “จริงๆ แล้วหลายภาษาก็ทำแบบนี้”