質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

解決済

6回答

1427閲覧

if文でその他の条件を記載するときに'else if'を使用するべきか、'else'を使用するべきか

ametyan

総合スコア43

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

1クリップ

投稿2018/05/13 22:21

例えば変数hogeが10以上の場合は処理A、それ以外の場合は処理Bという条件分岐をコーディングするときに
以下のパターン1、パターン2のどちらの書き方の方がいいのでしょうか?
理由も含めて教えていただきたいです。

■パターン1

if hoge >= 10 処理A else if hoge < 10 処理B

■パターン2

if hoge >= 10 処理A else 処理B

それとも詳細設計書の記述に以下のように合わせるべきでしょうか?
・10以上の場合は処理A、10より小さい場合は処理B ならば パターン1
・10以上の場合は処理A、それ以外の場合は処理B  ならば パターン2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

num79kill

2018/05/13 22:56

どっちでもどっちにもできる
guest

回答6

0

hogeが数値型」という一般的な条件であれば、条件式を2回書かなくてもいいパターン2のほうがいいでしょう(何かで条件の値を書き換える場合に、パターン2では両方書き換えないといけなくなります)。

もし、、たとえばSQLのUNKNOWNのような、「hoge >= 10でもhoge < 10でもない状態」が成立しうるのであれば、両者は意味が違いますので、書き分ける必要があります。

投稿2018/05/14 00:13

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/05/14 03:59

あっ、一般的な言語でもNaNが来た場合はhoge >= 10もhoge < 10もfalseになるか。
ametyan

2018/05/14 10:12

ご回答ありがとうございます。
guest

0

基本はパターン2 でしょう。

パターン1 も良く見ますが、紛らわしいです。
最後が else (単独)になっていないので、その他があるか一瞬、考えます。
後から、読む人を混乱させる記述だと思っています。
実行的には、コンパイラの最適化で消える可能性もありますが、そのまま、コンパイルされた場合、無駄な条件判定が入る可能性もあります。

投稿2018/05/13 22:55

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

num79kill

2018/05/13 23:00

基本的的に最後の  else if は else { if } となるので単独云々だと単独扱いなきが
nob.

2018/05/14 02:03

>後から、読む人を混乱させる記述だと思っています。 その通りだと思います。「なぜそう書いたのか?」を考えて迷います。 基本は「仕様の通りに書く」、ですが >10以上の場合は処理A、10より小さい場合は処理B ならば パターン1 この記述自体が変です。 これを書いた人に、その意図を確認しましょう。
ametyan

2018/05/14 10:09

ご回答ありがとうございます。 読む人の気持ちになってコーディングすることは重要だと思いました。
guest

0

私は以下のようなコードを良く書きます。(今回のパターンだとバカバカしく見えますが。。。)
条件が複雑な時に、意図する処理と想定外の振る舞いが後から見てわかりやすいからです。

if hoge >= 10 処理A else if hoge < 10 処理B else 異常系処理   もしくはログに何か出力する

投稿2018/05/14 03:54

tamina

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

root_jp

2018/05/14 04:51 編集

10以上か、10より小さい、以外のパターンが存在し、それらを全て異常系と見なすのであればこれで正しいと思いますが、2パターンしかない場合にもこのように書くんですか? それか、2パターンしかないと思っていても、もしかしたらそれ以外のパターンが存在するかもしれないという考え方でしょうか?
tamina

2018/05/14 04:57

>>それか、2パターンしかないと思っていても、もしかしたらそれ以外のパターンが存在するかもしれ>>ないという考え方でしょうか? そうです。
tamina

2018/05/14 04:58

どこまで設計済みかも明確になります。
ametyan

2018/05/14 10:15

ご回答ありがとうございます。 2パターン以外に異常系処理を記述するかはメンバーやリーダーに聞いて確認するようにしてみます。
ikapy

2018/05/14 10:17

tamina様に一票。 数理上の数値比較では本件の場合、10以上かそれ以外の2択でしょうが、実際のコンピュータでは何が起こるかわかりません。 特に関数呼び出しの場合、関数で戻りが定義された通りにコードしたらそれ以外が来たことが何度もあります。 問題はテストでパスチェックが難しいのと、上の了解。 性悪説でコードするのがプログラマーにとって「善」だと思っています。 といっても適当なところで妥協しますけど。 そのようなコードを書くコストも安くなってます。
sazi

2018/05/15 00:20

VBAでhogeがnullなら確実にelseは発生します。
guest

0

二分岐でしかないなら、else if は使いません。仮に詳細設計書が
「10以上の場合は処理A、10より小さい場合は処理B」
などと書いているなら、そもそも詳細設計書を書き直させますね(w

例えばですが、これが指が滑って「10以上の場合は処理A、1より小さい場合は処理B」などと書かれて、そのまま実装されたら(世の中には文字通りに「設計書の通りに」しかコーディングしない人はいるのです。そもそもその設計書に不備があるとか考えない人が)洒落になりません。

投稿2018/05/14 01:59

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ametyan

2018/05/14 10:13

ご回答ありがとうございます。
guest

0

ベストアンサー

else ifを書いたならばelseをなるべく書くべき。
switchを書いたならばdefaultをなるべく書くべき。
elseのないif ~ else ifは何か漏れてる臭いがする。
2択であるならば、else ifを使う意味はなく、パターン2でしょう。

10以上の場合は処理A、10より小さい場合は処理B
10以上の場合は処理A、それ以外の場合は処理B

どちらも2択のことを言っているので、設計書の表現に関わらずパターン2にした方がいいと思います。

投稿2018/05/14 01:51

編集2018/05/14 01:52
root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ametyan

2018/05/14 10:12

ご回答ありがとうございます。 >else ifを書いたならばelseをなるべく書くべき。 私もそう思いました。
guest

0

個人的にパターン1はなんかきもちわるい印象かなあ。
「例えば変数hogeが10以上の場合は処理A、それ以外の場合は処理Bという条件分岐をコーディング」
を素直に実装したらパターン2になると思います。

あと、条件が増えた場合にパターン1はバグりやすい気がする。

ちなみに、コーディング規約みたいなんはないのでしょうか?

投稿2018/05/13 23:53

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ametyan

2018/05/14 10:10

ご回答ありがとうございます。 ちょっと疑問に思ったことなので、コーディング既約とかは特にないです。 やはりパターン1は変な感じがします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問