ตัวดำเนินการ
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา 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 อย่างละเอียด ซึ่งมันมีความจำเป็นที่จะในไปใช้ในการเขียนโปรแกรมในบทที่เหลือต่อไป ในบทต่อไปเราจะทำการเขียนโปรแกรมกับตัวอย่างที่จำลองโปรแกรมจริง โดยการรับข้อมูลจากผู้ใช้ทางคีย์บอร์ด