Ветвление
Вернёмся к нашим зайцам
Вспомним задание про зайцев и Мазая из прошлой главы.
Без использования условий и действий, выполняемых (или не выполняемых)
в зависимости от условий, подсчитать количество зайцев в последней
лодке будет непросто.
Добавим в фунцию lastBoatRabbits
ветвление:
var lastBoatRabbits = function(totalRabbits) {
if (totalRabbits === 0) { // [1]
return 0;
} else {
var restRabbits = totalRabbits % 6;
if (restRabbits === 0) { // [2]
return 6;
} else {
return restRabbits;
}
}
};
Итак, если зайцев на речке нет [1], последняя лодка никого не привезёт (на самом деле, она вернётся почти сразу же, т.к. дедушка точно будет знать, что зайцев на речке нет).
А если количество зайцев на реке кратно 6
[2], то последней будет лодка, полностью загруженная зайцами.
Что ещё можно было бы улучшить в этой программе? Я бы использовал отдельную переменную,
хранящую количество зайцев, помещающихся в лодке, на тот случай, если благодарные
зайцы подарят Мазаю лодку побольше. Мало ли что вдруг.
var boatCapacity = 6;
var lastBoatRabbits = function(totalRabbits) {
if (totalRabbits === 0) {
return 0;
} else {
var restRabbits = totalRabbits % boatCapacity;
if (restRabbits === 0) {
return boatCapacity;
} else {
return restRabbits;
}
}
};
Синтаксис ветвления
Ветвление может иметь часть, которая выполняется, если условие неверно,
а может его не иметь:
// Вариант с двумя ветками:
if (rainIsFalling) {
stayHome(); // Если rainIsFalling == true, выполняется эта часть
} else {
walkInAPark(); // Иначе выполняется эта часть
}
// Вариант с одной веткой:
if (musicIsPlaying) {
dance();
} // Если musicIsPlaying == false, выполнение программы просто идёт дальше
Условия
В качестве условия в if
может выступать выражение сравнения двух чисел или строк,
с использованием операций ==
, >
, <
, >=
, <=
, !=
и ===
, любая переменная, которой
было присвоено логическое значение и просто любое значение, которое в результате работыif
будет приведено к логическому значению.
Примеры сравнения:
10 > 5 // => true
11 < 6 // => false
5 >= 5 // => true
3 != 3 // => false
'abc' == 'abc' // => true
'abc' === 'abc' // => true
Переменные в качестве условия:
var condition = 10 > 5;
if (condition) {
console.log('10 > 5'); // Будет выполнено
}
Логические операции над условиями
Несколько выражений, возвращающих логическое (или приводимое к логическому) значений
можно объединить с помощью логических операций. Такими операциями называют:
логическое И &&
, логическое ИЛИ ||
и логическое отрицание !
.
Примеры:
true && true; // => true
false || false; // => false
!false; // => true
Логическое И возвращает true
только в том случае, если с обоих сторон от него true
,
логическое ИЛИ возвращает false
только в том случае, если с обоих сторон от него — false
.
Отрицание возвращает false
для true
и, наоборот, true
для false
.
По правилам Javascript значения 0
, null
и undefined
приводятся к false
.
Однако, получая результат &&
мы получим первое неприведённое значение, которое
приводится к false
, а получая результат ||
— первое неприведённое значение,
которое приводится к true
:
0 && true; // => 0
6 || 7 || false; // => 6
!0; // => true
Таким образом, функцию, возвращающую количество зайцев в последней лодке можно было бы переписать так:
var boatCapacity = 6;
var lastBoatRabbits = function(totalRabbits) {
return totalRabbits && (totalRabbits % boatCapacity || boatCapacity);
};
Задания
- Напишите функцию
fizzbuzz
, которая принимает параметрnumber
и:- Для чисел, кратных трём, возвращает
'Fizz'
- Для чисел, кратных пяти, возвращает
'Buzz'
- Для чисел, кратных пятнадцати (одновременно трём и пяти), возвращает
'FizzBuzz'
- В остальных случаях возвращает исходное число
- Для чисел, кратных трём, возвращает
- Напишите фунцию
iGoToNorth
, которая принимает параметрnumber
и определяет, подходит ли нам переданное число. Число подходит если оно больше 10, меньше 30 и кратно 7.