JavaRush /Курсы /Модуль 1: Web Core /Интересные дополнения

Интересные дополнения

Модуль 1: Web Core
23 уровень , 7 лекция
Открыта

8.1 Псевдослучайные числа

Иногда программист сталкивается с простыми, казалось бы, задачами: «отобрать случайный фильм для вечернего просмотра из определенного списка», «выбрать победителя лотереи», «перемешать список песен при тряске смартфона», «выбрать случайное число для шифрования сообщения», и каждый раз у него возникает очень закономерный вопрос: а как получить это самое случайное число?

Вообще-то, если вам нужно получить «настоящее случайное число», сделать это довольно-таки трудно. Вплоть до того, что в компьютер встраивают специальные математические сопроцессоры, которые умеют генерировать такие числа, с выполнением всех требований к «истинной случайности».

Поэтому программисты придумали свое решение — псевдослучайные числа. Псевдослучайные числа — это некая последовательность, числа в которой на первый взгляд кажутся случайными, но специалист при детальном анализе сможет найти в них определенные закономерности. Для шифрования секретных документов такие числа не подойдут, а для имитации бросания кубика в игре — вполне.

Есть много алгоритмов генерации последовательности псевдослучайных чисел и почти все из них генерируют следующее случайное число на основе предыдущего и еще каких-то вспомогательных чисел.

Например, данная программа выведет на экран 1000 неповторяющихся чисел:

JavaScript
    
      let a = 41;
      let c = 11119;
      let m = 11113;
      let seed = 1;

      function getNextRandom() {
        seed = (a * seed + c) % m;
        return seed;
      }

      for (let t = 0; t < 1000; t++) {
        let x = getNextRandom();
        console.log(x);
      }
    
  

Кстати, мы говорим не о псевдослучайных числах, а именно о последовательности таких чисел, т. к. глядя на одно число невозможно понять, случайное оно или нет.

Случайное число ведь можно получить разными способами:

JavaScript
    
      function getNextRandom() {
        return 4; # это точно случайное число (я выкинул его с помощью кубиков)
      }
    
  

8.2 Оператор switch

Оператор switch используется для выполнения одного из нескольких блоков кода в зависимости от значения выражения. Он особенно полезен, когда необходимо сравнить одно значение с несколькими возможными вариантами.

Синтаксис:

    
      switch(expression) {
        case value1:
          // код, который выполнится, если expression === value1
          break;
        case value2:
          // код, который выполнится, если expression === value2
          break;
        // ...
        default:
          // код, который выполнится, если ни одно из значений не совпало
      }
    
  

Пример:

JavaScript
    
      let day = 3;
      let dayName;

      switch (day) {
        case 1:
          dayName = "Понедельник";
          break;
        case 2:
          dayName = "Вторник";
          break;
        case 3:
          dayName = "Среда";
          break;
        case 4:
          dayName = "Четверг";
          break;
        case 5:
          dayName = "Пятница";
          break;
        case 6:
          dayName = "Суббота";
          break;
        case 7:
          dayName = "Воскресенье";
          break;
        default:
          dayName = "Неверный день";
      }

      console.log(dayName); // "Среда"
    
  

8.3 Оператор ??

Оператор ??, или nullish coalescing operator, используется для назначения значения по умолчанию, если левый операнд является null или undefined. Он позволяет избежать применения значения по умолчанию для других ложных значений, таких как 0, false, или пустая строка ("").

Синтаксис:

    
      let result = value1 ?? value2;
    
  

Если value1 не null или undefined, result будет value1. В противном случае result будет value2.

Примеры:

JavaScript
    
      let foo = null ?? 'default';
      console.log(foo); // 'default'

      let bar = 0 ?? 'default';
      console.log(bar); // 0 (0 не является null или undefined)

      let baz = undefined ?? 'default';
      console.log(baz); // 'default'
    
  

Отличие от логического ИЛИ (||)

Оператор || также может использоваться для задания значения по умолчанию, но он возвращает правый операнд для любых ложных значений, таких как 0, "", или NaN.

Пример сравнения:

JavaScript
    
      let value = 0 || 'default';
      console.log(value); // 'default' (поскольку 0 - ложное значение)

      let value2 = 0 ?? 'default';
      console.log(value2); // 0 (поскольку 0 не является null или undefined)
    
  

Применение

Оператор ?? полезен в ситуациях, когда необходимо задать значение по умолчанию только для null или undefined, но сохранить ложные значения, такие как 0 или "".

Реальные примеры использования

Пример 1. Значения по умолчанию в объектах конфигурации:

JavaScript
    
      function configure(settings) {
        settings = settings ?? {};
        let timeout = settings.timeout ?? 1000;
        let color = settings.color ?? 'blue';
        // остальная логика настройки
      }
    
  

Пример 2. Параметры по умолчанию для функций:

JavaScript
    
      function printMessage(message) {
        message = message ?? 'No message provided';
        console.log(message);
      }

      printMessage(null); // 'No message provided'
      printMessage('Hello'); // 'Hello'
    
  

Использование оператора ?? позволяет писать более чистый и предсказуемый код, особенно в ситуациях, когда важно учитывать только отсутствие значения (null или undefined).

1
Задача
Модуль 1: Web Core, 23 уровень, 7 лекция
Недоступна
Настройки по умолчанию
Настройки по умолчанию
1
Задача
Модуль 1: Web Core, 23 уровень, 7 лекция
Недоступна
Время года
Время года
1
Опрос
Куки, WebStorage и Web API, 23 уровень, 7 лекция
Недоступен
Куки, WebStorage и Web API
Куки, WebStorage и Web API
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
RayCowperwood Уровень 48
17 июня 2025
во второй задаче, при использовании switchcase можно группировать месяцы, с помощью такой конструкции:

    switch(number){    
        case 1:
        case 2:
        case 3:
            return 'вернем при значении 1 или 2 или 3'
        case 4:
        case 5:
        case 6:
            return 'вернем при значении 4 или 5 или 6'
    }