Почему «последний» называется «последним» в Perl?
-
06-07-2019 - |
Вопрос
Какова историческая причина того, что last
называется в Perl, а не в break
, как в C?
На дизайн Perl повлиял C (в дополнение к awk, sed и sh - см. справочную страницу ниже), поэтому, должно быть, были некоторые причины, по которым мы не следовали привычному именованию C / стиля break / last. р>
Немного истории из справочной страницы Perl 1.000 (выпущена 18 декабря 1987 г.):
[Perl] сочетает в себе (по мнению автора, в любом случае) некоторые из лучших функций C, sed, awk и sh, поэтому людям, знакомым с этими языками, должно быть не сложно с этим. (Историки языка также отметят некоторые остатки csh, Pascal и даже BASIC | PLUS.)
Решение
Семантика 'break' или 'last' определяется языком (в данном случае Perl), не вами.
Почему бы не думать о "последнем" как о " последнее утверждение, чтобы бежать за петля & Quot;. р>
Меня всегда удивляло, что оператор 'continue' в 'C' запускает следующий проход цикла. Это безусловно, странное использование Понятие «продолжить». Но это семантика 'C', поэтому я принимаю это.
При попытке сопоставить концепции программирования в единый Английские слова с существующим значением всегда будет какая-то несоответствия странности
источник р>
Плюс, Ларри Уолл немного странный. Вы видели его фотографию? Р>
(источник: wired.com )
Другие советы
Я ожидаю, что это потому, что Perl был создан лингвистом, а не программистом. При обычном использовании английского языка концепция объявления о том, что вы завершили свой последний проход через цикл, более тесно связана со словом «последний». (" это последний проход "), чем на слово " break " ( break цикла »
Термин «последний» имеет больше смысла, когда вы помните, что можете использовать его не только с непосредственным цикличным управлением. Вы можете применить его к помеченным блокам на один или несколько уровней выше блок, в котором он находится:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
Это выглядит более естественно, чтобы сказать «последний» на английском, когда вы читаете его как " последнюю строку, если она соответствует ... ".
Есть еще одна причина, которую вы могли бы рассмотреть:
Last делает больше, чем просто управление циклом.
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
Последний как таковой - это общий механизм управления потоком, не ограниченный циклами. Хотя, конечно, вы можете обобщить вышесказанное как цикл, который выполняется не более 1 раза, отсутствие цикла для меня указывает на «Break? Из чего мы вырываемся? & Quot;
Вместо этого я думаю о last
" as " Перейти к позиции последней скобки " ;, которая для этой цели более семантически чувствительна. Р>
Я задавал тот же вопрос Дамиану Конвею по поводу say
. В Perl 6 будет введено say
, которое представляет собой не что иное, как print
, которое автоматически добавляет новую строку. Мой вопрос заключался в том, почему бы просто не использовать echo
, потому что именно это echo
делает в Bash (и, вероятно, в другом месте).
Он ответил: echo
на 33% длиннее, чем скажем
.
У него есть точка там. :) Р>
Потому что он идет до последнего цикла. И потому что Ларри Уолл был странным парнем.