ตัวดำเนินการ
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา Java และการใช้งานตัวดำเนินการ ในภาษา Java มีตัวดำเนินการประเภทต่างๆ ดังนี้
String concatenating operator (+)
String concatenating operator หรือเครื่องหมายในการเชื่อมต่อ String จะใช้สำหรับต่อ String เป็น String เดียวกัน ตัวแปรแบบ String นั้นเป็นคลาสที่สร้างมาเพื่อสนับสนุนการเขียนโปรแกรมในภาษา Java เพื่อให้ง่ายขึ้น โดยเราใช้เครื่องหมาย + เมื่อใช้กับ String นั่นหมายถึงเป็นการนำมาต่อกัน
เมื่อคุณนำ String ไปต่อกับตัวเลขโดยใช้เครื่องหมาย concatenating จะให้ตัวเลขนั้นกลายเป็น String คุณได้เห็นว่าเราได้ใช้งานมันไปบ้างแล้วจากบทเรียนก่อนหน้า ต่อไปมาดูตัวอย่างการใช้เครื่องหมาย String concatenating
public class StringConcatenating {
public static void main (String[] atgs) {
String firstName = "Mateo";
String lastName = "Marcus";
int number = 34;
System.out.println(firstName + lastName);
System.out.println(firstName + " " + lastName);
System.out.println(firstName + number);
System.out.println(lastName + true);
}
}
ในตัวอย่างเราได้ทำการนำตัวแปร String มาต่อกันและ String ต่อกับตัวเลข และค่าของ Boolean มันสามารถต่อได้กับข้อมูลทุกประเภทและข้อมูลเหล่านั้นจะถูกแปลงเป็น String ซึ่งจะได้ผลลัพธ์การรันดังข้างล่าง
MateoMarcus
Mateo Marcus
Mateo34
Marcustrue
Assignment operator
Assignment operator (ตัวดำเนินการกำหนดค่า) เป็นตัวดำเนินการที่ให้กับหนดค่าให้กับตัวแปร จาก Literal หรือ Expression โดยใช้เครื่องหมายเท่ากับ (=) ตัวอย่างการใช้งานตัวดำเนินการกำหนดค่าเป็นดังนี้
int a = 10;
float b = 5.3f;
String name = "Marcus";
Random r = new Random();
MyClass object1 = new MyClass();
จากตัวอย่าง เป็นการใช้ตัวดำเนินการกำหนดค่า ในการกำหนดค่าให้กับตัวแปรประเภทต่างๆ ตัวแปรที่คุณเห็นสองแบบแรกเป็น primitive types ในภาษา Java ส่วน String และ Random เป็นคลาสไลบรารี่ที่มีอยู่ในภาษา Java เราสามารถใช้งานได้เลย สำหรับอันสุดท้ายเป็นคลาสที่ผู้ใช้สร้างขึ้นเอง ซึ่งมันอยู่ในเรื่องการเขียนโปรแกรมแบบออบเจ็คที่คุณจะได้เรียนต่อไปในบทนี้
Arithmetic operators
Arithmetic operators (ตัวดำเนินการทางคณิตศาสตร์) เป็นตัวนำเนินการที่เกิดจาก Operand และ Operator ตั้งแต่ 1 ตัวขึ้นไปมาคำนวณเพื่อให้ได้ผลลัพธ์ใหม่ มันทำงานร่วมกับตัวดำเนินการกำหนดค่า (=) โดยตัวดำเนินการมี 5 แบบ
นี่เป็นตารางของตัวดำเนินการทางคณิตศาสตร์ในภาษา Java
| Symbol | Name | Example |
|---|---|---|
| + | Addition | c = a + b |
| - | Subtraction | c = a - b |
| * | Multiplication | c = a * b |
| / | Division | c = a / b |
| % | Modulo | c = a % b |
คุณอาจจะเห็นบางอย่างใหม่ก็คือ ตัวดำเนินการ Modulo (%) เป็นตัวดำเนินการในการหารเอาเศษ (reminder) ที่มันจำเป็นในการเขียนโปรแกรมคอมพิวเตอร์ ต่อไปดูตัวอย่างการใช้ตัวดำเนินการทางคณิตศาสตร์
public class ArithmeticOperator {
public static void main (String[] atgs) {
int a = 5;
int b = 3;
System.out.println(a + " + " + b + " = " + (a + b));
System.out.println(a + " - " + b + " = " + (a - b));
System.out.println(a + " * " + b + " = " + (a * b));
System.out.println(a + " / " + b + " = " + (a / b));
System.out.println(a + " % " + b + " = " + (a % b));
}
}
คุณจะเห็นว่ามันก็คือ การ บวก ลบ คูณ หาร เท่านั้นเอง ในคอมพิวเตอร์นั้นก็มีการคำนวณเช่นเดียวกัน และผลลัพธ์ของมันตรงไปตรงมาดังข้างล่าง
5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5 % 3 = 2
Compound assignment
Compound assignment ถูกใช้เพื่ออัพเดทค่าของตัวแปรจากค่าเดิมของมันที่มีอยู่ โดยมันจะเป็นรูปแบบย่อของตัวดำเนินการแบบ Arithmetic Operator และตัวดำเนินการ Bitwise operators เพื่อให้เขียนได้รวดเร็วและลดความผิดพลาดในการเขียนโปรแกรมได้มากกว่า
นี่เป็นตารางของตัวดำเนินการ Compound assignment ในภาษา Java
| Operator | Example | Equivalent to |
|---|---|---|
| += | a += 2; | a = a + 2 |
| -= | a -= 2; | a = a - 2 |
| *= | a *= 2; | a = a * 2 |
| /= | a /= 2; | a= a / 2 |
| %= | a %= 2; | a = a % 2 |
| >>= | a >>= 2; | a = a >> 2 |
| <<= | a <<= 2 | a = a << 2 |
| &= | a & = 2; | a = a & 2 |
| ^= | a ^= 2; | a= a ^ 2 |
| |= | a |= 2; | a = a | 2 |
Increment and decrement
ตัวดำเนินการต่อไปที่ใช้บ่อยในการเขียนโปรแกรมก็คือ Increment Operator (ตัวดำเนินการเพิ่มค่า) และ Decrement Operator (ตัวดำเนินการลดค่า) มันถูกใช้เพื่อเพิ่มหรือลดค่าของตัวแปรครั้งละ 1 โดยแบ่งออกได้เป็นดังนี้
นี่เป็นตารางของตัวดำเนินการเพิ่มค่าและลดค่าในภาษา Java
| Operator | Example | Equivalent to |
|---|---|---|
| ++ (prefix) | ++a; | a = a + 1; |
| ++ (posfix) | a++; | a = a + 1; |
| -- (prefix) | --a; | a = a - 1; |
| -- (postfix) | a--; | a = a - 1; |
ตัวดำเนินการทั้งสองแบบนั้นจะแบ่งย่อยลงไปอีกเป็น prefix และ postfix ตัวดำเนินการที่เป็นแบบ prefix จะทำการเพิ่มค่าของตัวแปรขึ้นทันทีก่อนที่จะประมวลผลคำสั่งนั้น ส่วนตัวดำเนินการแบบ posfix จะเพิ่มค่าหลังจากที่ประมวลผลคำสั่งนั้นเสร็จสิ้นแล้ว ก็คือคำสั่งที่จบด้วยเครื่องหมาย ; มาดูตัวอย่างที่จะช่วยให้คุณเข้าใจได้ง่ายขึ้น
public class IncrementDecrement {
public static void main (String[] atgs) {
int i = 5;
int j = 5;
System.out.println("++i = " + (++i));
System.out.println("j++ = " + (j++));
// At this line either i and j are 6
}
}
จากโค้ดตัวอย่างข้างบน เป็นการใช้ตัวดำเนินการเพิ่มและลดค่า เราได้กำหนดค่าให้กับตัวแปร i และ j มีค่าเท่ากัน และแสดงผลออกทางหน้าจอ ++i นั้นจะเพิ่มค่าก่อนที่แสดงผล ส่วน j++ นั้นจะเพิ่มค่าหลังจากที่แสดงผลค่าเสร็จแล้ว จึงทำให้ผลลัพธ์ของ i ที่แสดงออกมาเป็น 6 และ j เป็น 5 ดังผลการทำงานข้างล่าง
++i = 6
j++ = 5
Relational and comparison operators
Relational and comparison operators (ตัวดำเนินการเปรียบเทียบ) ใช้สำหรับเปรียบเทียบข้อมูล โดยการสร้าง expression ขึ้นมา ค่าที่ได้จากการเปรียบเทียบจากตัวดำเนินการเหล่านี้จะเป็น Boolean Value (true or false) มันมักจะใช้กับคำสั่งเปรียบเทียบเช่น if while do-while for เพื่อสร้างเงื่อนไขบางอย่าง
นี่เป็นตารางของตัวดำเนินการเปรียบเทียบในภาษา Java
| Operater | Example | Result |
|---|---|---|
| == | a == b | true if `a` equal to `b`, otherwise false |
| != | a != b | true if `a` not equal to `b`, otherwise false |
| < | a < b | true if `a` less than `b`, otherwise false |
| > | a > b | true if `a` greater than `b`, otherwise false |
| <= | a <= b | true if `a` less than or equal to `b`, otherwise false |
| >= | a >= b | true if `a` greater than or equal to `b`, otherwise false |
ต่อไปมาดูตัวอย่างการใช้งานของตัวดำเนินการเปรียบเทียบ
public class ComparisonOperators {
public static void main (String[] atgs) {
int a = 5;
int b = 8;
System.out.println(a + " equal to " + b + " -> " + (a == b));
System.out.println(a + " not equal to " + b + " -> " + (a != b));
System.out.println(a + " less than " + b + " -> " + (a < b));
System.out.println(a + " more than " + b + " -> " + (a > b));
System.out.println(a + " less than or equal " + b + " -> " + (a <= b));
System.out.println(a + " more than or equal " + b + " -> " + (a >= b));
}
}
ข้างบนเป็นการกำหนดค่าให้กับตัวแปน a เป็น 5 และ เป็น 8 และนำมาเปรียบเทียบกันด้วยตัวดำเนินการแบบต่าง ๆ จะได้ผลลัพธ์ดังข้างล่าง
5 equal to 8 -> false
5 not equal to 8 -> true
5 less than 8 -> true
5 more than 8 -> false
5 less than or equal 8 -> true
5 more than or equal 8 -> false
Logical operators
Logical operators (ตัวดำเนินการตรรกศาสตร์) เป็นตัวดำเนินการที่ใช้สำหรับ expression ตั้งแต่หนึ่ง expression ขึ้นไป โดยตัวดำเนินการตรรกศาสตร์ในภาษา Java มีดังนี้
| Operator | Name | Example |
|---|---|---|
| ! | Not | ! true |
| && | And | true && true |
| || | Or | true || false |
โดยตัวดำเนินการตรรกศาสตร์จะใช้เปรียบเทียบกับค่าสองค่า ยกเว้นตัวดำเนินการ Not ค่าที่นำมาเป็นประเมินนั้นจะต้องเป็น Boolean และผลลัพธ์ที่ได้จะเป็น Boolean เช่นกัน
ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ Not
| Value 1 | Expression | Result |
|---|---|---|
| true | ! true | false |
| false | !false | true |
ตัวดำเนินการทางตรรกศาสตร์ Not จะกลับค่าจาก true เป็น false และในทางกลับกัน
ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ And
| Value 1 | Value 2 | Expression | Result |
|---|---|---|---|
| true | true | true && true | true |
| true | false | true && false | false |
| false | false | false && false | false |
ตัวดำเนินการทางตรรกศาสตร์ And ถ้า expression ย่อยทั้งสองเป็น true จะได้ผลลัพธ์เป็น true นอกเหนือจากนั้นจะได้ผลลัพธ์เป็น false
ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ Or
| Value 1 | Value 2 | Expression | Result |
|---|---|---|---|
| true | true | true || true | true |
| true | false | true || false | true |
| false | false | false || false | false |
ตัวดำเนินการทางตรรกศาสตร์ Or ถ้า expression ย่อยอย่างน้อยหนึ่งตัวเป็น true จะได้ผลลัพธ์เป็น true นอกเหนือจากนั้นจะได้ผลลัพธ์เป็น false
ต่อไปมาดูตัวอย่างการใช่ตัวดำเนอนการตรรกศาสตร์ในการเขียนโปรแกรม เรามักจะใช้กับคำสั่งตรวจสอบเงื่อนไข เช่น if
public class LogicalOperators {
public static void main (String[] atgs) {
int score = 8;
int level = 4;
if (score >= 10 && level >= 5) {
System.out.println("You get a gold badge.");
}
if (score >= 10 || level >= 3) {
System.out.println("You get a bronze badge.");
}
}
}
จากตัวอย่างโปรแกรมด้านบน มีตัวแปรเก็บคำแนนและเลเวล โดยใช้คำสั่ง if ในการเปรียบเทียบ คุณจะได้เรียนในบทต่อไป ถ้าคะแนนของเขาตั้งแต่ 10 และเลเวลตั้งแต่ 5 ขึ้นไปเขาจะได้รับ Gold badge และถ้าคะแนนของเราตั้งแต่ 10 หรือมีเลเวลตั้งแต่ 3 เขาจะได้รับ Bronze badge ดังนั้นเมื่อรันโปรแกรมเขาจึงได้รับแค่ Bronze badge
You get a bronze badge.
Bitwise operators
Bitwise operators (ตัวดำเนินการระดับบิต) จะดำเนินการกับในรูปแบบของหนึ่งบิตหรือมากกว่า หรือในตัวเลขฐานสอง โดยการนำคู่ของบิตแต่ละตัวมาคำนวณโดยการใช้หลักการของตัวดำเนินการทางคณิตศาสตร์
นี่เป็นตารางของตัวดำเนินการระดับบิต
| Symbol | Description |
|---|---|
| & | Bitwise AND |
| | | Bitwise inclusive OR |
| ^ | Bitwise exclusive OR |
| ~ | bit inversion |
| << | Shift bits left |
| >> | Shift bits right |
ต่อไปมาดูตัวอย่างของตัวดำเนินการระดับบิตแบบต่างๆ ในการเขียนโปรแกรม
public class BitwiseOperators {
public static void main (String[] atgs) {
int a = 5;
int b = 3;
System.out.println(a + " & " + b + " = " + (a & b));
System.out.println(a + " | " + b + " = " + (a | b));
System.out.println("~" + a + " = " + (~a));
System.out.println(a + " << 1 = " + (a << 1));
}
}
จากตัวอย่างด้านบน เราได้ใช้ตัวดำเนินการบิต 4 ชนิด โดยทำกับตัวแปร Integer ซึ่งมีขนาด 8 บิต ดังนั้นการทำงานของโปรแกรมแสดงได้ดังตารางนี้
| base 10 | base 2 | Result | Result base 10 |
|---|---|---|---|
| 5 & 3 | 00000101 & 00000011 | 00000001 | 1 |
| 5 | 3 | 00000101 | 00000011 | 00000001 | 7 |
| ~5 | ~00000101 | 11111010 | -6 |
| 5 << 1 | 00000101 << 1 | 00001010 | 10 |
และจะได้ผลลัพธ์ต่อไปนี้เมื่อรันโปรแกรม ในตัวอย่างนี้นั้นคุณจะต้องรู้จักเกี่ยวกับเลขฐานเพื่อที่จะเข้าใจมัน ซึ่งอยู่นอกขอบเขตของบทเรียน Java นี้
5 & 3 = 1
5 | 3 = 7
~5 = -6
5 << 1 = 10
Conditional ternary operator
Conditional ternary operator เป็นตัวดำเนินการเปรียบเทียบเงือนไขแบบสั้น ที่ประเมิน expression และให้ผลลัพธ์เป็นค่าหนึ่ง ถ้า expression เป็น true และอีกค่าถ้า expression เป็น false โดยมันมีรูปแบบการใช้งานดังนี้
expression ? valueForTrue : valueForFalse ;
โดยการทำงานของมันนั้นสามารถทำหน้าที่ได้คล้ายคำสั่ง if ถ้าเงื่อนไขและการทำงานไม่ซับซ้อน และมีแค่คำสั่งเดียวที่จะให้ทำงาน โดยมีตัวอย่างการใช้งานดังนี้
public class TernaryOperator {
public static void main (String[] atgs) {
int n = -2;
String name = "Mateo";
System.out.println(n < 0 ? "n is a negative number." : "n is a positive number.");
System.out.println(name.length() <= 5 ? "Your name is accepted." : "Your name is too long." );
}
}
และมันจะได้ผลลัพธ์ดังข้างล่าง
n is a negative number.
Your name is accepted.
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา Java อย่างละเอียด ซึ่งมันมีความจำเป็นที่จะในไปใช้ในการเขียนโปรแกรมในบทที่เหลือต่อไป ในบทต่อไปเราจะทำการเขียนโปรแกรมกับตัวอย่างที่จำลองโปรแกรมจริง โดยการรับข้อมูลจากผู้ใช้ทางคีย์บอร์ด