Logical Operator คือ ตัวดำเนินการตรรกะ ถูกนำมาใช้กับตัวแปรประเภท Boolean หรือ ค่าของข้อมูล true หรือ false แล้วเอา Logical Operator มาทำอะไรในโปรแกรม ?
ก่อนหน้านี้ เราได้เรียนรู้การใช้ if, if ... else, whie, do ... while, for คำสั่งควบคุมเหล่านี้ต้องการเงื่อนไข (Condition) เพื่อกำหนดการทำงานของโปรแกรม ตัวอย่างเช่น count <= 10, number != age, total > 90 เงื่อนไขง่ายๆ เหล่านี้ใช้ Relational operators ( >, <, >=, <=) และ Equality operators (==, !=) เพียง 1 เงื่อนไข
กรณีเงื่อนไขซับซ้อนมากขึ้น มีเงื่อนไขมากกว่า 1 ข้อ ตัวอย่างเช่น เราต้องการเขียนโปรแกรมนับจำนวนชายที่มีอายุมากกว่า 65 ปี โค้ดของเราจะออกมาเป็นหน้าตาแบบนี้ครับ
if(gender == "MALE") {
if(age > 65) {
++seniorMales;
}
}
เมื่อนำ Logical Operator มาใช้
if(gender == "MALE" && age > 65) {
++seniorMales;
}
อ่านว่า "ถ้าเป็นชายและมีอายุมากกว่า 65 ให้ทำการเพิ่มค่าในตัวแปร seniorMales อีก 1"
สังเกตุว่า Logical Operators จะช่วยเชื่อมเงื่อนไข (Condition) ภายในคำสั่ง if ทำให้สามารถเขียนเงื่อนไขที่ซับซ้อนได้
Logical Operators แต่ละแบบทำงานอย่างไรบ้าง ?
แบบที่ 1 - && (Condition And Operator)
จะให้ค่าเป็นจริง (true) กรณีเดียวเมื่อ true && true กรณีอื่นจะให้ค่าเป็นเท็จ (false) ทั้งหมด ตามตารางด้านล่าง
expression1 |
expression2 |
expression1 && expression2 |
false |
false |
false |
false |
true |
false |
true |
false |
false |
true |
true |
true |
ตัวอย่าง
int number = 15;
if(number > 10 && number < 20)
// expression1 : number > 10 = true
// expression2 : number < 20 = true
// expression1 && expression2 = true
แบบที่ 2 - || (Condition OR Operator)
จะให้ค่าเป็นเท็จ (false) กรณีเดียวเมื่อ false || false กรณีอื่นจะให้ค่าเป็นจริง (true) ทั้งหมด ตามตารางด้านล่าง
expression1 |
expression2 |
expression1 || expression2 |
false |
false |
false |
false |
true |
true |
true |
false |
true |
true |
true |
true |
ตัวอย่าง
char grade = 'A';
if(grade == 'B' || grade == 'A')
// expression1 : grade == 'B' = false
// expression2 : grade == 'A' = true
// expression1 || expression2 = true
แบบที่ 3 & (Boolean Logical And)
จะเหมือนกับ && (Condition AND Operator) มีจุดที่แตกต่างกันคือเมื่อเป็น Boolean Logical operators จะไม่มีการทำ Short-circuit evaluation
Short-circuit evaluation ของ && (Condition AND Operator) คือ จะไม่ตรวจสอบเงื่อนไขที่เหลือ ถ้าเจอเงื่อนไขหนึ่งเป็นเท็จ (false) แล้ว
แบบที่ 4 I (Boolean Logical Inclusive OR)
จะเหมือนกับ || (Condition OR Operator) มีจุดที่แตกต่างกันคือคือเมื่อเป็น Boolean Logical operators จะไม่มีการทำ Short-circuit evaluation
Short-circuit evaluation ของ || (Condition OR Operator) คือ จะไม่ตรวจสอบเงื่อนไขที่เหลือ ถ้าเจอเงื่อนไขหนึ่งเป็นจริง (true) แล้ว
แบบที่ 5 ^ ( Boolean Logical Exclusive OR)
expression1 |
expression2 |
expression1 && expression2 |
false |
false |
false |
false |
true |
true |
true |
false |
true |
true |
true |
false |
แบบที่ 6 ! (Logical Negation Operator)
expression |
!expression |
false |
true |
true |
false |
Logical Operator Example
Source Code
package com.olanlab.share.exam;
public class LogicalOperators {
public static void main(String[] args) {
System.out.println("Condition AND (&&)");
System.out.println("false && false : " + (false && false));
System.out.println("false && true : " + (false && true));
System.out.println("true && false : " + (true && false));
System.out.println("true && true : " + (true && true));
System.out.println();
System.out.println("Condition OR (||)");
System.out.println("false || false : " + (false || false));
System.out.println("false || true : " + (false || true));
System.out.println("true || false : " + (true || false));
System.out.println("true || true : " + (true || true));
System.out.println();
System.out.println("Boolean logical AND (&)");
System.out.println("false & false : " + (false & false));
System.out.println("false & true : " + (false & true));
System.out.println("true & false : " + (true & false));
System.out.println("true & true : " + (true & true));
System.out.println();
System.out.println("Boolean logical inclusive OR (|)");
System.out.println("false | false : " + (false | false));
System.out.println("false | true : " + (false | true));
System.out.println("true | false : " + (true | false));
System.out.println("true | true : " + (true | true));
System.out.println();
System.out.println("Boolean logical exclusive OR (^)");
System.out.println("false ^ false : " + (false ^ false));
System.out.println("false ^ true : " + (false ^ true));
System.out.println("true ^ false : " + (true ^ false));
System.out.println("true ^ true : " + (true ^ true));
System.out.println();
System.out.println("Logical NOT (!)");
System.out.println("!false : " + !false);
System.out.println("!true : " + !true);
System.out.println();
}
}
Output
Condition AND (&&)
false && false : false
false && true : false
true && false : false
true && true : true
Condition OR (||)
false || false : false
false || true : true
true || false : true
true || true : true
Boolean logical AND (&)
false & false : false
false & true : false
true & false : false
true & true : true
Boolean logical inclusive OR (|)
false | false : false
false | true : true
true | false : true
true | true : true
Boolean logical exclusive OR (^)
false ^ false : false
false ^ true : true
true ^ false : true
true ^ true : false
Logical NOT (!)
!false : true
!true : false