最近、多くの人が「後藤」という一言だけを言ったと非難しました。
なぜそんなに厄介な言葉だと思われるのだろうか。
このトピックに関する以前のいくつかの議論を知っていますが、それは私を納得させません-答えのいくつかは、説明しようとさえせずに「悪い」と言っているだけで、PHPやIMOのようなスクリプト言語には関係のない理由をもたらします。
とにかく、私は非常に特別な質問をするつもりです:比較してステートメントをし
ましょう。
私の意見では、どちらも同じことをします。ある条件に基づいてコードの一部の実行を回避することです。
もしそうなら-後藤と同じ欠点がありますか?(もしあれば)?
そうでない場合-それは違いです。 goto
throw
throw
次の2つのコードスニペットのコード構造の基本的な概念の違いを理解できる人は、十分な経験がありますか?
これらのコードスニペットに関しては、「理論上」、「一般的」、「ここに素晴らしいXKCDコミックがあります!」ではありません。
なぜ最初のものは素晴らしいと見なされ、後者は最も致命的な罪であると見なされたのですか?
#$a=1;
#$b=2;
/* SNIPPET #1 */
try {
if (!isset($a)) {
throw new Exception('$a is not set');
}
if (!isset($b)) {
throw new Exception('$b is not set');
}
echo '$a + $b = '.($a + $b)."<br>\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br>\n";
}
/* SNIPPET #2 */
if (!isset($a)) {
$message = '$a is not set';
goto end;
}
if (!isset($b)) {
$message = '$b is not set';
goto end;
}
echo '$a + $b = '.($a + $b)."<br>\n";
end:
if (!empty($message)) {
echo 'Caught exception: ', $message, "<br>\n";
}
スパゲッティを作る際にスローがより強力で柔軟であるという事実を私は知っていることに注意してください。それは私にとって主要な違いにはなりません。それは概念ではなく、使用の問題です。
編集
私は多くの人から、最初の例はもっと新しく使うべきだと言われました。
理由:例外は、ビジネスロジックを実装するためではなく、エラーを処理するためにのみ使用する必要があります。
それは賢明に見えます。
したがって、無駄なコードの実行を停止するために残された唯一の方法は、gotoです(while、returnなど、同じ問題ですが実装が難しいいくつかの代替は言うまでもありません)?