Это только что пришло в голову: как мне выйти из заявления if
? У меня длинное выражение if, но есть одна ситуация, когда я могу выйти из него на раннем этапе.
В цикле я могу сделать это:
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
был завершен досрочно - очень похоже на использование last
или next
в while
или for
цикл для выхода из цикла.
Мне понравилось mpapec решение использовать ярлык - даже если я не использую сам ярлык. Этикетка является описанием моего if
:
IF-UNDER-CONDITION1:
{
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
}
Хотя это не стандартная методика кодирования, поток кода достаточно очевиден, чтобы типичный низкоуровневый разработчик Perl (который должен поддерживать этот код после того, как я ухожу) мог выяснить, что делает код и поддерживать его. Они могут даже узнать что-то в процессе.