Условные инструкции в JavaScript

Условные инструкции в JavaScript
Содержание:
  1. Условные инструкции и тернарный оператор
  2. Инструкция if
  3. Инструкция if...else
  4. Несколько условий else if
  5. Условный тернарный оператор ?:
  6. Инструкция switch
  7. Комментарии

В этой статье мы изучим условные инструкции if, if...else, switch и тернарный оператор JavaScript, который очень часто используется в выражениях.

Условные инструкции и тернарный оператор

Условные инструкции – это инструкции языка JavaScript (ECMAScript), которые выполняют определенные действия в зависимости от значения некоторого условия.

Виды условных инструкций в JavaScript:

  • if (с одной ветвью);
  • if...else (с двумя ветвями);
  • else if... (с несколькими ветвями);
  • инструкция выбора switch.

Кроме условных инструкций в JavaScript имеется ещё тернарный оператор ?:.

Инструкция if

Синтаксис:

// condition – это условие
if (condition) {
  // блок кода, который выполняется один раз, если condition истинно
}

Инструкция if начинается с ключевого слова if, затем после пробела идут круглые скобки, в которых находится условие и далее блок инструкций в фигурных скобках. При этом блок кода выполняется только в том случае, если условие, заданное в круглых скобках () истинно.

В качестве условия можно указывать любое выражение. Если выражение приводится к истине (то есть, если Boolean(condition) === true), то блок код выполняется. В противном случае нет.

Например:

if (true) {
  console.log('Привет, мир!');
}

В этом примере условие правдиво, а значит, что блок кода будет выполнен, и мы в консоли увидим сообщение «Привет, мир!». Этот код приведен в качестве примера, так как в таком виде он не имеет никакого смысла.

Если блок кода состоит из одной инструкции, то фигурные скобки можно опустить:

if (true) console.log('Привет, мир!');

Но фигурные скобки лучше указывать, так как это улучшает читаемость кода.

Например, увеличим значение переменной num на 5, если её значение больше 4:

let num = 8;
if (num > 4) {
  num += 5;
}
console.log(num); // 13;

В этом примере условие приводится к true. А так как условие истинно, то выполняем то, что находится в блоке. В результате в консоль будет выведено значение 13.

Пример if, в условии которого используется оператор «НЕ»:

const article = {
  date: '18.05.2022'
}
if (!article.title) {
  console.log('Не указан заголовок!');
}

Здесь имеется объект article, содержащий одно свойство date. С помощью if мы выводем сообщение в консоль, если в объекте article нет свойства title или оно имеется, но его значение ложно.

Условие !article.title при приведении к булевому значению даст нам true. Так как свойства title нет в объекте article, то article.title вернёт undefined. А !undefined – это true.

Как только что выяснили условие правдиво, а следовательно, блок кода будет выполнен и мы в консоли увидим сообщение.

Инструкция if...else

Инструкция if...else состоит из 2 блоков кода. Если условие истинно, то выполняется первый блок кода, в противном случае – второй:

Синтаксис:

// condition – это условие
if (condition) {
  // блок кода, который выполняется, если условие истинно
} else {
  // блок кода, который выполняется, если условие ложно
}

В if...else всегда выполняется один из блоков. То есть в этой инструкции одновременно два блока выполнится не могут. При этом этот блок выполняется один раз. Если условие правдиво, то – первый блок, иначе – второй. После того как один из блоков выполнится интерпретатор JavaScript перейдёт к следующим за ним инструкциям.

Например, выведем в консоль сообщение о том, является ли число четным или нет:

const num = 5;
if (num % 2) {
  console.log('Число нечётное!');
} else {
  console.log('Число чётное!');
}

Если условие num % 2 правдиво, а в данном случае это так, то выполнится первый блок кода, который выведет в консоль «Число нечётное!».

Если значение переменной поменять на 4, то условие будет уже ложным и выполнится второй блок кода. В результате, в консоли мы увидим сообщение «Число чётное!».

Несколько условий else if

Если нужно проверить несколько вариантов условий, то можно использовать else if:

if (condition1) {
  // блок кода, который выполняется, если условие condition1 истинно
} else if (condition2) {
  // блок кода, который выполняется, если условие condition2 истинно
} else if (condition3) {
  // блок кода, который выполняется, если условие condition3 истинно
} else {
  // блок кода, который выполняется, если предыдущие условия ложны
}

Здесь всё как обычно:

  • Если condition1 правдиво, то выполнится первый блок кода. Остальные условия и блоки кода не будут даже просматриваться. На этом выполнение if закончится.
  • Если же первое условие ложно, то мы переходим к condition2. Если condition2 истинно, то выполнится второй блок кода и на этом выполнение инструкции if закончится.
  • Если предыдущие условия ложны, то переходим к рассмотрению условия condition3 и так далее.
  • Если все условия ложны, то выполняем последний блок кода, который указан после else без дополнительных условий.

