ホームページ  >  記事  >  バックエンド開発  >  条件付き for ループに return ステートメントがありません

条件付き for ループに return ステートメントがありません

PHPz
PHPz転載
2024-02-09 12:30:09794ブラウズ

带条件的 for 循环中缺少 return 语句

PHP では、for ループは、コードの一部を繰り返し実行するために使用される一般的な反復構造です。ただし、場合によっては、条件付き for ループに return ステートメントを追加し忘れることがあり、その場合、プログラムが正常に結果を返せなくなります。この場合、PHP エディターの Yuzai は、予期しないエラーを避けるために適切な return ステートメントがループに追加されていることを確認するためにコードを適時にチェックすることをお勧めします。これにより、コードの信頼性と正確性が保証され、プログラムの効率と保守性が向上します。

質問内容

次のコードを書くと、コンパイラが missing return states エラーを生成することに気付きました。:

リーリー

これは、次のコードがエラーなしでコンパイルされた場合です:

リーリー

最初のコードは、メソッドが返らないということはあり得ないので、論理的および技術的には問題ありません。コンパイラがこのエラーを表示する理由はありますか?それとも、何らかの欠落したロジックまたはバグでしょうか?

回避策

@Cerise Limónのコメントを回答に拡張すると、「最初のコードは...技術的に問題ありません」という主張は誤りです。

Go 言語仕様には次のように書かれています:

そしてこれ:

(強調は私が追加しました)

最初の関数のコードを調べると、仕様の次の条件が満たされていないことがわかります。

リーリー

関数には結果パラメータ (int 戻り値) があるため、終了ステートメントで終了する必要がありますが、関数の最後のステートメントは for ステートメント 条件 を伴う、つまり は、仕様で定義されている「終了ステートメント」ではありません。

これは奇妙に思えるかもしれませんが、実際には技術的には正しいです。

報酬資料

では、なぜ 2 番目の関数には問題がないのでしょうか?

リーリー

この例では、関数の最後のステートメントは for です。ここで、 は無条件です。 および は、関数の Break ステートメントを参照しません。 for ループ。これは終了文の言語仕様定義を満たします。

作品にはロジックがあります。

無条件の for ステートメントに break が含まれている場合、ループ が終了する可能性があるため、関数には return ステートメントが必要です。

無条件の

for ステートメント break が含まれていない (そして return ステートメントがない) 場合、ループは実行されません。終了 (少なくとも通常の実行パスの結果としてではなく) 関数の戻り値が必要です)。 また、

break

ステートメントが到達可能かどうかを判断するための制御フロー分析はなく、 ステートメントが存在する必要があるだけであることにも注意してください。たとえば、次のコードでは、break に明らかにアクセスできない場合でも、「戻り値がありません」コンパイル エラーが発生します。 リーリー

以上が条件付き for ループに return ステートメントがありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。