Page 214 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 214
Функция printLeapYearStatus хороша, но, когда мы начнем создавать свои про
граммы, простого вывода на консоль часто становится недостаточно. Теперь мы хо
тим использовать для вывода НТМL-код или выполнять запись в файл, или исполь
зовать текущее состояние високосного года в других вычислениях. Но мы все еще не
хотим возвращаться к обстоятельному объяснению нашего алгоритма каждый раз,
когда хотим знать, является ли текущий год високосным.
К счастью, нашу функцию достаточно просто переписать (и переименовать!) так,
чтобы она стала подпрограммой, которая возвращает значение.
r
function isCurrentYearLeapYea ( ) {
const year = new Date ( ) . g etFullYear ( ) ;
i f ( y ear % 4 ! = = 0 ) return false ;
else if ( y ear % 1 0 0 ! = 0 ) return true ;
else if ( y ear % 4 0 0 ! = 0 ) return false ;
else return true ;
Теперь давайте рассмотрим некоторые примеры того, как мы могли бы использо
вать возвращаемое значение нашей новой функции.
const days inMonth =
r
( 3 1 , isCurrentYearLeapYea ( ) ? 2 9 : 2 8 , 3 1 , 3 0 , 3 1 , 3 0 ,
3 1 , 3 1 , 3 0 , 3 1 , 3 0 , 3 1 ] ;
g
i f ( i sCurrentYearLeapYear ( ) ) console . l o ( ' Ceйчac високосный год . ' ) ;
Прежде чем двигаться дальше, давайте рассмотрим почему мы выбрали для этой
функции именно такое название. Весьма популярно начинать имена функций, кото
рые возвращают логическое значение (или предназначены для использования в ло
i
гическом контексте), с сочетания букв s . Мы также включали в имя функции слово
cиrrent (текущее). Почему? Потому что в этой функции текущая дата используется
явно. Другими словами, эта функция возвратит разные значения, если вы запустите
3
ее 1 декабря 2016 года, а затем на следующий день - 1 января 2017 года.
Функции как . . . функции
Теперь, когда мы рассмотрели некоторые из наиболее очевидных способов ис
.
пользования функций, пришло время подумать о функциях как . . о функциях. Если
бы вы были математиком, то вы думали бы о функции как о зависимости (relation)
выходных данных от входных. Любой вывод зависит от ввода. Программисты счи
тают функции, которые придерживаются математического определения, чистыми
функциями (pure function). В некоторых языках (таких, как Haskell) допускаются
только чистые функции.
Чем такая функция отличается от функций, которые мы уже рассматривали? Во
первых, чистая функция должна всегда возвращать одно и то же значение для одно
i
a
го и того же набора входных данных. Функция s CurrentYearLeapYe r не является
Функции как под р ограммы, возвращающие значение 217
п