Используя else if вы можете комбинировать много разных условий и строить длинные цепочки.

Пример, в котором выведем в консоль разные тексты, в зависимости от значения переменной val:

const val = 7;
if (val < 5) {
  console.log('Less than 5');
} else if (val < 10) {
  console.log('Less than 10');
} else {
  console.log('Greater than or equal to 10');
}

Пример, в котором показано как можно переписать эту инструкцию используя только if:

const val = 7;
if (val < 5) {
  console.log('Less than 5');
}
if (val > 5 && val < 10) {
  console.log('Less than 10');
}
if (val >= 10) {
  console.log('Greater than or equal to 10');
}

Кроме этого блок else не является обязательным:

const lang = 'ru';
if (lang === 'ru') {
  console.log('Это русский текст');
} else if (lang === 'en') {
  console.log('Это английский текст');
} else if (lang !== 'ru' || lang !== 'en') {
  console.log('Это не русский и не английский текст');
}

Очень часто if применяются внутри функций:

function greeting(time) {
  if (time > 18) {
    return 'Добрый вечер!';
  } else if (time > 11) {
    return 'Добрый день!';
  } else if (time > 4) {
    return 'Доброе утро!';
  }
  return 'Доброй ночи!';
}

greeting(10); // "Доброе утро!"

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

Условный тернарный оператор ?:

Тернарный оператор – это оператор JavaScript, который возвращает результат первого или второго выражения в зависимости от истинности условия.

Синтаксис:

// condition – условие
// expression1 – первое выражение
// expression2 – второе выражение
condition ? expression1 : expression2

Тернарный оператор является выражением, то есть он возвращает значение. У него три операнда: условие condition, первое выражения expression1 и второе выражение expression2. Для разделения операндов используются знаки ? и :.

Условие – это тоже выражение. Если условие истинно, то тернарный оператор возвращает результат первого выражения expression1. В противном случае, то есть, если условие ложно, то результат второго выражения expression2.

Тернарный оператор очень часто используется там где нужно получить значение и использовать его дальше. Например, это значение можно присвоить переменной.

const value = 10;
const result = value > 10 ? 'Число больше 10!' : 'Число равно или меньше 10!';
console.log(result); // "Число равно или меньше 10!"

В этом примере мы объявили переменную value и присвоили ей число 10. Так как условие у нас ложно (то есть 10 не больше 10), то тернарный оператор вернёт нам результат вычисления второго выражения, то есть строку «Число равно или меньше 10!». После этого данная строка будет присвоена переменной result, которую мы создали с помощью ключевого слова const. После этого значение этой переменной будет выведено в консоль.

В JavaScript допустимы множественные тернарные операторы (?:):

const dayNumber = new Date().getDay();

day =
  (dayNumber === 0) ? 'Воскресенье' :
    (dayNumber === 1) ? 'Понедельник' :
      (dayNumber === 2) ? 'Вторник' :
        (dayNumber === 3) ? 'Среда' :
          (dayNumber === 4) ? 'Четверг' :
            (dayNumber === 5) ? 'Пятница' :
              (dayNumber === 6) ? 'Суббота' : 'Неизвестный день недели';

console.log(`Сегодня ${day.toLowerCase()}.`);

Вышеприведённый пример, но с использованием множественной записи инструкции if...else:

const dayNumber = new Date().getDay();

if (dayNumber === 0) {
  day = 'Воскресенье';
} else if (dayNumber === 1) {
  day = 'Понедельник';
} else if (dayNumber === 2) {
  day = 'Вторник';
} else if (dayNumber === 3) {
  day = 'Среда';
} else if (dayNumber === 4) {
  day = 'Четверг';
} else if (dayNumber === 5) {
  day = 'Пятница';
} else if (dayNumber === 6) {
  day = 'Суббота';
} else {
  day = 'Неизвестный день недели';
}

console.log(`Сегодня ${day.toLowerCase()}.`);

Инструкция switch

Инструкция switch предназначен для выполнения одного варианта инструкций из нескольких в зависимости от значения выражения. Выбор того или иного варианта определяется посредством строгого равенства результата выражения значению случая (case).

Синтаксис инструкции switch:

// expression – выражение
switch (expression) {
  case valueA:
    // действия, которые будут выполнены, если expression === valueA
    break; // прерываем дальнейшее выполнение switch
  case valueB:
    // действия, которые будут выполнены, если expression === valueB
    break; // прерываем дальнейшее выполнение switch
  // ...
  case valueN:
  // действия, которые будут выполнены, если expression === valueN
    break; // прерываем дальнейшее выполнение switch
  default:
    // действия по умолчанию, если expression не равно valueA, valueB, ..., valueN
}

Ключевое слово default является необязательным. Оно используется, когда необходимо задать инструкции, которые нужно выполнить, если результат выражения будет не равен ни одному значению варианта (case).

