
if文で条件文を作るときに、どういう風に作れば最適なのか考えています。
「男」か「女」かを判断する時のif文として、データ的にどちらかしかないので、以下のようになると思います。
---------------------------
if 「男」 {
処理1
} else if 「女」 {
処理2
}
---------------------------
仕様的にもどちらかしかないのですが、こういう場合でもelseを付けた方が良いのでしょうか?
---------------------------
if 「男」 {
処理1
} else if 「女」 {
処理2
} else {
エラー処理
}
---------------------------
後々の仕様変更で、判断できない場合は「不明」などが追加される可能性もあると思います。
その場合に、仕様変更に対応してないとエラー処理が動くようにしておくべきでしょうか?
みなさんは、必ずelseを書いてますか?
No.1ベストアンサー
- 回答日時:
こんにちわ。
以前仕事で、C のプログラムを大量に作っていました。
その時の経験ですが、予定外の値が与えられた時の処理も必ず考慮して
作成しておくべきです。
チェックするパラメータの数にもよりますが、パラメータ数が多い
ようであれば、事前に与えられたパラメータの範囲を全てチェックして
しまい、その後にパラメータの値によって処理を切り分ける事を
お奨めします。
→ その方が、パラメータチェックの部分を集約できますので後々の
修正が楽になります。
どちらが最適か、と聞かれると、やはりエラーチェックは、やった方が良いですね。
実装で心がけるのと同時に、設計のときにも注意するようにします。
No.8
- 回答日時:
状況によります。
1.男女を示すデータが検証済み(他の処理から渡されるなど)の場合
if (男) { ... } else { ... }
2.男女を示すデータが未検証の可能性がある場合
if (男) { ... } else if (女) { ... } else { ... }
通常、「データチェック」と「データ処理本体」は分離する方が効率がよく、メンテナンス性も向上します。
・同じチェックを何度も記述してしまうことがない
・チェック部分がひとまとめにできる
ですから、業務で使うなら圧倒的に2が多いでしょう。
しかし、『必ずどこかで』チェックは行います。
No.7
- 回答日時:
if 「男」 {
処理1
} else {
処理2
}
私ならこんな感じにします。仕事柄処理速度を優先するので・・・
else ifでは再度比較を行うことになるのでその分遅くなります。
結局その変数に「男」or「女」以外の値が入る可能性の
問題なのでしょう。
BOOLだとVC++のMFCのスケルトンコードなどは
if (TRUE) {
処理1
} else {
処理2
}
ってなってますね。
No.6
- 回答日時:
私だったら、後者ですね。
男と女のふたつしかないというのであれば、
それ以外の値が飛んできたら、システムエラーで、強制終了させます。
仕様で男と女しかなかったのに、途中で、「不明」とかいう値が追加されるかもしれないし・・・
エラー処理って、考えたら、キリがないですよね。
でも、細かくするのが、丁寧なプログラムだと思いますよ。
不正な値が後続処理へ渡るのが一番問題です。
No.5
- 回答日時:
結局は「判定すべきデータ」がどれだけ信頼できるかと言う事ですね。
絶対に、2値論理が保証されるならif else でいいし
3値論理になりそうならif else else が必要でしょう。
後々の仕様変更も、その可能性の強さで判断すべきでしょう。
仕様変更云々を言い出すと本当はキリがありません。
仕様変更に強い設計や組み方は必要ですが。
異常対策のelseが必要か、仕様変更に対して何をしておけばよいか
経験で覚える部分が多いです。頑張って下さい。
> 異常対策のelseが必要か、仕様変更に対して何をしておけばよいか
> 経験で覚える部分が多いです。頑張って下さい。
社内でプログラム標準書を作成しようと思ってるのですが、こういうところもまとめて行きたいと思っています。
後輩に「何で?」と聞かれても答えられるようにしておかなくては・・・
No.4
- 回答日時:
こんにちは、honiyonです。
muyoshidさんが回答して頂いた内容が最も良い対処方法になります。
なので、「こういう考え方もあるよ」という回答をします。
例えば、1か0で、男・女を表現する場合、「1なら男、0なら女、それ以外は男と仮定する。」という仕様も考えられます。
今回の性別の処理、その他大抵の処理においては、muyoshidさんの方法が最も最適ですが、場合により上記のような「それ以外は○○と仮定」が好都合な時もあります。
逐次入力の再確認を求める事が出来ず、ある程度予測に基づく処理でも悪影響がない場合など(^^;
参考になれば幸いです(..
No.3
- 回答日時:
if文は、真偽を判定し、それにより処理する命令です。
たとえば、性別に何も入ってない場合があったとしましょう。
そのときは、エラーとしたいならば、2番目の記述のようになると思います。
女としたいならば、1番目の記述ですね。
文法的には、使えないとかいうことはないです。
ただ、それが仕様としてあってるのかどうかですね。
分岐が多いようでしたら、case文というのもあるでしょう。
今回の質問は設計するにあたって、どうすればいいのか?っていうのもあります。
今はいいけど、後々・・・。
やはりelseをつけます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- JavaScript jsで、配列内の文章を改行する際どのようにすればいいですか。 3 2022/07/05 20:40
- Java Javaプログラミングの質問になります。 ボタンを押下した時に画面遷移して 画面から戻ってきた時のi 1 2023/06/26 07:50
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private subモジュールを他のモ...
-
【C#/Java?】try-catchでcatch...
-
VBAの進捗状況をリアルタイ...
-
シグナル 6(SIGABRT)とは?
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
C#でタイトルバーを自動的に隠...
-
“try/catch”と“if/else”
-
VB.NET SPRED(チェックボック...
-
マクロで、次のコードへ行く前...
-
VBAでBook読み込み時の非表示方...
-
エクセル VBAで複数セル選択時...
-
条件文でelseはつけるべき?
-
特定のファイルを他のプロセス...
-
jspのiterateのindexidについて
-
IF文に時間(何時から何時ま...
-
LoadPicture のオートメーショ...
-
Word VBA。各マクロの間に待ち...
-
順番に処理させたい
-
プログラムのコードの書き方に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
ExcelのVBAで、選択したファイ...
-
【C#】Page_Loadさせない方法に...
-
StatusStripの表示が更新されな...
-
途中で処理を中断させたい (ア...
-
エクセル VBAで複数セル選択時...
-
Functionで戻り値を複数返す方法
-
VBAでBook読み込み時の非表示方...
-
VBA 複数の行を高速で削除する...
おすすめ情報