Page 213 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 213
l
const year = new Date ( ) . g etFu l Year ( ) ;
i f ( y ear % 4 ! = = 0 ) console . l o ( ' $ { y ear} не високосны . ' )
g
й
й
g
else i f ( y ear % 1 0 0 ! = 0 ) console . l o ( ' $ { y ear } високосны . ' )
l
else i f ( year % 4 О О ! = О ) conso e . log ( $ ' { year } не високосный . ' )
else console . l og ( ' { $year } високосный ' ) ;
Вообразите, что вы должны выполнить этот код в программе 10 или даже 1 0 0 раз.
Т е перь предположим, что понадобилось изменить формулировку сообщения, кото
рое выводится на консоль; вам придется найти все случаи использования этого кода
и в каждом изменить по четыре строки! Это именно та проблема, которую решают
подпрограммы. В JavaScript эту потребность может удовлетворить функция.
function printLeapYearStatus ( ) {
const year = new Date ( ) . g etFullYear ( ) ;
i f ( year % 4 ! == О ) console . log ( $ { year } не високосный . ' )
'
й
else i f ( y ear % 1 0 0 ! = 0 ) console . l og ( ' $ { y ear} високосны . ' )
й
g
else i f ( y ear % 4 0 0 ! = 0 ) console . l o ( ' $ { y ear } не високосны . ' )
else console . log ( ' { $ year } високосный . ' ) ;
Мы создали м1-югократно используемую подпрограмму (функцию) printLeap
YearStatus. Т е перь это должно быть вам вполне знакомо.
Обратите в н и мание на имя, которое мы выбрали для функции:
S
printLeapYearStatus. Почему не getLeapYear t atus или leapYearStatus, или про
сто leapYe r ? Хотя эти имена были бы короче, они упускают важную деталь: эта
a
функция просто выводит текущее состояние високосного года. Осмысленное имя
функции - это отчасти наука, отчасти искусство. Имя - не для JavaScript, его не
заботит, какое имя вы используете. Имя - для людей (или для вас в будущем). Ког
да вы называете функции, думайте о том, что представит себе человек, если будет
судить о функции только по ее имени. В идеале имя должно точно сообщать, что
делает функция. С другой стороны, имя функции может быть слишком подробным.
Например, мы могли бы назвать эту функцию calculateCurrentLeapYearStatusAn
dPrintToConsole, но дополнительная информация в таком длинном имени явно за
шкаливает. Вот где начинается искусство.
Функции как под п р ограммы, возвращаю щи е значе н и е
Функция printLeapYearStatus в нашем предыдущем примере - это подпро
грамма в обычном смысле слова: она лишь объединяет несколько функциональных
возможностей для удобства многократного использования, не более. Это простейшее
использование функций, к которому вы будете прибегать не очень часто, и даже еще
реже, когда ваш подход к программированию станет более сложным и абстрактным.
Давайте сделаем следующий шаг в направлении абстрактного мышления и рассмот
рим функции как подпрограммы, которые возвращают значение.
21 б Глава 13. Функции и мощь абстрактного мышления

