วันศุกร์ที่ 6 กรกฎาคม พ.ศ. 2550

Homework1(ตัวดำเนินการ)

ตัวดำเนินการ (Operator)
ตัวดำเนินการ (Operator) ในการเขียนโปรแกรมภาษาจาวาประกอบด้วย
- ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator)

- ตัวดำเนินการกำหนดค่า (Assignment Operator)

- ตัวดำเนินการเปรียบเทียบ (Equality and Relational Operator)

- ตัวดำเนินการทางตรรกะ (Logical Operator)

1. ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator) เป็นตัวดำเนินการที่จำลองมาจากสมการทางคณิตศาสตร์ โดยในภาษาจาวาจะใช้เครื่องหมายต่างๆ แทนตัวดำเนินการทางคณิตศาสตร์ต่างๆ ดังนี้

ลำดับการทำงานของตัวดำเนินการทางคณิตศาสตร์

เมื่อมีตัวดำเนินการหลายตัวอยู่ในสมการเดียวกัน เช่น int myNumber = 2 + 2 * 5 / 3;

ภาษาจาวามีกฏในการเรียงลำดับ ดังนี้

1. คำนวนสมการที่อยู่ภายในวงเล็บก่อนเป็นอันดับแรก โดยเริ่มจากวงเล็บในสุด

2. ถ้าสมการที่เหลือไม่มีวงเล็บแล้ว จะเรียงลำดับดังนี้

2.1 คูณ, หาร และ mod จะถูกคำนวนก่อน โดยมีความสำคัญอยู่ในระดับเดียวกัน ถ้ามีหลายตัว จะเริ่มคำนวนจากซ้ายไปขวา

2.2 บวก และ ลบ จะถูกคำนวนเป็นลำดับถัดมา โดยมีความสำคัญอยู่ในระดับเดียวกัน ถ้ามีหลายตัว จะเริ่มคำนวนจากซ้ายไปขวา

Ex. 1 y = 2 * 5 * 6 + 3 * 4 + 7

ลำดับการทำงานคือ

1. 2 คูณ 5 ( y = 2 * 5 * 6 + 3 * 4 + 7 )

2. 10 คูณ 6 ( y = 10 * 6 + 3 * 4 + 7 )

3. 3 คูณ 4 ( y = 60 + 3 * 4 + 7 )

4. 60 บวก 12 ( y = 60 + 12 + 7 )

5. y = 72 + 7สุดท้าย ผลลัพธ์เท่ากับ 79

2.ตัวดำเนินการกำหนดค่า (Assignment Operator) คือตัวดำเนินการที่ใช้สำหรับกำหนดค่าให้กับตัวแปร ทิศทางการทำงานจะเป็นจากขวาไปซ้าย คือกำหนดค่าทางขวาให้กับตัวแปรทางซ้าย สัญลักษณ์ที่ใช้คือ เครื่องหมายเท่ากับ ( = ) เช่น int number1 = 5; // กำหนดให้ตัวแปร number1 มีค่าเป็น 5เครื่องหมายเท่ากับ สามารถใช้กำหนดค่าได้โดยสมบูรณ์อยู่แล้ว แต่ในความเป็นจริง ภาษาจาวามีตัวแปรที่ใช้สนธิกันระหว่างตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการกำหนดค่าในครั้งเดียว เพื่อความสะดวกในการเขียนโปรแกรม เช่นy = y + 10สามารถเขียนแทนได้ด้วยy += 10โดยตัวดำเนินการที่มีลักษณะสนธิดังกล่าวมีดังนี้



นอกจากตัวดำเนินการแบบสนธิดังกล่าวแล้ว ยังมีตัวดำเนินการอีกชนิดหนึ่งที่มีเพื่อความสะดวกในการเขียนโปรแกรม ได้แก่ ตัวดำเนินการที่ใช้เพิ่มค่าหรือลดค่าของตัวแปรทีละ 1 ตัวดำเนินการแบบนี้มักใช้ในการทำงานแบบวนซ้ำ ซึ่งจะกล่าวถึงในตอนต่อไป ตอนนี้มาดูวิธีเขียนและความแตกต่าง ธรรมดาเวลาเราจะเพิ่มค่าให้กับตัวแปรทีละ 1 เราอาจเขียนดังนี้
counter = counter + 1 // variable = variable + 1
แต่เราสามารถเขียนแบบย่อที่สามารถลดจำนวนการเขียนโค้ดลง และมีประสิทธิภาพมากขึ้นได้ ดังนี้ ++counter หรือ counter++จะเป็นการเพิ่มค่าให้กับตัวแปร counter อีก 1 เหมือนกัน แต่ความแตกต่างกัน อยู่ตรงที่ตำแหน่งของเครื่องหมายบวกสองอันที่อยู่ด้านหน้าหรือหลังตัวแปรหากอยู่ด้านหน้าตัวแปร (++counter) จะเพิ่มค่าตัวแปร counter ขึ้น 1 แล้วจึงนำค่าในตัวแปร counter ไปใช้หากอยู่ด้านหลังตัวแปร (counter++) จะนำค่าเก่าของตัวแปร counter ไปใช้ แล้วจึงเพิ่มค่าให้ตัวแปร counter อีก 1

