Путь к молоку. Просьба оценить!

var time = 15;

var goToDairy = false;
var goToStore = false;
var goToMarket = false;

if(time == 7 || time == 20 || time == 14 || time == 19) {
goToMarket = true;
goToStore = false;
goToDairy = false;
}
else if(time == 13) {
goToStore = true;
goToMarket = false;
goToDairy = false;
}
else if(time < 7 || time >= 20) {
goToDairy = false;
goToMarket = false;
goToStore = false;
}
else {
goToDairy = true;
goToMarket = false;
goToStore = false;
}

Мне кажется можно короче, но я не знаю как.

  1. Так как все значения переменных “goTo…” до условия являются ложными, то по-новой переопределять их с тем же значением в условии - избыточно. Избавимся от всех переопределений переменных “goTo…” в условиях, если только мы не переопределяем их как true. Таким образом, то, что нужно, на выходе будет true, остальное, как и раньше - false.
  2. Структуру кода тоже можно сократить. Можно отталкиваться не от времени похода Кекса за молоком, а от того, куда он должен идти. Таким образом получим только три “ветки” условия: основную и две альтернативных.
  3. Начнём с самого удобного варианта для Кекса:
Кекс идёт на молокозавод

if (time >= 8 && time < 13 || time >= 14 && time < 19) {
goToDairy = true;
}

  1. Потом пропишем альтернативу (на молокозаводе обед, поэтому идём в магазин, в остальных случаях идти в магазин Кексу не удобно):
Кекс идёт в магазин
else if (time >= 13 && time < 14) {
  goToStore = true;
}
  1. Последним шагом будет условие для рынка, куда Кекс идёт, когда а)молокозавод не открылся или б)молокозавод уже не работает.
Кекс идёт на рынок

else if (time >= 7 && time < 8 || time >= 19 && time < 20) {
goToMarket = true;
}

в соседней ветке мы уже обсуждали это, в общем самое норм прописать просто в порядке приоритета в условиях режим работы, а командами else if вызывается следующая в приоритете точка продажи.

вот так
if (time >= 8 && time < 13 || time >= 14 && time < 19) {
  goToDairy = true;
} else if (time >= 9 && time < 14 || time >= 15 && time < 17) {
  goToStore = true;
} else if (time >= 7 && time < 20) {
  goToMarket = true;
}

Добрый день! Специально зарегистрировалась, что бы написать)
В прошлых практических задачах этой же главы на else if выдавало синтаксическую ошибку при написании кода, а в этой задаче ВНЕЗАПНО стало необходимым для решения. Причем в следующей задаче на else if опять выдает ошибку синтаксиса. Мне кажется, было бы логично в условии задачи Путь к молоку прописать, что конкретно в этой задаче МОЖНО (нужно?) использовать else if.

ошибка синтаксиса возникает при нарушении правил синтаксиса (sic!). от задания это не зависит.
код покажите, где возникает ошибка

1 лайк

Да, всё верно. Если вы правильно писали конструкцию с точки зрения синтаксиса, то система не могла показывать ошибку.


спасибо за ответы! это уже следущая глава, но та же проблема. не могу понять, где у меня ошибка в синтаксисе?

в восьмой строке в позиции ноль.

else if пишется так:

if (предикат1) {телоУсловия} else if (предикат2) {телоУсловия}

соответственно вы забыли закрывающую фигурную скобку
также у вас ошибка в 7 строке, в предпоследней позиции, просто с точки зрения интерпретатора она не грубая по синтаксису (но грубая по смыслу)

1 лайк

спасибо, нашла! только там не в фигурной скобке дело, а в “;” после первого if

нет, дело именно в скобке, ее надо было перенести на один символ правее.
вы сделали неверные выводы