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

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

ただいまの
回答率

90.51%

  • if

    209questions

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

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

解決済

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 603

ametyan

score 8

例えば変数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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • num79kill

    2018/05/14 07:56

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

    キャンセル

回答 6

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 08:00

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

    キャンセル

  • 2018/05/14 11:03

    >後から、読む人を混乱させる記述だと思っています。
    その通りだと思います。「なぜそう書いたのか?」を考えて迷います。

    基本は「仕様の通りに書く」、ですが
    >10以上の場合は処理A、10より小さい場合は処理B ならば パターン1
    この記述自体が変です。
    これを書いた人に、その意図を確認しましょう。

    キャンセル

  • 2018/05/14 19:09

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 12:59

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

    キャンセル

  • 2018/05/14 19:12

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

    キャンセル

checkベストアンサー

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 19:12

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 19:10

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

    やはりパターン1は変な感じがします。

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 19:13

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 13:50 編集

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

    キャンセル

  • 2018/05/14 13:57

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

    キャンセル

  • 2018/05/14 13:58

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

    キャンセル

  • 2018/05/14 19:15

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

    キャンセル

  • 2018/05/14 19:17

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

    キャンセル

  • 2018/05/15 09:20

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • if

    209questions

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

  • トップ
  • ifに関する質問
  • if文でその他の条件を記載するときに'else if'を使用するべきか、'else'を使用するべきか