9

重複の可能性:
関数には return ステートメントを 1 つだけ含める必要がありますか?

私の先生は、私が書いたいくつかの Java コードで点数を取りました (私はまだ A を取得しています。これは、私が Java コースで取得した最初の 100% 以外の成績です)。という点ですが、実際のプログラマーの方からアドバイスを頂きたいです。問題のあるコードは次のとおりです。

private char byte2suit(byte val) {
    switch(val) {
        case 0: return 's';
        case 1: return 'c';
        case 2: return 'h';
        case 3: return 'd';
        }
    //fallback value
    return 'h';
    }

私の意見では、これは、戻り値を初期化し、大文字と小文字を代入して (そして行ごとにブレークを追加して) 値を返すよりもはるかに明確です。もちろん、他の人が見るコードでは、私の意見はすべて強力ではないので、複数の return ステートメントを使用する場合、Java (または C/C++) で複数の return ステートメントについてどう思うか知りたいです。 「if (this) return a; else return b;」以上に使用しますか? 声明?複数の return ステートメントを使用しない場合、本当に説得力のある理由を教えてください (上記のコードが読み取り可能であり、私の複数のリターン コーディングの実践の最大範囲である場合、読み取り不能なコードは理由ではありません)。

4

1 に答える 1

14

一部の学者は、関数の最後にある return ステートメントは 1 つだけであるべきだと考えています。彼らは、return ステートメントが複数あると、何らかの形でコードが不純になると考えています。

しかし、ほとんどの言語設計者やプロのプログラマーは、この純粋主義的な見方に同意しません。メソッドが長く複雑な場合、 return ステートメントが複数あると混乱する可能性があります (ただし、この場合は、return ステートメントが複数ある場合よりも大きな問題が発生します)。ただし、多くの場合、複数の return ステートメントを使用すると、コード読みやすくなります。

私が行う1つの変更を除けば、あなたのコードは問題ありません: use default.

switch(val) {
    case 0: return 's';
    case 1: return 'c';
    case 2: return 'h';
    case 3: return 'd';
    default: return 'h';
}
于 2012-10-17T14:14:56.050 に答える