元ネタは Java ですが、コーディングの問題なので共通ネタにしてみました。
間違いあったら教えてください。
とあるメソッドの処理なんですが
private void メソッド(){
String errMSG = "";
処理1
errMSG = "本日は晴天なり";
処理2
if (errMSG.equals("") && 変数1 != null &&
インスタンス1.プロパティ1 == 1 || インスタンス1.プロパティ1 == 2) {
処理3
}
}
前提条件が色々とあるんですが、それ書いちゃうとわかっちゃうので
そこら辺はちょっと内緒にして問題です。
さて、上記の 処理3 は通過するでしょうか?
今日たまたま仕事で出てきました。
ヒントは "本日は晴天なり" でしょうか。(嘘です)
この部分だけ切り取るとわかりやすいなぁ...
ひかからないかなぁ(^▽^;)
何のためらいも無く指摘できた人は素晴らしいです。
尊敬します。
僕にプログラミングを教えて下さい。
僕はちょっと悩みました。
まぁ、正解は 通る なんですが。
いわゆる インデント・改行に惑わされる というやつですね。
最初まともに引っかかって ここは絶対通らない と思い込んでしまいました。
だって && 条件の errMSG.equals("") は100%成立しませんから。
通らないとおかしいので、きっとそういうことだろうという目で見たらわかりましたが。
if (errMSG.equals("") && 変数1 != null &&
インスタンス1.プロパティ1 == 1 || インスタンス1.プロパティ1 == 2) {
ちょっと編集してみるとこうなります。(僕はこの書き方が好き)
if(errMSG.equals("")
&& 変数1 != null
&& インスタンス1.プロパティ1 == 1
|| インスタンス1.プロパティ1 == 2){
ということで、インスタンス1.プロパティ1 == 2 が独立した条件になっています。
他の条件がどうだろうが、この条件が成立したら通ってしまうバグです。
正しく動作させるならば
if (errMSG.equals("") && 変数1 != null &&
(インスタンス1.プロパティ1 == 1 || インスタンス1.プロパティ1 == 2)) {
でしょうか
どうも、元々
if (errMSG.equals("") && 変数1 != null && インスタンス1.プロパティ1 == 1){
こうなっていた条件を修正したみたいなんですが、安易です。
きっと僕もやってしまうでしょう。
気をつけなければ。
しかし、この修正をした人が一手に手がけているシステムって...
いいんだろうか このカウボーイの集まり