Пустые списки параметров

Улучшенный алгоритм &max теперь работает нормально даже в том случае, если функции передается более двух параметров. Но что произойдет, если функция вызвана вообще без параметров? На первый взгляд проблема кажется надуманной. Кому придет в голову вызывать &max без параметров? Но, возможно, кто-то написал строку следующего вида:

$maximum = &max(@numbers);

Может оказаться, что массив @numbers содержит пустой список; допустим, его содержимое было прочитано из пустого файла. А значит, необходимо решить, как функция &max должна работать в этой ситуации? Первая строка функции инициализирует $max_so_far вызовом shift для @_, (пустого) списка параметров. Это безвредно; массив пуст, shift вернет undef, и это значение будет присвоено $max_so_far. Теперь цикл foreach должен перебрать @_, но массив пуст, поэтому тело цикла будет выполнено 0 раз.

В итоге Perl использует значение $max_so_far – undef – как возвращаемое значение функции. В каком-то смысле это правильно, потому что в пустом списке наибольшего элемента не существует. Конечно, тот, кто вызывает вашу функцию, должен знать, что она может вернуть undef, или просто следить за тем, чтобы список параметров никогда не был пустым.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Аргументы
Возвращаемые значения
Вызов пользовательской функции
Вызов функции без &
Директива use strict

Вернуться в раздел: Perl / 3. Пользовательские функции