論理演算子
Go言語 (golang) 2015/02/21
// 論理積(AND) (短絡評価あり)
x && y
// 論理和(OR) (短絡評価あり)
x || y
// 否定(NOT)
!x
オペランドはPythonやRubyなどと違ってbool型に限られる。
&&
, ||
は左の項から順番に評価し、演算子の結果として true
か false
のいずれかに決定した段階で評価をやめて true
または false
を返す
(短絡評価、ショートサーキット評価)。
Java 2014/08/18
// 論理積(AND) (短絡評価あり)
x && y
// 論理積(AND) (短絡評価なし/ビット演算子にもなる)
x & y
// 論理和(OR) (短絡評価あり)
x || y
// 論理和(OR) (短絡評価なし/ビット演算子にもなる)
x | y
// 排他的論理和(XOR) (短絡評価なし/ビット演算子にもなる)
x ^ y
// 否定(NOT)
!x
論理演算子の結果の値はPythonやRubyなどと違って常に true
または false
のいずれかになる。
&&
, ||
は左の項から順番に評価し、演算子の結果として true
か false
のいずれかに決定した段階で評価をやめて true
または false
を返す
(短絡評価、ショートサーキット評価)。
&
, |
, ^
は短絡評価をせずすべての項が評価される。各項が論理値であれば論理積・論理和になるが、整数であればビット演算子になる。なお、ビット演算子の否定は ~x
と書く。
Scala 2014/10/27
Javaと同じ書き方ができるが、Javaと違って演算子ではなくすべてメソッドとして定義されている。
// 論理積(AND) (短絡評価あり)
x && y
// 論理積(AND) (短絡評価なし/ビット演算子にもなる)
x & y
// 論理和(OR) (短絡評価あり)
x || y
// 論理和(OR) (短絡評価なし/ビット演算子にもなる)
x | y
// 排他的論理和(XOR) (短絡評価なし/ビット演算子にもなる)
x ^ y
// 否定(NOT)
!x
論理演算子の結果の値はPythonやRubyなどと違ってJavaと同様に常に true
または false
のいずれかになる。
&&
, ||
は左の項から順番に評価し、演算子の結果として true
か false
のいずれかに決定した段階で評価をやめて true
または false
を返す
(短絡評価、ショートサーキット評価)。
&
, |
, ^
は短絡評価をせずすべての項が評価される。各項が論理値であれば論理積・論理和になるが、整数であればビット演算子になる。なお、ビット演算子の否定は ~x
と書く。
PHP 2014/04/19
// 論理積
$x and $y
$x && $y
// 論理和
$x or $y
$x || $y
// 排他的論理和(XOR)
$x xor $y
// 否定
!$x
and
, or
, &&
, ||
は短絡評価がある。
and
と &&
、or
と ||
は演算子の優先順位)が異なるだけである。
論理演算子 | PHP Manual
http://www.php.net/manual/ja/language.operators.logical.php
Python 2014/07/31
# 論理積
x and y
# 論理和
x or y
# 否定
not x
and
, or
は左の項から順番に評価し、演算子の結果として true か false のいずれかに決定した段階で評価をやめてその項の値を返す(短絡評価、ショートサーキット評価)。つまり、and
は左から評価して、false の扱いになった項があればその時点で評価をやめて、その項の値を返し、すべて true の扱いであれば最後の項の値を返す。
or
は左から評価して、true の扱いになった項があればその時点で評価をやめて、その項の値を返し、すべて false の扱いであれば最後の項の値を返す。最後に評価した項の値をそのまま返すため、式の値としては true
か false
に限らない。
not
は優先順位が低いので not x == y
は not (x == y)
の意味になる。
ブール演算子 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#boolean-operation
ブール演算子 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html#boolean-operations
Ruby 2016/07/08
論理演算子として、&&
, ||
, !
, and
, or
, not
がある。
!
, not
は否定で true
か false
を返す。
&&
, ||
, and
, or
は左の項から順番に評価し、演算子の結果として true か false のいずれかに決定した段階で評価をやめてその項の値を返す(短絡評価、ショートサーキット評価)。その項の値をそのまま返すため、式全体が返す値は true
か false
に限らない。
falseの扱いになるのは、false
, nil
のみである。
(-> 論理値への変換)
つまり、
&&
,and
は左の項から順番に評価し、false
またはnil
になったら、それを演算子の評価結果とし、それより右の項の評価はしない。||
,or
は左の項から順番に評価し、false
でもnil
でもない値になったら、それを演算子の評価結果とし、それより右の項の評価はしない。
and
, or
は関数の引数リストの区切りであるカンマよりも優先順位が低いため、関数呼び出しの引数リストの中にそのまま書くとコンパイルエラーになる。
例
a = nil
b = 10
p (a or b)
# => 10
p (a and b)
# => nil
p a or b
# => nil
# (p(a) or b) と解釈されているため
# 以下はカッコの中で引数リストを期待されている箇所にorがあるために
# コンパイルエラーになる。
# p(a or b)
Perl 2014/01/24
# 論理積
x && y
# 論理和
x || y
# 否定
! x
論理積や論理和は最後に評価した項が演算子の結果になる。否定の演算子は結果が真であれば 1
、偽であれば ''
になる。
例
2 && 0 # => 0
2 && '' # => ''
2 && 3 # => 3
0 && 2 # => 0
'' && 2 # => ''
3 && 2 # => 2
0 || 0 # => 0
'' || 0 # => ''
2 || 0 # => 2
2 || '' # => 2
2 || 3 # => 2
0 || 2 # => 2
'' || 2 # => 2
3 || 2 # => 3
0 || 0 # => 0
0 || '' # => ''
! 0 # => 1
! '' # => 1
! 1 # => ''
sh (シェルスクリプト) 2017/01/24
if文などでの論理演算子もどき。
# 論理積(AND)の例
if [ "$x1" -eq "$x2" -a "$y1" -eq "$y2" ]; then
...
fi
# または
if [ "$x1" -eq "$x2" ] && [ "$y1" -eq "$y2" ]; then
...
fi
# 論理和(OR)の例
if [ "$x1" -eq "$x2" -o "$y1" -eq "$y2" ]; then
...
fi
# または
if [ "$x1" -eq "$x2" ] || [ "$y1" -eq "$y2" ]; then
...
fi
# 否定(NOT)の例
if [ ! "$x1" -eq "$x2" ]; then
...
fi
# または
if ! [ "$x1" -eq "$x2" ]; then
...
fi
1つ目のコマンドに成功した場合に限って2つ目のコマンドを実行するには &&
で区切る。
COMMAND1 arg11 arg21 ... && COMMAND2 arg21 arg22 ...
1つ目のコマンドに失敗した場合に限って2つ目のコマンドを実行するには ||
で区切る。
COMMAND1 arg11 arg21 ... || COMMAND2 arg21 arg22 ...
これらは他のプログラミング言語での短絡評価の仕組みに似ている。
コマンドの実行に失敗したらシェルスクリプトを異常終了させるには
COMMAND1 arg11 arg21 ... || exit $?