論理演算子の「and」と「&&」の違い
投稿:2018-01-23
動作に違いが出るように頑張ったけれど、そもそもこんなコード書かないよ(大笑い)
#!/usr/bin/perl -w use utf8; use warnings; use strict; use open IO => ":utf8"; use Encode::Locale; binmode STDOUT, ":encoding(console_out)"; $| = 1; my @param = (0, 123); alphabet(@param); symbol(@param); @param = (10, 123); alphabet(@param); symbol(@param); exit; sub alphabet { my ($a, $b) = @_; $b = $a and print "$b\n"; print "b == $b\n"; } sub symbol { my ($a, $b) = @_; $b = $a && print "$b\n"; print "b == $b\n"; }
WindowsとCentOSで確認しました。
左の項が偽の場合は右の項を評価しないので1行目と2行目は同じに見えます。 けれど真の場合は左の項の範囲が違うのでandと&&で動作が変わります。
左の項が偽の場合は右の項を評価しないので1行目と2行目は同じに見えます。 けれど真の場合は左の項の範囲が違うのでandと&&で動作が変わります。
b == 0 ←左の項は「$b = $a」 b == 0 ←左の項は「$a」 10 ←左の項「$b = $a」を評価(10が$bに入る)、それから右の項「print」を評価して表示 b == 10 123 ←左の項「$a」を評価して、それから右の項「print」を評価して表示 b == 1 ←「print」の戻り値が代入されている