論理演算は真偽値(true /false)のみを扱い、「条件が成立するかどうか」を判定するために使用します。計算結果は二種類のみ:true(真、条件一致)、false(偽、条件不一致)。
コード内のすべての if、while/forループの判定、switch条件は、内部的にすべて論理演算で実装されています。
主に3種類存在します:論理積・論理和・否定
| 演算子 | 名称 | 動作説明 |
|---|---|---|
&& | 論理積(AND) | 両辺が同時にtrueの場合のみ結果がtrue;短絡評価あり |
| || | 論理和(OR) | どちらか一方がtrueなら全体の結果がtrue;短絡評価あり |
!expr | 論理否定(NOT、反転) | 真偽値を反転:trueはfalseに、falseはtrueに変換 |
論理積・論理和・否定は中学で学んだ直列回路・並列回路と考え方が似ています。直列回路が論理積、並列回路が論理和に相当します。
1. 論理否定 !
単一の真偽式の値を反転させます。
使い方:
!真偽式
例
void main() {
bool isMale = false;
print(!isMale); // true
bool flag = true;
print(!flag); // false
}Code language: PHP (php)
上記のisMaleとflagは元々false、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内部にエラーや例外が存在しても、関数自体が実行されないためエラーは発生しません。
論理積の使用例
void main() {
String name = 'admin';
String password = '123321';
// && 両辺がtrueの場合のみ条件成立
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、電球が点灯します。
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の評価・実行は行わない
実行速度を向上させるだけでなく、エラー回避にも活用されます(null判定で頻出)
例:
String? name;
// nameがnullでない場合のみlengthにアクセス、短絡でnull参照エラーを回避
if(name != null && name.length > 0)
{
}Code language: JavaScript (javascript)
上記コードで、直接name.lengthを実行するとnameがnullのためエラーが発生します。先に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)