ルール
避ける 使用 の goto
goto goto 文 は 非構造化 制御
フロー が 生み出す コード 理解し する 理解 し 維持が
サポート言語: 45+はじめに
goto コード内の任意の箇所に直接ジャンプするため、自然な実行の流れが断ち切られます。これにより、状態の考察、エラー処理、パフォーマンスの分析が非常に困難になります。gotoを使用したコードの保守は、微妙なバグや意図しない動作のリスクを高めます。構造化された代替手段は、予測可能で読みやすく保守性の高いコードを生成します。
なぜそれが重要なのか
セキュリティ上の影響:構造化されていないジャンプは検証や認可チェックを迂回する可能性があり、機密性の高い操作を潜在的に公開する恐れがある。
パフォーマンスへの影響:複雑なgotoチェーンはプロファイリングと最適化を困難にし、非効率な実行パスのリスクを高める。
コードの保守性:goto文はスパゲッティ状の制御フローを生み出し、安全なリファクタリングや拡張を困難にする。
攻撃対象領域:不適切なジャンプは、意図せず安全でないコードパスを露出させたり、セキュリティ上重要なセクションをスキップしたりする可能性があります。
コード例
非準拠:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
goto end;
}
echo "$i\n";
}
end:
echo "Jumped out!";
?>
誤りの理由:goto文は構造化されていないループを生成し、制御フローの理解や追加ロジックの安全な挿入を困難にします。
✅ 準拠:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
break;
}
echo "$i\n";
}
echo "Jumped out!";
?>
これが重要な理由:forループを使用することで、制御フローが明示的かつ予測可能で保守しやすくなり、かつ同一の動作が維持される。
非準拠:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}なぜ間違っているのか:gotoによるジャンプはエラー処理パスと通常の実行パスを不明瞭にし、追跡や拡張を困難にする。
✅ 準拠:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}これが重要な理由:構造化されたループと早期リターンは、ロジックを明確にし、エラー処理を明示的にし、保守性を向上させます。
結論
構造化され、可読性が高く、安全なコードを維持するため、goto文の使用を避けてください。予測可能な制御フローを実現するには、ループ、関数、早期リターンを活用してください。これにより保守コストが削減され、微妙なバグが防止され、安全な実行経路が確保されます。
.avif)
