VB
1If fooFunction = False Then 2 bar = 0 3End If
Java
1If (fooFunction() == False) { 2 bar = 0; 3}
上記のようなコードで、「fooFunction = False」のように関数をIfの中に入れることがダメだという先輩がいて、納得できません。
ダメな理由や推奨されない理由があれば教えて下さい。
またVBに限らず、JavaやJavaScript、C#などどのような言語でもいいので、そのような習慣?のある言語があれば教えて下さい。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答12件
0
多分ですが、デバッグがしにくいからかもしれませんね。
単純なTrue False の判定であれば問題ありませんが
戻り値が、数値や文字列の場合に実際に関数から戻ってきている値が
何なのか解り難いと思います。
一度変数に入れておけば、デバッグ時等で解りやすくなると思います。
それぐらいしか、思いつきません。
後は会社の方針ですかね・・・
投稿2015/11/25 08:09
総合スコア366
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
質問のコードでもし直す必要があるとすればむしろBoolean同士を比較しているところではないでしょうか。
If Not fooFunction Then bar = 0 End If
投稿2015/11/25 08:34
総合スコア3541
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C/C++/C#と使ってきましたが、そのようなことは一度も言われたことはありませんし、私自身は何の躊躇もなくif文等で関数を呼び出しています。
ただし、デバッグでステップ実行させたりするときに関数の戻り値を知りたいという理由で、あえて変数に入れてからif文等で使うということはよくあります。
コードを見たところ、VBでは関数呼び出しなのか変数なのか判りづらいですね。もしかしたら先輩はVB特有のコードの見づらさを気にしているのかもしれません。引数がなくても括弧を付ければいいような気もしますが。私なら括弧を付けます。
投稿2015/11/25 08:15
総合スコア5944
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2015/11/25 10:02
編集2015/11/25 10:03総合スコア53
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
あんまりダメな理由は思い浮かびませんが、例えば
- そのプロジェクトのコーディング規約ではそうなっている(そうなっていた)
- ループの中で毎回関数が動くとコストがかかるので避けたい
- 一時的にでも変数に格納しないとデバッグの時に内容がわからないので嫌だ
あたりは可能性としてありえるでしょうか。
仰る通り「習慣」や「コーディング規約」に属するものなので、それを採用している人しか理由はわからず、採用している人が理由がわからない場合(理由はわからないが代々受け継がれている。既存のプロダクトとの統一のためだけに採用している)は「なぜ」というのは永久にわからない可能性すらありますね。
投稿2015/11/25 08:20
総合スコア18778
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
関数の戻り値をデバッガで確認したいことって結構あります。
その時、確認しづらいからやめた方がよいよって意味かも知れません。
特にC/C++ではboolでなくてもif文の中にかけるので、時々はまります。
でも、if文の中で関数呼び出ししたからといって可読性が劣化することはあまりないので、人に強制するようなルールではないと感じます。
投稿2015/11/25 08:18
総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
VBのように関数呼出で引数がない場合にカッコを省略できる言語の場合は、カッコがないと変数なのか関数なのかわかりにくいでしょうね。ほかには思いつかないですし、私はifの中で関数を使ってもまったく違和感は感じません。
投稿2015/11/25 08:06

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHPの場合ですが、入力値とかの変数に値が設定されているかを判定するためにisset関数を使用しますが、普通に以下のような書き方をします
その先輩が、なぜそのような書き方をするのか、理由を聞いてみてはいかがでしょうか?
PHP
1if (!isset(static::$_config[$name])) { 2 return false; 3}
投稿2015/11/25 08:04
編集2015/11/25 08:07総合スコア924
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
完了済みとはなっていますが、ベストアンサーにケチをつけたので他の方から上がっていない可能性を上げておきます
fooFunctionの関数内で判断する処理だけでなく値が変化するような処理が入っている場合は、その都度呼び出していると結果が変わる可能性があります
その場合は一度変数で受けてから変数の方を使います
例えばログ出力が必要な場合に実際に必要なタイミングで呼び、さらにログ出力でもう一度呼ぶと結果が変わってる、もしくは結果に変化はないものの、他で使用する値が変わってしまうといった場合に、
例えばテスト環境(開発環境が入っていないところ)での動作確認でログ出力させると動きがおかしくなるといった可能性もありますので、fooFunctionの関数の内部処理によってはIFの条件で直接使用してはいけないかもしれません
そう言った問題が全くなく、関数の処理コストも軽いのであるならば問題ないと思います
投稿2015/12/01 11:58
総合スコア1367
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私はあまり意識せずにif文中に関数入れていますが、
以下のような問題が発生する場合もあります。
If funcA() = True Or funcB() = True Then
.....
End If
funcA() がTrue を返した時、funcB() は
評価されるのかどうか、はっきりしません。
(funcB() を評価しなくてもこのIf は Trueなので)
funcA 、funcB がどちらが先に評価されるか、という話もあります。
言語やコンパイラに依存するかもしれませんし。
投稿2015/11/25 08:37
総合スコア674
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
自己解決
見た目の問題、デバッグのしづらさの問題、あとは謎の習慣の3説くらいですかね。
先輩にはそのように伝えてみます。
皆さん、回答ありがとうございました。
投稿2015/11/25 08:27
総合スコア31
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/01 10:50
2015/12/01 11:09
2015/12/01 11:48

0
関数の戻り値を判断する記法で、いけない理由はないと思います。
あるとするなら、戻り値の型と右辺の型が合っていないということでしょうか。
その先輩に具体的な理由を聞いてみてはいかがでしょう。
投稿2015/11/25 08:07
総合スコア124
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。