• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件文でelseはつけるべき?)

if文で条件文を作るときの最適な方法は?

このQ&Aのポイント
  • if文で条件文を作る際に、どのように書くのが最適なのか悩んでいます。
  • 例えば、性別を判断する場合、データ的には男か女しかありませんが、将来的には不明な値が追加される可能性があります。
  • その場合、elseを付けるべきか、エラー処理を追加するべきか検討しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 以前仕事で、C のプログラムを大量に作っていました。 その時の経験ですが、予定外の値が与えられた時の処理も必ず考慮して 作成しておくべきです。 チェックするパラメータの数にもよりますが、パラメータ数が多い ようであれば、事前に与えられたパラメータの範囲を全てチェックして しまい、その後にパラメータの値によって処理を切り分ける事を お奨めします。 → その方が、パラメータチェックの部分を集約できますので後々の   修正が楽になります。

rally
質問者

お礼

どちらが最適か、と聞かれると、やはりエラーチェックは、やった方が良いですね。 実装で心がけるのと同時に、設計のときにも注意するようにします。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.8

状況によります。 1.男女を示すデータが検証済み(他の処理から渡されるなど)の場合 if (男) { ... } else { ... } 2.男女を示すデータが未検証の可能性がある場合 if (男) { ... } else if (女) { ... } else { ... } 通常、「データチェック」と「データ処理本体」は分離する方が効率がよく、メンテナンス性も向上します。 ・同じチェックを何度も記述してしまうことがない ・チェック部分がひとまとめにできる ですから、業務で使うなら圧倒的に2が多いでしょう。 しかし、『必ずどこかで』チェックは行います。

すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.7

if 「男」 {   処理1 } else {   処理2 } 私ならこんな感じにします。仕事柄処理速度を優先するので・・・ else ifでは再度比較を行うことになるのでその分遅くなります。 結局その変数に「男」or「女」以外の値が入る可能性の 問題なのでしょう。 BOOLだとVC++のMFCのスケルトンコードなどは if (TRUE) {   処理1 } else {   処理2 } ってなってますね。

すると、全ての回答が全文表示されます。
回答No.6

私だったら、後者ですね。 男と女のふたつしかないというのであれば、 それ以外の値が飛んできたら、システムエラーで、強制終了させます。 仕様で男と女しかなかったのに、途中で、「不明」とかいう値が追加されるかもしれないし・・・ エラー処理って、考えたら、キリがないですよね。 でも、細かくするのが、丁寧なプログラムだと思いますよ。 不正な値が後続処理へ渡るのが一番問題です。

rally
質問者

お礼

> 不正な値が後続処理へ渡るのが一番問題です。 ですね。

すると、全ての回答が全文表示されます。
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.5

結局は「判定すべきデータ」がどれだけ信頼できるかと言う事ですね。 絶対に、2値論理が保証されるならif else でいいし 3値論理になりそうならif else else が必要でしょう。 後々の仕様変更も、その可能性の強さで判断すべきでしょう。 仕様変更云々を言い出すと本当はキリがありません。 仕様変更に強い設計や組み方は必要ですが。 異常対策のelseが必要か、仕様変更に対して何をしておけばよいか 経験で覚える部分が多いです。頑張って下さい。

rally
質問者

お礼

> 異常対策のelseが必要か、仕様変更に対して何をしておけばよいか > 経験で覚える部分が多いです。頑張って下さい。 社内でプログラム標準書を作成しようと思ってるのですが、こういうところもまとめて行きたいと思っています。 後輩に「何で?」と聞かれても答えられるようにしておかなくては・・・

すると、全ての回答が全文表示されます。
  • honiyon
  • ベストアンサー率37% (331/872)
回答No.4

こんにちは、honiyonです。   muyoshidさんが回答して頂いた内容が最も良い対処方法になります。   なので、「こういう考え方もあるよ」という回答をします。   例えば、1か0で、男・女を表現する場合、「1なら男、0なら女、それ以外は男と仮定する。」という仕様も考えられます。   今回の性別の処理、その他大抵の処理においては、muyoshidさんの方法が最も最適ですが、場合により上記のような「それ以外は○○と仮定」が好都合な時もあります。   逐次入力の再確認を求める事が出来ず、ある程度予測に基づく処理でも悪影響がない場合など(^^;   参考になれば幸いです(..  

rally
質問者

お礼

とにかく、どの値が来ても必ずどれかの制御を通るように対応しておく方が良いってことですね。

すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.3

if文は、真偽を判定し、それにより処理する命令です。 たとえば、性別に何も入ってない場合があったとしましょう。 そのときは、エラーとしたいならば、2番目の記述のようになると思います。 女としたいならば、1番目の記述ですね。 文法的には、使えないとかいうことはないです。 ただ、それが仕様としてあってるのかどうかですね。 分岐が多いようでしたら、case文というのもあるでしょう。

rally
質問者

お礼

今回の質問は設計するにあたって、どうすればいいのか?っていうのもあります。 今はいいけど、後々・・・。 やはりelseをつけます。

すると、全ての回答が全文表示されます。
回答No.2

その条件文がどのような場面で使われるかによるかと思います。 ユーザーからの入力チェックを行う場面であれば、elseは必要だと思いますし、確実に「男」or「女」の値をとりえる場面(内部でコード化され既にチェック済みなど)であれば必要なように思えます。 また仕様変更の件ですが、現在の仕様が「仕様変更に対応してないとエラー処理が動く」であればelseが必要かと思います。 いかがでしょう?

rally
質問者

お礼

仕様的には「男」「女」は無いと考えていいのですが、仕様変更を見据えてelseを書くことにします。

すると、全ての回答が全文表示されます。

関連するQ&A