Инструкция break является необязательной. Она предназначена для прерывания выполнения инструкции switch и передачи управлению инструкции, идущей после него.

Например, выведем сообщение в консоль браузера о количестве конфет:

const countCandyBoys = 1;
const countCandyGirls = 2;
let message;
switch (countCandyBoys + countCandyGirls) {
  case 1:
    message = 'Одна конфета';
    break;
  case 2:
  case 3:
    message = 'Две или три конфеты';
    break;
  case 4:
    message = 'Четыре конфеты';
    break;
  default:
    message = 'Не одна, не две, не три и не четыре конфеты';
}
// выведем сообщение в консоль
console.log(message);

В вышеприведенном примере вычисленное выражение равно 3. Следовательно, будет выполнены инструкции message = 'Две или три конфеты' и break. Инструкция break прервёт дальнейшее выполнение инструкции switch и передаст управление инструкции, идущей после него, т.е. console.log(message). Она выведет в консоль сообщение «Две или три конфеты».

Например, выведем выведем в консоль текущий день недели:

let day = '';

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

console.log(`Сегодня ${day.toLowerCase()}.`);

Пример, в котором не используется инструкция break:

const result = 'success';

switch (result) {
  case 'success':
    console.log('Успех!');
  case 'invalidCaptcha':
    console.log('Неверная капча!');
  default:
    console.log('Ошибка!');
}

В этом примере выражение инструкции switch равно success. Следовательно, будет выполнена инструкция console.log('Успех!'), которая выведет сообщение «Успех!» в консоль. Но так как после неё нет инструкции break, то выполнение скрипта будет продолжено в следующем варианте. Таким образом, инструкции будут выполняться до тех пока пока на пути не встретиться break или не будет достигнут конец инструкции switch. В результате выполнения этого примера в консоль будут выведены 3 сообщения: «Успех!», «Неверная капча!» и «Ошибка!».

В некоторых случаях может требоваться именно такое поведение, но не в этом. Здесь просто допущена ошибка.

Исправленный вариант примера:

const result = 'success';

switch (result) {
  case 'success':
    console.log('Успех!');
    break;
  case 'invalidCaptcha':
    console.log('Неверная капча!');
    break;
  default:
    console.log('Ошибка!');
}

Комментарии: 54

Vyacheslav
Vyacheslav

Еще раз здравствуйте. Я решил свою предыдущую задачу с так называемым калькулятором. На данный момент появилась новая проблема, которую мне, похоже, решить не под силу. Калькулятор рассчитывает количество доборов под толщину стены с учетом короба. Есть возможность добавления полей ввода, в случае, если толщины стен в квартире разные. Суть вопроса - нужно, чтобы из всех таких полей ввода считалась сумма количества доборов. Количество доборов изначально - строка, я прогонял эту строку через регулярное выражение, которое определяет в строке числа, идущие после символа "x ", но я не понимаю, как мне связать карточки из разных полей ввода с одинаковыми коробами и получить сумму их количества доборов. Складываться должны только числа, которые находятся после символа "x". Я выделил в прикрепленном файле, что должно складываться. В итоге должно получиться 4 суммы для каждого короба

У меня не получится прикрепить сюда html файл, к сожалению, но если так сработает, то вот ссылка на этот калькулятор - https://disk.yandex.ru/d/SCP-vGmNBIIBUQ
Vyacheslav
Vyacheslav

Вопрос иссяк, извините за беспокойство. Каким-то образом разобрался в структуре циклов и массивов

Александр Мальцев
Александр Мальцев

Рад, что всё получилось.

Vyacheslav
Vyacheslav

Здравствуйте, помогите пожалуйста с решением этой задачи. Есть 4 таблицы с условиями, я их выписал ниже(прикрепил) по-отдельности в условные конструкции. Пользователь вписывает в текстовое поле значение, которое проверяется в этих условных конструкциях и на основе проверки выводится товар(card). При попадании в промежутки из нескольких таблиц должно выводиться несколько товаров. Из числа, которое вводит пользователь, будет вычитаться значение из data-filter и выводиться рядом с товаром.

const calcInput = document.querySelector(".calculate__input");
const calcButton = document.querySelector(".calculate__button");
const calcOutput = document.querySelector(".calculate__output");
calcButton.addEventListener("click", function () {
let calcInputValue = calcInput.value;
const card = document.querySelectorAll(".card");
calcOutput.innerText = "";
card.forEach((el) => {
   let filterVal = el.getAttribute("data-filter");
    //70
    if (
     calcInputValue == 70 ||
     (calcInputValue >= 71 && calcInputValue <= 105) ||
     (calcInputValue >= 106 && calcInputValue <= 130) ||
     (calcInputValue >= 131 && calcInputValue <= 160) ||
     (calcInputValue >= 161 && calcInputValue <= 210) ||
     (calcInputValue >= 211 && calcInputValue <= 260) ||
     (calcInputValue >= 261 && calcInputValue <= 310) ||
     (calcInputValue >= 311 && calcInputValue <= 360) ||
     (calcInputValue >= 361 && calcInputValue <= 410) ||
     (calcInputValue >= 411 && calcInputValue <= 460)
    ) {
    }          
   });
});
Александр Мальцев
Александр Мальцев

