Java言語のboolean型における論理演算子と短絡演算子

自分の学習用に。
1
Ryo Asai @ryoasai74

Javaのboolean型に対して&&や||でなく&や|が使える意味はどのくらいあるのでしょう。Cとの互換性もあったのでしょうが、実際はboolean型は条件式として使うことがほとんどなので短絡評価のみでよい気がしますが。この文法は間違いのもとになりますね。

2011-08-30 01:47:36
ゆとり🇺🇦 @megascus

@ryoasai74 エラーチェックをごりごり書く必要があるときに使いました。全部のチェックを一度にしたかったので。。。。FindBugsで検出されたので即座に書き直しましたが!if文たくさんは面倒くさかった。。。

2011-08-30 01:53:07
Ryo Asai @ryoasai74

少なくともFizzBuzzの条件などは、短絡評価で良いですね。

2011-08-30 02:00:55
tt4cs @tt4cs

@megascus @ryoasai74 boolean型を && や || じゃなく & や | で結合すると、どんなメリットがありますか? 字数の節約ぐらいしか思いつかなくって、すみません orz

2011-08-30 02:05:03
ゆとり🇺🇦 @megascus

あいやー、よくよく見たら短絡演算子しか書かれていない。。。

2011-08-30 02:10:00
ゆとり🇺🇦 @megascus

@tt4cs @ryoasai74 A & B の場合 Aの真偽を問わず、Bは必ず評価される。 A && Bの場合 Aがtrueなら Bは評価されない。単純な真偽値だけなら変わりはありませんが、Bが真偽値を返すメソッドだと実行される、されないで大違いという。

2011-08-30 02:13:00
ゆとり🇺🇦 @megascus

あー、、、、短絡演算子と対になる言葉は標準演算子なのね。まあ、確かに速度的な問題がなければ、標準演算子のほうが良い気がするけど。。。。。短絡演算子のほうがよく使われている予感。

2011-08-30 02:18:12
ゆとり🇺🇦 @megascus

@tt4cs あと、すみません。ぜんぜん違うとかきつい表現してごめんなさい。

2011-08-30 02:22:55
tt4cs @tt4cs

@megascus いえいえ、こちらこそ単によくわかっていなかっただけです。演算子の右側の処理をおこなってから真偽判断するのか、それともおこなわずに真偽判断が完了してしまうのかは、たしかに違いますよね。ありがとうございます!

2011-08-30 02:30:13
Shingo Omura ⎈ @everpeace

@ryoasai74 副作用のある関数を呼び出している場合でしょうか。評価の途中でどこかの値が書き変わるような。その時は&&とかを使ってたりするとだめですからね。

2011-08-30 07:47:42
Ryo Asai @ryoasai74

@everpeace そもそも、論理式で副作用のある式を使うのは間違いだと思います。

2011-08-30 09:07:23
Shingo Omura ⎈ @everpeace

@ryoasai74 そもそもとか、間違いとか、そういう事ではなく、ショートサーキット演算子の存在意義についての私の考えをレスしたのです。言語としてそれもサポートしている、と受け取れるのではないでしょうか。という発言です。

2011-08-30 09:24:36
Shingo Omura ⎈ @everpeace

@ryoasai74 あと、言語として記述できるのにもかかわらず、それを「間違い」だと断定し、しかも言語要素の存在意義を否定するなど、どうしてできるのでしょう。

2011-08-30 09:28:45
Ryo Asai @ryoasai74

@everpeace deprecatedメソッドと同じで言語仕様も歴史的な経緯で導入されたけれど使われない機能は当然あってしかるべきだと思いますね。条件文で副作用のある式を使うのはわかりやすいプログラムという意味でやってはいけないということで、わかりやすい変数名を付けるのと同じ

2011-08-30 09:39:46
Ryo Asai @ryoasai74

短絡でない&と|がboolean値に対して使えるのはintと論理値が同一だったC言語のころの名残だと思っていますが。私自身はbooleanに対してこれらの演算子を実際のプログラムで使った記憶がないですね。

2011-08-30 09:41:41
Shingo Omura ⎈ @everpeace

@ryoasai74 もちろん、それは同意しますが、使ってほしくない、使うべきでない、程度で存在意義がない、と結論づけるのは、議論の飛躍でしょう。だって、使える時点で存在意義はあるんだもの。

2011-08-30 09:50:55