邏輯運算僅處理布林值(true / false),用來判斷「條件是否成立」,運算結果只有兩種:true(真,條件符合)、false(假,條件不符合)。
程式裡所有 if、while、for 迴圈判斷、switch 條件,底層都是透過邏輯運算實作。
共有三種:邏輯且、邏輯或、邏輯非
| 運算子 | 名稱 | 功能說明 |
|---|---|---|
&& | 邏輯且 | 兩側運算式皆為true,整體結果才是true;具備短路特性 |
| || | 邏輯或 | 任一側運算式為true,整體結果即為true;具備短路特性 |
!運算式 | 邏輯非(反向取反) | 布林值反向:true轉為false,false轉為true |
邏輯且、或、非的概念,和國中物理學的串聯、並聯電路很類似。串聯電路等同邏輯且,並聯電路等同邏輯或。
1. 邏輯非 !
針對單一布林運算式做反向取反。
使用語法:
!布林運算式
範例
void main() {
bool isMale = false;
print(!isMale); // true
bool flag = true;
print(!flag); // false
}Code language: PHP (php)
範例中 isMale 原本是 false、flag 原本是 true,經過邏輯非取反後,數值都會變成相反狀態。
也可以套用到複合運算式,例如:
void main() {
int age = 12;
print(!(age>18)); // true
}Code language: JavaScript (javascript)
原本 age > 18 的判斷結果是 false,前方加上 ! 取反後,輸出變為 true。
2. 邏輯且 &&
| 運算式 | 結果 |
|---|---|
true && true | true |
true && false | false |
false && true | false |
false && false | false |
左右兩側判斷全部為 true,結果才會是 true;任一側為 false,整體結果皆為 false。
短路特性:若左側運算結果為false,右側程式不會執行,直接回傳false。

必須兩個開關同時閉合(皆為 true),燈泡才會點亮(true);只要其中任一開關斷開(false),燈泡就不會亮(false)。因此只要左側判斷為 false,右側就不需要執行。
void main() {
bool fun1() {
print("函式已執行!");
return true;
}
bool left = false;
// 左側為 false,右側 fun1() 完全不會執行
bool res = left && fun1();
print("最終結果:$res");
}Code language: PHP (php)
執行輸出
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
最終結果:false
Code language: JavaScript (javascript)
就算 fun1 內有錯誤或例外,也不會觸發報錯,因為 fun1 根本沒有執行。
邏輯且實務範例
void main() {
String name = 'admin';
String password = '123321';
// && 兩側條件都符合才會成立
if (name=='admin' && password =='456654') {
print("登入成功");
} else {
print("帳號或密碼錯誤");
}
}Code language: JavaScript (javascript)
執行輸出
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
帳號或密碼錯誤Code language: CSS (css)
3. 邏輯或 ||
若左側運算結果為true,右側程式不會執行,直接回傳true。
| 運算式 | 結果 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
參考範例
void main() {
bool fun1() {
print("函式執行");
return true;
}
// 左側為true,觸發短路,fun1()不會執行
bool res = true || fun1();
print(res); // true
}Code language: PHP (php)
因為 || 左側判斷為 true,右側的 fun1 就不會執行。

兩個開關只要任一閉合(true),燈泡就會點亮(true)。
void main() {
bool isParentAgree = true;
int age = 12;
if(age>=13 || isParentAgree){
print("可以入場");
}
}Code language: JavaScript (javascript)
重點整理
A && B:若 A 為 false,直接回傳 false,不會執行、判斷 B
A || B:若 A 為 true,直接回傳 true,不會執行、判斷 B
短路特性除了提升執行效率,也能用來避免執行時報錯(空值判斷最常使用)
實務範例:
String? name;
// 只有name不為null才會呼叫length,短路機制避免空值錯誤
if(name != null && name.length > 0)
{
}Code language: JavaScript (javascript)
如果直接執行 name.length 會報錯,因為 name 是 null,無法存取 length 屬性。但前面先判斷 name != null,當 name 為 null 時第一個條件就是 false,後續程式不會執行,因此不會發生錯誤。
三種邏輯運算子優先順序
! > && > ||
和數學運算規則相同,優先權高的會先計算;若要改變執行順序,使用
()括號包覆。
if (!done && (col == 0 || col == 3)) {
// ...執行對應邏輯...
}Code language: JavaScript (javascript)
分步執行順序:
- 先計算括號內:
col == 0 || col == 3(判斷欄位為 0 或 3) - 執行
!done反向取反 - 兩個結果進行
&&邏輯且運算
完整示範程式
void main() {
bool done = false;
int col = 3;
// 官方示範語法
if (!done && (col == 0 || col == 3)) {
print("執行邏輯:尚未完成,且欄位為0或3");
}
// 示範邏輯非 !
bool isFinish = true;
print(!isFinish); // false
// 示範 && 邏輯且
int a = 10, b = 20;
if (a > 5 && b > 10) {
print("a大於5 且 b大於10");
}
// 示範 || 邏輯或
int score = 55;
if (score < 60 || score > 90) {
print("分數不及格 或 分數表現優異");
}
// 短路特性示範
bool func() {
print("函式已執行");
return true;
}
false && func(); // 左側false,func不會輸出內容
true || func(); // 左側true,func不會輸出內容
}Code language: PHP (php)
執行輸出
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
執行邏輯:尚未完成,且欄位為0或3
false
a大於5 且 b大於10
分數不及格 或 分數表現優異Code language: JavaScript (javascript)