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
                                                п
   209   210   211   212   213   214   215   216   217   218   219