- 末記人
- 大ベテラン
- 会議室デビュー日: 2005/12/05
- 投稿数: 233
- お住まい・勤務地: あわにこ
|
投稿日時: 2005-12-18 16:25
最近人のコードを修正することが多くなって、いろいろ人によって癖があるんだなぁと思う今日この頃です。
件のif〜elseの書き方なのですが。
関数の最後にif文がある場合の皆さんのご意見を聞きたいと思い投稿しました。
1.条件が成り立たなかったことを明確に書きたい派?
コード: |
|
if (条件){
[処理]
return true;
}else{
[else処理]
return false;
}
return false; //冗長なのに書く人がいるんですよね。
}
|
2.条件が成り立たなかった場合しか処理は下に流れないじゃん派
コード: |
|
if (条件){
[処理]
return true;
}
[else処理]
return false;
}
|
私の場合は後者なんですが、コードのメンテナンス性とうを考えた場合どちらが有利なのでしょう?
elseに書きたい気持ちもわからなくも無いんですけどね...
|
- R・田中一郎
- ぬし
- 会議室デビュー日: 2005/11/03
- 投稿数: 979
|
投稿日時: 2005-12-18 17:06
引用: |
|
未記入さんの書き込み (2005-12-18 16:25) より:
件のif〜elseの書き方なのですが。
関数の最後にif文がある場合の皆さんのご意見を聞きたいと思い投稿しました。
1.条件が成り立たなかったことを明確に書きたい派?
コード: |
|
if (条件){
[処理]
return true;
}else{
[else処理]
return false;
}
return false; //冗長なのに書く人がいるんですよね。
}
|
2.条件が成り立たなかった場合しか処理は下に流れないじゃん派
コード: |
|
if (条件){
[処理]
return true;
}
[else処理]
return false;
}
|
|
僕は「3.条件が成り立つ場合しか下に流れないじゃん」派です
理由は、次のようにメソッドの続行が不可能な例外パターンは、必ずしも一つじゃないことが多いからです。
コード: |
|
if (いけない条件A){
後始末処理A();
return false;
}
if (いけない条件B){
後始末処理B();
return false;
}
本来の処理();
return true;
}
|
|
- 囚人
- ぬし
- 会議室デビュー日: 2005/08/13
- 投稿数: 1019
|
投稿日時: 2005-12-18 17:12
こんにちは。
その前のコードがどうなっているかによるんですかねぇ。
コード: |
|
if (条件1){
[処理]
return true;
}
・・処理・・
if (条件2){
[処理]
return true;
}
if (条件3){
[処理]
return true;
}
return false;
}
|
else if ももちろん組み合わせる時あり。
コード: |
|
処理…
// 最後に
if (条件){
[処理]
return true;
}else{
[else処理]
return false;
}
}
|
こうかな。1.の「冗長なのに書く人がいるんですよね。」の部分は絶対なしですね。
到達できないコードはなし。
_________________ 囚人のジレンマな日々
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-12-18 17:26
引用: |
|
R・田中一郎さんの書き込み (2005-12-18 17:06) より:
僕は「3.条件が成り立つ場合しか下に流れないじゃん」派です
理由は、次のようにメソッドの続行が不可能な例外パターンは、必ずしも一つじゃないことが多いからです。
|
いわゆる、ガード句ですね。
前提条件によってガード句を使うべきかどうかは変わります。
メソッドに対して単一の条件分岐であれば、ガード句は使いませんが、
複数ある場合はガード句を使うことになるでしょう。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- 末記人
- 大ベテラン
- 会議室デビュー日: 2005/12/05
- 投稿数: 233
- お住まい・勤務地: あわにこ
|
投稿日時: 2005-12-18 17:34
引用: |
|
R・田中一郎さんの書き込み (2005-12-18 17:06) より:
僕は「3.条件が成り立つ場合しか下に流れないじゃん」派です
理由は、次のようにメソッドの続行が不可能な例外パターンは、必ずしも一つじゃないことが多いからです。
|
パラメタチェックなどの処理の場合は大抵このパターンなりますね、見落としていました。
引用: |
|
囚人さんの書き込み (2005-12-18 17:12) より:
else if ももちろん組み合わせる時あり。
コード: |
|
処理…
// 最後に
if (条件){
[処理]
return true;
}else{
[else処理]
return false;
}
}
|
こうかな。1.の「冗長なのに書く人がいるんですよね。」の部分は絶対なしですね。
到達できないコードはなし。
|
冗長なコードは書かない。<やっぱりそうですよね?
統一感が出て綺麗といっている人がいるんですよ。
他にもswitchのcaseは必ず breakで終わらせるとか...(^ ^;
コード: |
|
switch(expr.){
case 1:
[処理];
return value;
break; // <<ここが冗長
〜省略〜
default:
[処理];
break; // <<ここが冗長
}
|
ってな具合ですね。
少し、質問の意図がずれて伝わってしまったようなので、質問文を少し変えます。
【条件にマッチしなかった場合の処理時にelseを使いますか?】が聞きたかったことです。
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-12-18 17:37 ]
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-12-18 17:48
引用: |
|
未記入さんの書き込み (2005-12-18 17:34) より:
統一感が出て綺麗といっている人がいるんですよ。
他にもswitchのcaseは必ず breakで終わらせるとか...(^ ^;
|
「統一感が出て綺麗」という理由ならば大反対ですね。
仕様変更があった場合のフォール スルー回避のために用意するのであれば別です。
フォール スルーは可読性を損なうため、使用するべきではないからです。
(C# でフォール スルーが出来ない理由のひとつでしょう)
引用: |
|
少し、質問の意図がずれて伝わってしまったようなので、質問文を少し変えます。
【条件にマッチしなかった場合の処理時にelseを使いますか?】が聞きたかったことです。
|
「真または偽での処理後に return で制御を返す場合」という前提条件をつけないと、
答えが変わってくると思いますよ。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- R・田中一郎
- ぬし
- 会議室デビュー日: 2005/11/03
- 投稿数: 979
|
投稿日時: 2005-12-19 14:59
引用: |
|
じゃんぬねっとさんの書き込み (2005-12-18 17:26) より:
いわゆる、ガード句ですね。
前提条件によってガード句を使うべきかどうかは変わります。
メソッドに対して単一の条件分岐であれば、ガード句は使いませんが、
複数ある場合はガード句を使うことになるでしょう。
|
ガード句と言うんですね。知りませんでした。
単一の場合って、どんな場合でしょうか?
コード: |
|
private function 明日は雨が降る() as boolean
if (not いつもより蛙がたくさん鳴いている()) then
return (false)
end if
return (true)
end function
|
こういう場合ですか?
その場合は、
コード: |
|
private function 明日は雨が降る() as boolean
return (いつもより蛙がたくさん鳴いている())
end function
|
こう書いたほうがわかりやすいですね。
|
- おっきー
- 大ベテラン
- 会議室デビュー日: 2003/05/01
- 投稿数: 104
|
投稿日時: 2005-12-19 15:24
java だと、以下の記述はエラーになりますね。
return の後は何も記述できません。
引用: |
|
未記入さんの書き込み (2005-12-18 17:34) より:
他にもswitchのcaseは必ず breakで終わらせるとか...(^ ^;
コード: |
|
switch(expr.){
case 1:
[処理];
return value;
break; // <<ここが冗長
〜省略〜
default:
[処理];
break; // <<ここが冗長
}
|
ってな具合ですね。
|
|