Выразительный JavaScript (Хавербеке) - страница 29

. Тогда-то оператор >|| и переходит к вызову функции, который исследует вариант >(1 * 3). Здесь нас ждёт удача, потому что в третьем рекурсивном вызове мы получаем 13. Этот вызов возвращает строку, и каждый из операторов >|| по пути передаёт эту строку выше, в результате возвращая решение.

Выращиваем функции

Существует два более-менее естественных способа ввода функций в программу.

Первый – вы пишете схожий код несколько раз. Этого нужно избегать – больше кода означает больше места для ошибок и больше материала для чтения тех, кто пытается понять программу. Так что мы берём повторяющуюся функциональность, подбираем ей хорошее имя и помещаем её в функцию.

Второй способ – вы обнаруживаете потребность в некоей новой функциональности, которая достойна помещения в отдельную функцию. Вы начинаете с названия функции, и затем пишете её тело. Можно даже начинать с написания кода, использующего функцию, до того, как сама функция будет определена.

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

>007 Коров

>011 Куриц

Очевидно, что нам понадобится функция с двумя аргументами. Начинаем кодить.

>// вывестиИнвентаризациюФермы

>function printFarmInventory(cows, chickens) {

>  var cowString = String(cows);

>  while (cowString.length < 3)

>    cowString = "0" + cowString;

>  console.log(cowString + " Коров");

>  var chickenString = String(chickens);

>  while (chickenString.length < 3)

>    chickenString = "0" + chickenString;

>  console.log(chickenString + " Куриц");

>}

>printFarmInventory(7, 11);

Если мы добавим к строке >.length, мы получим её длину. Получается, что циклы >while добавляют нули спереди к числам, пока не получат строчку в 3 символа.

Готово! Но только мы собрались отправить фермеру код (вместе с изрядным чеком, разумеется), он звонит и говорит нам, что у него в хозяйстве появились свиньи, и не могли бы мы добавить в программу вывод количества свиней?

Можно, конечно. Но когда мы начинаем копировать и вставлять код из этих четырёх строчек, мы понимаем, что надо остановиться и подумать. Должен быть способ лучше. Пытаемся улучшить программу:

>// выводСДобавлениемНулейИМеткой

>function printZeroPaddedWithLabel(number, label) {

>  var numberString = String(number);

>  while (numberString.length < 3)

>    numberString = "0" + numberString;