教えて!gooにおける不適切な投稿への対応について

if文で条件文を作るときに、どういう風に作れば最適なのか考えています。

「男」か「女」かを判断する時のif文として、データ的にどちらかしかないので、以下のようになると思います。

---------------------------
if 「男」 {
  処理1
} else if 「女」 {
  処理2
}
---------------------------

仕様的にもどちらかしかないのですが、こういう場合でもelseを付けた方が良いのでしょうか?

---------------------------
if 「男」 {
  処理1
} else if 「女」 {
  処理2
} else {
  エラー処理
}
---------------------------

後々の仕様変更で、判断できない場合は「不明」などが追加される可能性もあると思います。
その場合に、仕様変更に対応してないとエラー処理が動くようにしておくべきでしょうか?

みなさんは、必ずelseを書いてますか?

gooドクター

A 回答 (8件)

こんにちわ。



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

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

お礼日時:2002/11/20 19:21

状況によります。



1.男女を示すデータが検証済み(他の処理から渡されるなど)の場合
if (男) { ... } else { ... }

2.男女を示すデータが未検証の可能性がある場合
if (男) { ... } else if (女) { ... } else { ... }

通常、「データチェック」と「データ処理本体」は分離する方が効率がよく、メンテナンス性も向上します。
・同じチェックを何度も記述してしまうことがない
・チェック部分がひとまとめにできる

ですから、業務で使うなら圧倒的に2が多いでしょう。
しかし、『必ずどこかで』チェックは行います。
    • good
    • 0

if 「男」 {


  処理1
} else {
  処理2
}

私ならこんな感じにします。仕事柄処理速度を優先するので・・・
else ifでは再度比較を行うことになるのでその分遅くなります。
結局その変数に「男」or「女」以外の値が入る可能性の
問題なのでしょう。

BOOLだとVC++のMFCのスケルトンコードなどは
if (TRUE) {
  処理1
} else {
  処理2
}
ってなってますね。
    • good
    • 0

私だったら、後者ですね。


男と女のふたつしかないというのであれば、
それ以外の値が飛んできたら、システムエラーで、強制終了させます。
仕様で男と女しかなかったのに、途中で、「不明」とかいう値が追加されるかもしれないし・・・

エラー処理って、考えたら、キリがないですよね。
でも、細かくするのが、丁寧なプログラムだと思いますよ。

不正な値が後続処理へ渡るのが一番問題です。
    • good
    • 0
この回答へのお礼

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

ですね。

お礼日時:2002/11/20 23:40

結局は「判定すべきデータ」がどれだけ信頼できるかと言う事ですね。


絶対に、2値論理が保証されるならif else でいいし
3値論理になりそうならif else else が必要でしょう。

後々の仕様変更も、その可能性の強さで判断すべきでしょう。
仕様変更云々を言い出すと本当はキリがありません。
仕様変更に強い設計や組み方は必要ですが。

異常対策のelseが必要か、仕様変更に対して何をしておけばよいか
経験で覚える部分が多いです。頑張って下さい。
    • good
    • 0
この回答へのお礼

> 異常対策のelseが必要か、仕様変更に対して何をしておけばよいか
> 経験で覚える部分が多いです。頑張って下さい。

社内でプログラム標準書を作成しようと思ってるのですが、こういうところもまとめて行きたいと思っています。
後輩に「何で?」と聞かれても答えられるようにしておかなくては・・・

お礼日時:2002/11/20 23:39

こんにちは、honiyonです。



  muyoshidさんが回答して頂いた内容が最も良い対処方法になります。

  なので、「こういう考え方もあるよ」という回答をします。
  例えば、1か0で、男・女を表現する場合、「1なら男、0なら女、それ以外は男と仮定する。」という仕様も考えられます。

  今回の性別の処理、その他大抵の処理においては、muyoshidさんの方法が最も最適ですが、場合により上記のような「それ以外は○○と仮定」が好都合な時もあります。
  逐次入力の再確認を求める事が出来ず、ある程度予測に基づく処理でも悪影響がない場合など(^^;

  参考になれば幸いです(..  
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/11/20 23:37

if文は、真偽を判定し、それにより処理する命令です。



たとえば、性別に何も入ってない場合があったとしましょう。
そのときは、エラーとしたいならば、2番目の記述のようになると思います。
女としたいならば、1番目の記述ですね。
文法的には、使えないとかいうことはないです。
ただ、それが仕様としてあってるのかどうかですね。
分岐が多いようでしたら、case文というのもあるでしょう。
    • good
    • 0
この回答へのお礼

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

やはりelseをつけます。

お礼日時:2002/11/20 23:26

その条件文がどのような場面で使われるかによるかと思います。



ユーザーからの入力チェックを行う場面であれば、elseは必要だと思いますし、確実に「男」or「女」の値をとりえる場面(内部でコード化され既にチェック済みなど)であれば必要なように思えます。

また仕様変更の件ですが、現在の仕様が「仕様変更に対応してないとエラー処理が動く」であればelseが必要かと思います。

いかがでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/11/20 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング