Выразительный JavaScript | страница 33



Упражнения

Минимум

В предыдущей главе была упомянута функция >Math.min, возвращающая самый маленький из аргументов. Теперь мы можем написать такую функцию сами. Напишите функцию min, принимающую два аргумента, и возвращающую минимальный из них.

>console.log(min(0, 10));

>// → 0

>console.log(min(0, -10));

>// → -10

Рекурсия

Мы видели, что оператор >% (остаток от деления) может использоваться для определения того, чётное ли число (>% 2). А вот ещё один способ определения:

• Ноль чётный.

• Единица нечётная.

• У любого числа N чётность такая же, как у N - 2.

Напишите рекурсивную функцию >isEven согласно этим правилам. Она должна принимать число и возвращать булевское значение.

Потестируйте её на 50 и 75. Попробуйте задать ей -1. Почему она ведёт себя таким образом? Можно ли её как-то исправить?

>console.log(isEven(50));

>// → true

>console.log(isEven(75));

>// → false

>console.log(isEven(-1));

>// → ??

Считаем бобы

Символ номер N строки можно получить, добавив к ней >.charAt(N) (>"строчка".charAt(5)) – схожим образом с получением длины строки при помощи >.length. Возвращаемое значение будет строковым, состоящим из одного символа (к примеру, >"к"). У первого символа строки позиция 0, что означает, что у последнего символа позиция будет >string.length - 1. Другими словами, у строки из двух символов длина 2, а позиции её символов будут 0 и 1.

Напишите функцию >countBs, которая принимает строку в качестве аргумента, и возвращает количество символов “B”, содержащихся в строке.

Затем напишите функцию >countChar, которая работает примерно как >countBs, только принимает второй параметр — символ, который мы будем искать в строке (вместо того, чтобы просто считать количество символов “B”). Для этого переделайте функцию >countBs.

4. Структуры данных: объекты и массивы

Два раза меня спрашивали: «Скажите, м-р Бэббидж, а если вы введёте в машину неправильные данные, получится ли правильный ответ?». Непостижима та путаница в головах, которая приводит к таким вопросам.

Чарльз Бэббидж, «Отрывки из жизни философа» (1864)

Числа, булевские значения и строки – кирпичики, из которых строятся структуры данных. Но нельзя сделать дом из одного кирпича. Объекты позволяют нам группировать значения (в том числе и другие объекты) вместе – и строить более сложные структуры.

Написание программ, которым мы до сего момента занимались, сильно затруднял тот факт, что они работали только с простыми данными. Эта глава добавит вам в инструментарий понимание структур данных. К её концу вы будете знать достаточно для того, чтобы начать писать полезные программы.