ตัวดำเนินการ

16 August 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา 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

SymbolNameExample
+Additionc = a + b
-Subtractionc = a - b
*Multiplicationc = a * b
/Divisionc = a / b
%Moduloc = 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

OperatorExampleEquivalent 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 <<= 2a = 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

OperatorExampleEquivalent 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

OperaterExampleResult
==a == btrue if `a` equal to `b`, otherwise false
!=a != btrue if `a` not equal to `b`, otherwise false
<a < btrue if `a` less than `b`, otherwise false
>a > btrue if `a` greater than `b`, otherwise false
<=a <= btrue if `a` less than or equal to `b`, otherwise false
>=a >= btrue 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 มีดังนี้

OperatorNameExample
!Not! true
&&Andtrue && true
||Ortrue || false

โดยตัวดำเนินการตรรกศาสตร์จะใช้เปรียบเทียบกับค่าสองค่า ยกเว้นตัวดำเนินการ Not ค่าที่นำมาเป็นประเมินนั้นจะต้องเป็น Boolean และผลลัพธ์ที่ได้จะเป็น Boolean เช่นกัน

ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ Not

Value 1ExpressionResult
true! truefalse
false!falsetrue

ตัวดำเนินการทางตรรกศาสตร์ Not จะกลับค่าจาก true เป็น false และในทางกลับกัน

ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ And

Value 1Value 2ExpressionResult
truetruetrue && true true
truefalsetrue && falsefalse
falsefalsefalse && falsefalse

ตัวดำเนินการทางตรรกศาสตร์ And ถ้า expression ย่อยทั้งสองเป็น true จะได้ผลลัพธ์เป็น true นอกเหนือจากนั้นจะได้ผลลัพธ์เป็น false

ตารางค่าความจริงของตัวดำเนินการตรรกศาสตร์ Or

Value 1Value 2ExpressionResult
truetruetrue || true true
truefalsetrue || falsetrue
falsefalsefalse || falsefalse

ตัวดำเนินการทางตรรกศาสตร์ 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 (ตัวดำเนินการระดับบิต) จะดำเนินการกับในรูปแบบของหนึ่งบิตหรือมากกว่า หรือในตัวเลขฐานสอง โดยการนำคู่ของบิตแต่ละตัวมาคำนวณโดยการใช้หลักการของตัวดำเนินการทางคณิตศาสตร์

นี่เป็นตารางของตัวดำเนินการระดับบิต

SymbolDescription
&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 10base 2ResultResult base 10
5 & 300000101 & 00000011000000011
5 | 300000101 | 00000011000000017
~5~0000010111111010-6
5 << 100000101 << 10000101010

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

บทความนี้เป็นประโยชน์หรือไม่?Yes·No