Почему «последний» называется «последним» в Perl? - PullRequest
12 голосов
/ 29 ноября 2009

Какова историческая причина того, что last называется в Perl, а не break, как в C?

На дизайн Perl повлиял C (в дополнение к awk, sed и sh - см. Справочную страницу ниже), поэтому, должно быть, были некоторые причины, по которым мы не следовали привычному именованию в стиле C break / last. 1005 *

Немного истории из справочной страницы Perl 1.000 (выпущена 18 декабря 1987 г.):

[Perl] сочетает в себе (по мнению автора, в любом случае) некоторые из лучших функций C, sed, awk и sh, поэтому людям, знакомым с этими языками, не составит труда с этим справиться. (Историки языка также отметят некоторые остатки csh, Pascal и даже BASIC | PLUS.)

Ответы [ 6 ]

33 голосов
/ 29 ноября 2009

Семантика 'break' или 'last' определяется языком (в данном случае Perl), не вами.

Почему бы не думать о «последнем» как о «это последнее утверждение, чтобы бежать за петля».

Мне всегда казалось странным, что оператор 'continue' в 'C' запускает следующий проход цикла. Это безусловно, странное использование Понятие «продолжить». Но это семантика 'C', поэтому я принимаю это.

При попытке сопоставить концепции программирования в единый Английские слова с существующим значением всегда будет какая-то несоответствия странности

Источник

Плюс, Ларри Уолл немного странный. Вы видели его фотографию?

Larry Wall
(источник: wired.com )

17 голосов
/ 29 ноября 2009

Я ожидаю, что это потому, что Perl был создан лингвистом, а не программистом. При обычном использовании английского языка концепция объявления о том, что вы завершили свой последний проход через цикл, более тесно связана со словом «последний» («это последний проход»), чем со словом «разрыв». "(" break the loop "?" break out of the loop "? - даже не ясно, как" break "предназначен для выхода из цикла).

14 голосов
/ 29 ноября 2009

Термин «последний» имеет больше смысла, когда вы помните, что можете использовать его не только с непосредственным цикличным управлением. Вы можете применить его к помеченным блокам на один или несколько уровней выше блок в котором он находится:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }

Считается более естественным сказать «последний» на английском, когда вы читаете его как «последняя строка, если она соответствует ...».

10 голосов
/ 29 ноября 2009

Есть еще одна причина, по которой вы могли бы рассмотреть:

Последнее делает больше, чем просто циклическое управление.

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}

Последний как таковой - это общий механизм управления потоком, не ограниченный контурами. Хотя, конечно, вы можете обобщить вышесказанное как цикл, который выполняется не более 1 раза, но отсутствие цикла для меня означает «Прерывание? Из чего мы вырываемся?»

Вместо этого я думаю о "last" как о "Прыжке в положение последней скобки", что для этой цели более семантически разумно.

6 голосов
/ 02 декабря 2009

Я задавал тот же вопрос Дамиану Конвею о say. В Perl 6 будет введен say, который является не чем иным, как print, который автоматически добавляет символ новой строки. Мой вопрос заключался в том, почему бы просто не использовать echo, потому что именно это echo делает в Bash (и, вероятно, в других местах).

Его ответ был: echo на 33% длиннее say.

У него есть точка там. :)

5 голосов
/ 29 ноября 2009

Потому что это идет до последнего цикла. И потому что Ларри Уолл был странным парнем.

...