if
これがちょうど出てきました:ステートメントから抜け出すにはどうすればよいですか?長い if 文がありますが、早い段階で抜け出せる状況が 1 つあります。
ループでこれを行うことができます:
while (something ) {
last if $some_condition;
blah, blah, blah
...
}
しかし、if文で同じことができますか?
if ( some_condition ) {
blah, blah, blah
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
ブロック内にステートメントを配置できることはわかってif
います。その後、ブロックから抜け出すことができます。
{
if ( some_condition ) {
...
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
}
または、サブルーチンを作成することもできます (これはおそらくプログラム的に優れています)。
if ( some_condition ) {
run_subroutine();
}
sub run_subroutine {
blah, blah, blah
return if $some_other_condition;
blah, blah, blah
...
}
しかし、if
状態を終了する方法はありますか?
解像度
私が誰かのコードを手伝っていたので、質問が出てきました。かなり長いif
ステートメントの中に、他のいくつかのif
ステートメントが埋め込まれていました。コードは次のようになります。
if ( $condition1 ) {
blah, blah, blah;
if ( not $condition2 ) {
blah, blah, blah;
if ( not $condition3 ) {
blah, blah, blah;
}
}
}
これを行うことで、全体が読みやすくなると思いました:
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
これは、ステートメントの通常の流れif
が標準的であることを示していますが、特定の条件下では、if
ステートメントが早期に終了したことを示しています。これは、orループでlast
orを使用してループを終了するのと同じです。next
while
for
ラベル自体を使用しなくても、ラベルを使用するmpapec のソリューションが気に入りました。ラベルは my の説明ですif
:
IF-UNDER-CONDITION1:
{
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
}
これは標準的なコーディング手法ではありませんが、コードの流れは明らかなので、典型的な低レベルの Perl 開発者 (私が離れた後にこのコードを保守する必要がある開発者) は、コードが何を行っているかを理解し、保守することができます。 . その過程で何かを学ぶことさえあるかもしれません。