Добрый день! Не совсем понятно, что хотите сделать. Допустим, имеется .card, который имеет атрибут data-filter с каким-то значением. А дальше? Нужно показать этот блок или скрыть?

Обычно задачи по выводу карточек решаются очень просто:

  • Отправляем на сервер fetch с указанием каких-то данных.
  • На сервере на основании указанных вводных данных создаём запрос к базе данных и извлекаем из неё нужную информацию.
  • Полученные данные преобразуем в формат JSON и отправляем его клиенту.
  • На клиенте с помощью JavaScript перебираем полученный массив данных и формируем на его основании HTML-код карточек.
  • Вставляем HTML-код карточек на страницу.
Vyacheslav
Vyacheslav

Я думаю тут все должно быть проще. Есть 4 таблицы с заготовленными параметрами толщины стены, эти таблицы соответствуют деталям. Комментариями(70, 74, 80) указана ширина детали, которая должна поместиться в дверной проем, но если толщина стены больше, то мы должны из толщины стены вычесть ширину этой детали, чтобы сделать добор. Проблема состоит в том, что я не понимаю, как при попадании в одинаковые промежутки в таблицах выводить сразу несколько подходящих деталей. Например пользователь вводит толщину стены в 100мм. В условии мы проверяем, какая деталь подходит к этой толщине стены. Но т.к. ни одной ширины детали не хватает, чтобы полностью покрыть стену, нужно из толщины стены вычесть ширину детали и результат вывести вместе с деталью в одной карточке. Пока что я не придумал ничего более близкого к решению, чем в прикрепленной картинке. В переменных с припиской _TEXT будет верстка карточек, которые будут отображаться в зависимости от условия.

Анна
Анна
Добрый день, помогите решить задачу. Использовать Date нельзя, можно только if else или switch. Запросить дату (день, месяц, год) и вывести следующую за ней дату. Учесть возможность перехода на следующий месяц, год, а также високосный год. Заранее спасибо.
Александр Мальцев
Александр Мальцев
Здравствуйте! Такую задачку можно решить так:
// сначала запрашиваем текущий день месяца, месяц и год
const day = +prompt('Введите день месяца', 14);
const month = +prompt('Введите номер месяца', 10);
const year = +prompt('Введите год', 2022);

// определяем является ли текущий год високосным
const leapYear = year[2] % 4 === 0;
// определяем количество дней в феврале
const daysFebruary = leapYear ? 29 : 28;

// сохраняем в переменные элементы следующей даты
let nextDay = day + 1;
let nextMonth = month;
let nextYear = year;

// если (день месяца > 31) или (день месяца > 30 и месяц является 4, 6, 9 или 11) или (день месяца > количество дней в феврале и месяц является февралём), то
if (nextDay > 31 || (nextDay > 30 && [4, 6, 9, 11].includes(month)) || (nextDay > daysFebruary && month === 2)) {
  // следующий день - это 1
  nextDay = 1;
  // следующий месяц увеличиваем на 1
  nextMonth++;
}
// если следующий месяц больше 12
if (nextMonth > 12) {
  // следующий месяц - это 1
  nextMonth = 1;
  // следующий год увеличиваем на 1
  nextYear++;
}

// выводим в alert следующий день (если значение меньше 0, то добавляем впереди 0)
alert(`Следующий день: ${nextDay < 10 ? '0' + nextDay : nextDay}.${nextMonth < 10 ? '0' + nextMonth : nextMonth}.${nextYear}!`);
Анна
Анна
Спасибо
Jil
Jil
Александр, добрый день!
Есть задание выполнить задачку. Очень хочу ее выполнить.

Наша задача — определить характер указанного предложения. Сейчас в конце предложения стоит восклицательный знак. Поэтому наша функция должна нам сообщить, что предложение является восклицательным. Наша задача — определить характер указанного предложения. Сейчас в конце предложения стоит восклицательный знак. Поэтому наша функция должна нам сообщить, что предложение является восклицательным. getSentenceType('Идем вперед и не сворачиваем ни при каких условиях!');

Я бьюсь уже второй день. Не понимаю как прописать условие и ответы, если бы были цифры то понятно как сделать, а вот со словами и знаками не понимаю. Причем записывая:
function getSentenceType(string) {
  const lastChar = string(string.length - 1);
  console.log(lastChar);
При проверке должен появится последний знак предложения, те "!" (getSentenceType('Идем вперед и не сворачиваем ни при каких условиях!');), но даже он не появляется.

Сама задача ниже.
function getSentenceType(string) {
  const lastChar = ;
  ​
  if (/**замените на условие */) {
    return /**замените на ответ функции */
  } else if (/**замените на условие */) {
    return /**замените на ответ функции */
  }
  ​
  return /**замените на ответ функции */
}
getSentenceType('Идем вперед и не сворачиваем ни при каких условиях!');
Jil
Jil
Вот еще к задаче информация.

Далее нам нужно сравнить его с двумя символами, а именно с "!" и "?"
Нам нужна условная конструкция if else:
if (условие) {
} else if (условие) {
}
Первый if должен сравнить последний символ строки, записанный в нашу константу, например, со знаком "!". Если совпало, то возвращаем (return) «предложение восклицательное». Если не совпало, то следующий if должен сравнить последний символ со знаком "?". Если совпало, то возвращаем строку «вопросительное предложение». Если совпадений совсем нет — возвращаем строку «повествовательное предложение». Это можно сделать последней строкой нашей программы.
Александр Мальцев
Александр Мальцев
Привет!
Решение задачки:
function getSentenceType(string) {
  const lastChar = string[string.length - 1];
  if (lastChar === '!') {
    return 'предложение восклицательное';
  } else if (lastChar === '?') {
    return 'вопросительное предложение';
  }

  return 'повествовательное предложение';
}
Jil
Jil
Спасибо большое, если честно я не нашла в просторах интернета такой алгоритм прописания. Return я именно так и оформила, а вот if и else if-близко но все ж не верно, равно у меня было одно, да и кавычки не так поставила. Ещё раз спасибо, первый раз писала в жизни на яве
Masha
Masha
Александр, подскажите, пожалуйста
Ставка налога зависит от размера твоего дохода:

если доход до 1000 грн включительно — налог 2%;
если доход от 1000 грн до 10000 грн включительно — налог 3%;
если доход больше 10000 грн — налог 5%;
Напиши конструкцию if/else, которая посчитает сумму налогов исходя из объема доходов income. Результат расчетов выведи с помощью System.out.println(result).
Александр Мальцев
Александр Мальцев
Привет!
System.out.println — это не JavaScript.

На JavaScript это задача решается так:
// объем дохода
const income = 5000;
// сумма налога
let result = 0;
if (income <= 1000) {
  result = income * 0.02;
} else if (income > 1000 && income <= 10000) {
  result = income * 0.03;
} else if (income > 10000) {
  result = income * 0.05;
}
console.log( result );
Masha
Masha
Выбивает ошибку
Compile error:
/CalculateTaxes.java:6: error: illegal start of expression
const income = 5000;
^
Катя
Катя
Здравствуйте!
Подскажите, пожалуйста, у меня такой вопрос: почему, если написать такое условие (например)
if (false) alert('Верно!'); else alert('Неверно!');
компилятор «пойдет» в ветку else?.. Искала в интернете этот момент, но интернет не очень понимает мой вопрос :)
Спасибо!
Александр Мальцев
Александр Мальцев
Привет!
В условии оператора if находится false. Значит оно ложно. А если ложно, то выполняется else.
Катя
Катя
Да, точно) в голове путались понятия ложности условия и ложности значения переменной в условии) спасибо!!!
Карина
Карина
Здравствуйте. Я только начала учить JS. Есть такая задача (всем известная):
Если переменная a равна нулю или равна двум, то прибавьте к ней 7, иначе поделите ее на 10. Выведите новое значение переменной на экран. Проверьте работу скрипта при a, равном 5, 0, -3, 2.

Я уже раз 10 код переделывала. Ничего не выходит. В учебнике такой инфо нет.

Не хочу здесь писать все свои неправильные варианты. Можете правильный написать. Я хоть проанализирую и пойму.

А то уже психовать начала…
Карина
Карина
Спасибо, уже поняла. Не тот знак вычисления поставила…
Ekaterina
Ekaterina
Александр, подскажите, пожалуйста, где ошибка?
Условие: волонтеры разделены на 5 групп с равным кол-вом человек в каждой. Если в какой-либо группе меньше 5 человек, то для восстановления количества, необходимо набрать еще волонтеров. Напишите программу, которое берет фактическое количество волонтеров в качестве вводных данных и выводит в консоль количество кол-во волонтеров, которое необходимо нанять, чтобы во всех 5 группах их было поровну.

Пример ввода данных: 24
Пример выходных данных: 1

Пояснение: ближайшее число к 24, кратное 5-25, поэтому нам нужен еще 1 волонтер (24+1=25), чтобы во всех группах было равное количество.
Если дополнительные волонтеры не требуются -то результат должен быть равен 0.
Используйте оператор (%) деления по модулю для возврата остатка от деления.

Решение:
function main() {
  var numberVolunteers = parseInt(readLine(), 10)
  // введите ваш код сюда
  if (numberVolunteers % 5 = 0) {
    console.log(0)
  } else {
    console.log( не знаю)
  }
}
В заданном условии три вводных числа: 14,36 и 25.
Александр Мальцев
Александр Мальцев
Код будет следующим:
if (numberVolunteers % 5 === 0) {
  console.log(0)
} else {
  console.log(5 - numberVolunteers % 5)
}
Vlad Kallistov
Vlad Kallistov
А можно всё это записать по другому, например при помощи оператора «?:», а не «if else». Если можно, то как? Я учусь по программе и она мне задала такую же задачу но «if else» по ходу обучения не было, а значит наверное можно с помощью «?:». Подскажите как решить?
Александр Мальцев
Александр Мальцев
Конечно можно. Будет так:
const result = numberVolunteers % 5 === 0 ? 0 : 5 - numberVolunteers % 5;
console.log(result);
Vlad Kallistov
Vlad Kallistov
Ну ничего себе, ты мастак. СПС большое.
Vlad Kallistov
Vlad Kallistov
А что за const result, ет типо переменная, в проге где я учусь нужно var (переменная)=..., Можеш обеснить почему const result, и в кратце код, я думал ?: Может вывести только false или true а обе сразу не может. А там выводиться обе.
Александр Мальцев
Александр Мальцев
Какие ключевые слова имеются в JavaScript для создания переменных можешь почитать в этой теме. Там всё подробно описано.
Язык JavaScript быстро развивается. Программа для обучения наверно просто не включает изучения нового синтаксиса.
В тернарном операторе «?:» сначала указывается условие. В данном примере — это «numberVolunteers % 5 === 0». Когда оно истинно возвращается то, что указано после знака «?», в данном случае — 0. В противном случае (когда условие ложно) то, что идёт после «:». Здесь — результат вычисления выражения: «5 — numberVolunteers % 5».
Vlad Kallistov
Vlad Kallistov
Типерь понял спасибо )) вы Кросс.
Ekaterina
Ekaterina
Александр, добрый день!
Решаю задачи на тренажере.
Подскажите, пожалуйста, что я делаю не так?

Условие:
Напишите программу, которая в качестве вводных данных использует возраст пользователя, проверяет, является ли пользователь взрослым, и выводит в консоль соответствующее логическое значение.

Пример ввода данных: 20
Пример выходных данных: true

Если пользователю 18 лет, то он считается взрослым.

Код:
function main() {
  var age = parseInt(readLine(age), 10)
  // дальше нужно ввести свой код. Мой код:
  if ( age>=18 ) {
    return true
  } else{
    return false
  }
}
В тренажере в результате стоит значение 15, то есть ожидаемый результат в этом случае false.
Мне указывает «Неверно, ищи ошибку».
Александр Мальцев
Александр Мальцев
Вывод в консоль выполняется с помощью «console.log».
Может так:
// дальше нужно ввести свой код
console.log(age >= 18);
Ekaterina
Ekaterina
Ура! Получилось, спасибо!
Правильно вот так:
if (age >=18 ) {
  console.log(true)
}
else {
  console.log(false)
}
Александр, можно уточнится еще. Почему, когда я возвращаю значение через return, результат неверный? Это так настроен тренажер? Ведь если я в рабочем режиме пишу приложение, в консоль я вывожу только же для того, чтобы проверить код. Правильно ли я понимаю?
Александр Мальцев
Александр Мальцев
У вас же в задании было условие вывести в консоль, а не вернуть значение. Это разные вещи. Да, консоль обычно применяется при разработке кода, для вывода разных сообщений. На продакшене такое обычно не используют.
Ekaterina
Ekaterina
Ясно, спасибо за разъяснения!
Vadim
Vadim
и еще подсобите с этим заданием

Функция getRectangleArea принимает 1 сторону side, и диагональ diagonal прямоугольника. Проверь это прямоугольник (диагональ не может быть меньше сторону прямоугольника). Думал математика не понадобится в жизни? Верни площадь этого прямоугольника или строку not a rectangle если это не прямоугольник. Если результат не целое число, округли значение до 2 знаков после запятой.

примеры:

getRectangleArea (10, 20) === 173.2
getRectangleArea (9, 18) === 140.29
getRectangleArea (100, 98) === 'not a rectangle'

спасибо
Александр Мальцев
Александр Мальцев
Пример решения задачи:
// side - сторона прямоугольника
// diagonal - диагональ прямоугольника
const getRectangleArea = (side, diagonal) => {
  if (side > diagonal) {
    return 'not a rectangle';
  }
  return Math.floor(Math.sqrt(Math.pow(diagonal, 2) - Math.pow(side, 2)) * side * 100) / 100;
}
Vadim
Vadim
приветствую!
помогите решить задачу

Через каждые N месяцев IT School проводит networking вечеринку для новых студентов, выпускников, и тех, кто хочет начать учиться в IT School.

Но иногда все идет не так как хотелось и заведения закрываются на карантин. Посчитай в функции countNetworking сколько вечеринок проведет IT School за год, зная продолжительность карантина K в месяцах, который может начаться только в начале года.

примеры:

countNetworking (11, 1) === 1 K = 11 N = 1, всего одна вечеринка.
countNetworking (0, 6) === 2 K = 0, N = 6, две вечеринки в год.
countNetworking (2, 2) === 5 K = 2, N = 2, 5 вечеринок
countNetworking (6, 3) === 2 K = 6, N = 2, встречи на 1 и 4 месяца. Все остальное время заведения на карантине.

спасибо
Александр Мальцев
Александр Мальцев
Привет!
Её можно решить так:
// k - карантин в месяцах с начала года
// n - через какое количество месяцев проводится вечеринка
const countNetworking = (k, n) => {
  return parseInt((12 - k) / n);
}
Vadim
Vadim
Приветствую
помогите разобраться где ошибка
спасибо
function getBoolean(a, b, c, d) {
  if (a) {
    if (a > b) {
      if (c > d) {
        if (a < c) {
          return true;
        }
      }
    }
  } if (b) {
      if (b > a) {
        if (c > a) {
          return true;
        }
      }
  } if (c > d) {
      if (d) {
        if (d < a) {
          return true;
        }
      }
  }
}
Vadim
Vadim
вот более полный код но все равно выбивает ошибку
function getBoolean(a, b, c, d) {
  if (a) {
    if (a > b) {
      if (c > d) {
        if (a < c) {
          return true;
        }
      }
    }
  } if (b) {
      if (b > a) {
        if (c > a) {
          return true;
        }
      }
  } if (c > d) {
      if (d) {
        if (d < a) {
          return true;
        }
      }
  } 
  else {
    return false;
  }
}
Vadim
Vadim
разобрался :)
Vadim
Vadim
Добрый день.
Как переписать данный код в switch case?
function manageHomeRoutines(task) {
  return task === 'clean' ? 'petya'
    : task === 'make_breakfast' ? 'misha' : task === 'write_code' ? 'petya'
      : task === 'adjust_lights' ? 'vasya' : task === 'review_pull_request'
        ? 'misha'
        : task === 'set_up_an_alarm' ? 'siri' : task
          === 'check_weather' ? 'siri'
          : task === 'take_out_garbage' ? 'vasya' : 'masha';
}
Vadim
Vadim
спасибо
Александр Мальцев
Александр Мальцев
Привет!
Код в этой конструкции будет следующим:
function manageHomeRoutines(task) {
  switch (task) {
    case 'clean':
      return 'petya';
    case 'make_breakfast':
      return 'misha';
    case 'write_code':
      return 'petya';
    case 'adjust_lights':
      return 'vasya';
    case 'review_pull_request':
      return 'misha';
    case 'set_up_an_alarm':
      return 'siri';
    case 'check_weather':
      return 'siri';
    case 'take_out_garbage':
      return 'vasya';
    default:
      return 'masha';
  }
}
Margaret
Margaret
Привет!

Как быть с простейшей задачкой?

//нужно рассчитать значение, которое в итоге будет в переменной z

int x = 7;
int y = 9;
int z = 5;
if(x + z > y){
y += x + z;
z = y — 5;
}
else{
y -= x + z;
z = y — 5;
}
Александр Мальцев
Александр Мальцев
Привет! Это же не JavaScript.
Тут всё просто:
int x = 7;
int y = 9;
int z = 5;
// 7 + 5 > 8 -  истина 
if(x + z > y){
// y будет равен y + x + z, т.е. 21
y += x + z;
// z будет равен 21 - 5, т.е. 16
z = y — 5;
}
else{
y -= x + z;
z = y — 5;
}
В результате, в z будет значение 16.
Navolokin Roman
Navolokin Roman
Наш робот принимает команду в свой терминал в виде строки back,forward, left, right, stop. Далее своими кибер мозгами он молниеносно конвертирует значение в x и y и посылает импульс с координатами в свои робоконечности в виде строки hor=x ver=y Так, например, команда left это сигнал -1 для x и сигнал 0 для y, а forward это сигнал 0 для x и сигнал 1 для y. Ну как? Поможешь нам научить нашего робота ходить правильно? Нам нужна функция getDirection, которая будет принимать строкуdirection с направлением движения и возвращать строку в формате упомянутом выше. А и еще… Наш робот еще не проходил наши уроки по conditional operators, поэтому придется использовать switch case. Для команд которые не может обработать наш робот используй блок default в switch case в котором сигналы для x и y будут равны 0.

Если есть время, подскажите с решением
Александр Мальцев
Александр Мальцев
Рещить эту задачку можно так:
const getDirection = (direction) => {
  let x = 0;
  let y = 0;
  switch (direction) {
    case 'back':
      x = 0;
      y = -1;
      break;
    case 'forward':
      x = 0;
      y = 1;
      break;
    case 'left':
      x = -1;
      y = 0;
      break;
    case 'right':
      x = 1;
      y = 0;
      break;
    case 'stop':
      x = 0;
      y = 0;
      break;
    default:
      x = 0;
      y = 0;
      break;
  }
  return `hor=${x} ver=${y}`;
};
Navolokin Roman
Navolokin Roman
Спасибо, что помогаете
Navolokin Roman
Navolokin Roman
Создай функцию getLargestExpressionResult, которая принимает два числа a и b и возвращает наибольший возможный результат среди выражений:

a + b
a — b
a * b
a / b
ограничения:

Имей в виду, что a и b могут быть отрицательными.
Не используй тернарный оператор или ключевое слово else.
Не используй объект Math.

подскажите с решением
Александр Мальцев
Александр Мальцев
В этом случае можно результаты операций представить посредством массива. А затем с помощью forEach найти среди них максимальный:
// объявляем функцию getLargestExpressionResult
const getLargestExpressionResult = (a, b) => {
  const items = [a + b, a - b, a * b, a / b];
  let max = items[0];
  items.forEach((item) => {
    if (item > max) {
      max = item;
    }
  });
  return max;
};

// вызываем функцию getLargestExpressionResult и сохраняем результат в max
const max = getLargestExpressionResult(5, 5);
// выводим max в консоль
console.log(max);
Probel
Probel
Спасибо большое, буду внимательнее! Не придал значение id
Probel
Probel
Подскажите пожалуйста. У меня имеется массив постов. Мне нужно считывать из каждого нового поста определенное поле и записывать его значение в переменную для обработки условным оператором что бы выводить нужную мне надпись. Но в переменную записывается значение только из последнего выведенного поста. И как итог во всех постах выводится одно значение истины.
Вот сам код:
<?php if( is_category() ) {
  $cat_name = get_queried_object()->name;
  $cat_slug = get_queried_object()->slug;
  echo $cat_name;
}
?>

<?php 
// параметры по умолчанию
  $args = array(
    'numberposts' => -1,
    'category'    => ("65"),
    'orderby'     => 'ID',
    'order'       => 'ASC',
    'include'     => array(),
    'exclude'     => array(),
    'meta_key'    => '',
    'meta_value'  =>'',
    'post_type'   => 'post',
    'suppress_filters' => true, // подавление работы фильтров изменения     SQL запроса
  );
  $posts = get_posts($args);
  foreach ($posts as $post) {
    setup_postdata($post);
?>

<!-- Тут выводим содержимое массива -->
<div class="col-lg-4">
  <div class="item_buldors_new">
    <a href="<?php the_permalink(); ?>">
      <div class="buldors_new_title">
        <h2><?php the_field("model_buldors"); ?></h2>
        <span class="buldors_new_discription"><?php the_field("lozung_buldors"); ?></span>
      </div>
      <div class="buldors_new_img">
        <?php the_post_thumbnail(); ?>
        <span class="buldors_new_price">От <span><?php the_field("prace_buldors"); ?></span> руб.</span>
        <span class="buldors_new_akcia">
          <span id="buldors_new_akcia" val="<?php the_field("prace_buldors"); ?>"></span>
          <script>
            var buldors_new_akcia, result;
            buldors_new_akcia = document.getElementById('buldors_new_akcia').value;
            buldors_new_akcia = parseInt(buldors_new_akcia);
            price = 17000;  
            if (buldors_new_akcia >= price) {
                console.log('Монтаж в подарок!');
            } else {
                console.log('Доставка в подарок!');
            }
          </script>
        </span>
      </div>
    </a>
    <p><?php the_excerpt(); ?></p>
  </div>
</div>
<?php
  }
  wp_reset_postdata(); // сброс
?>
Помогите как спасти ситуацию.
Александр Мальцев
Александр Мальцев
Привет!
Нельзя элементам на странице назначать один и тот же id:
<span id="buldors_new_akcia" val="<?php the_field("prace_buldors"); ?>"></span>
У тебя выводится значение истины всегда для первого элемента, который первым встречается на странице с указанным id. Здесь необходимо использовать классы.
При этом скрипт желательно создать всего один раз на странице и обработать с помощью него сразу все элементы и вывести то что необходимо.
Например:
<script>
  var
    elements = document.querySelectorAll('.buldors_new_akcia :first-child'),
    price = 17000;

  elements.forEach(function (element) {
    var newElement = document.createElement('span');
    if (element.getAttribute('val') > price) {
      newElement.textContent = 'Монтаж в подарок!';
    } else {
      newElement.textContent = 'Доставка в подарок!';
    }
    element.parentElement.append(newElement);
  })
</script>
Данный скрипт в каждом элементе с классом buldors_new_akcia создаёт новый элемент span с текстом соответствующей акции.