Ветвление

Вернёмся к нашим зайцам

Вспомним задание про зайцев и Мазая из прошлой главы.
Без использования условий и действий, выполняемых (или не выполняемых)
в зависимости от условий, подсчитать количество зайцев в последней
лодке будет непросто.

Добавим в фунцию 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);
};

Задания

  1. Напишите функцию fizzbuzz, которая принимает параметр number и:
    • Для чисел, кратных трём, возвращает 'Fizz'
    • Для чисел, кратных пяти, возвращает 'Buzz'
    • Для чисел, кратных пятнадцати (одновременно трём и пяти), возвращает 'FizzBuzz'
    • В остальных случаях возвращает исходное число
  2. Напишите фунцию iGoToNorth, которая принимает параметр number и определяет, подходит ли нам переданное число. Число подходит если оно больше 10, меньше 30 и кратно 7.

results matching ""

    No results matching ""