ตัวอย่าง

===========================
// IncrementOperator.java

public class IncrementOperator { public static void main(String[] args) {
int prefix = 0;
int postfix = 0;
System.out.println("On the fly Prefix = "+ ++prefix);
System.out.println("after addition Prefix = "+ prefix);
System.out.println("On the fly Postfix = "+ postfix++);
System.out.println("after addition Postfix = "+ postfix); }}===========================
โปรแกรมจะแสดงผลออกมาดังนี้
3. ตัวดำเนินการเปรียบเทียบ (Equality and Relational Operator) ใช้สำหรับเปรียบเทียบค่า 2 ค่า และจะ return ค่าออกมาเป็น boolean (true/false) ถ้าหากนิพจน์เป็นจริง ก็จะให้ค่า true ถ้านิพจน์เป็นเท็จ ก็จะให้ค่า false ข้อควรจำ

- เครื่องหมายที่มี 2 ตัว จะต้องเขียนติดกันเสมอ

- เครื่องหมาย >= (มากกว่าหรือเท่ากับ) และ <= (น้อยกว่าหรือเท่ากับ) จะต้องเขียนเครื่องหมายเท่ากับไว้ด้านขวาเสมอ

4. ตัวดำเนินการทางตรรกะ (Logical Operator) เมื่อต้องการตรวจสอบตัวดำเนินการเชิงเปรียบเทียบหลายๆ อัน จะใช้ตัวดำเนินการทางตรรกะในการตรวจสอบ




จะเห็นว่ามี AND สองแบบคือ &&amp; กับ & และมี OR อีก 2 แบบ คือ กับ สาเหตุแบบนี้เนื่องจาก conditional AND (&&) และ conditional OR ( ) จะหยุดทำการตรวจสอบทันทีเมื่อรู้แน่ชัดแล้วว่าคำตอบของการตรวจสอบนั้นจะตอบว่า true หรือ false เช่น( gender == "female" ) && ( age >= 18 )
หาก gender ไม่ได้มีค่าเป็น "female" โปรแกรมก็จะหยุดการตรวจสอบทันที เพราะรู้แล้วว่าจะคำตอบของการตรวจสอบเป็น false การที่โปรแกรมมีหลักการทำงานเช่นนี้ เค้าเรียกว่า "Short-Circuit Evaluation" มีข้อดีคือ สามารถช่วยป้องกันการเกิด error ได้ระดับหนึ่ง เช่น ถ้าต้องการตรวจสอบว่า( 10 / a == 2 )

กรณีนี้ ถ้าหากตัวแปร a เป็น 0 จะเกิด error เพราะตัวหารเป็น 0 สามารถใช้หลักการทำงาน Short-Circuit Evaluation ช่วยป้องกันการเกิด error ได้ ดังนี้( a != 0 ) && ( 10 / a == 2 ) // ถ้า a มีค่าเท่ากับ 0 นิพจน์แรกเป็นเท็จ ก็จะหยุดการทำงานไม่ตรวจสอบนิพจน์สอง ช่วยป้องกัน error ได้

ด้วยเหตุที่ conditional AND (&&) และ conditional OR ( ) จะหยุดทำการตรวจสอบทันทีเมื่อรู้แน่ชัดแล้วว่าคำตอบของการตรวจสอบนั้นจะตอบว่า true หรือ false ดังนั้นหากโปรแกรมเมอร์ต้องการให้มีการตรวจสอบทั้งสองนิพจน์ (นิพจน์สองอาจให้เพิ่มค่าตัวแปร โดยไม่สนใจนิพจน์แรก) เช่น( gender == "female" ) && ( ++counter < gender ="=">

ที่มาhttp://www.thaiarchaeology.com/viewtopic.php?board=&id=890


ไม่มีความคิดเห็น: