アカウント名:
パスワード:
たとえば3つの逐次処理があって、エラーなら次に進まないとすると、gotoなしだとif (処理1が成功) { if (処理2が成功) { if (処理3が成功) { } }}となって逐次処理なのにネストっぽくなってしまう。ホントの条件分岐やループがあったら取り返しの付かない深さに。
if (処理1が失敗) { goto エラー終了}if (処理2が失敗) { goto エラー終了}if (処理3が失敗) { goto エラー終了}
のほうがやりたいことがストレートに書ける気がするんだ。実際、今回のコードもこんな感じ。
個人的には、そういう時はメソッドを分けてしまうな。
BOOL funcA(){ if(!funcB() ){ // エラー処理 return FALSE; } return TRUE;}
BOOL funcB(){ if (処理1が失敗) { return FALSE; } if (処理2が失敗) { return FALSE; } if (処理3が失敗) { return FALSE; } return TRUE;}
それか、エラー処理をメソッド化しておいて、それを呼んでreturnかな。
BOOL funcA(){ if (処理1が失敗) { errorReport(); return FALSE; } if (処理2が失敗) { errorReport(); return FALSE; } if (処理3が失敗) { errorReport(); return FALSE; } return TRUE;}void errorReport(){ //エラー処理}
funcA()の後始末が別の関数になるのは抵抗あるなぁ。errorReport()が他所からも呼べる状態なのも。エラー処理はgoto使ってもfuncA()に入れておいたほうがカプセル化という点で優位な気が。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
goto 使う派 (スコア:0)
たとえば3つの逐次処理があって、エラーなら次に進まないとすると、gotoなしだと
if (処理1が成功) {
if (処理2が成功) {
if (処理3が成功) {
}
}
}
となって逐次処理なのにネストっぽくなってしまう。
ホントの条件分岐やループがあったら取り返しの付かない深さに。
if (処理1が失敗) {
goto エラー終了
}
if (処理2が失敗) {
goto エラー終了
}
if (処理3が失敗) {
goto エラー終了
}
のほうがやりたいことがストレートに書ける気がするんだ。
実際、今回のコードもこんな感じ。
Re:goto 使う派 (スコア:0)
個人的には、そういう時はメソッドを分けてしまうな。
BOOL funcA()
{
if(!funcB() ){
// エラー処理
return FALSE;
}
return TRUE;
}
BOOL funcB()
{
if (処理1が失敗) {
return FALSE;
}
if (処理2が失敗) {
return FALSE;
}
if (処理3が失敗) {
return FALSE;
}
return TRUE;
}
それか、エラー処理をメソッド化しておいて、それを呼んでreturnかな。
BOOL funcA()
{
if (処理1が失敗) {
errorReport();
return FALSE;
}
if (処理2が失敗) {
errorReport();
return FALSE;
}
if (処理3が失敗) {
errorReport();
return FALSE;
}
return TRUE;
}
void errorReport()
{
//エラー処理
}
Re: (スコア:0)
funcA()の後始末が別の関数になるのは抵抗あるなぁ。
errorReport()が他所からも呼べる状態なのも。
エラー処理はgoto使ってもfuncA()に入れておいたほうがカプセル化という点で優位な気が。