Здравствуйте.
Впервые делаю устройство с экраном и несколькими кнопками, в котором уже существенное кол-во раз используется оператор if. Не смог найти объяснение работы else, когда в if несколько условий.
Прошу Вас помочь, немного растолковать.
Например if (PWMstate==HIGH&&PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ: {analogWrite(mosfet,PWMduty); PWMmode=HIGH;} if (PWMstate==LOW&&PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ: {digitalWrite(mosfet,LOW); PWMmode=LOW;}
почему стоит исп else а не два оператора if как в этом фрагменте ?
как будет “думать” else если его применить вместо второго if
Понимаю, что вопрос из азов но как не странно можно что то писать и не зная данных закономерностей, а хотелось бы понять.
В продолжение темы на старом форуме - Проверка нескольких условий | Аппаратная платформа Arduino
Спасибо.
Где стоит? В Вашем примере я никакого else не вижу, хотя … (см. важную ремарку ниже)
Он никак не думает, думает программист. В приведённом примере использование else вместо второго ifне эквивалентно приведённому коду.
Важная ремарка
примеры кода вставляйте так, как положено на этом форуме. Ваш пример должен был выглядеть так:
if (PWMstate==HIGH&&PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ:
{
analogWrite(mosfet,PWMduty);
PWMmode=HIGH;
}
if (PWMstate==LOW&&PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ:
{
digitalWrite(mosfet,LOW);
PWMmode=LOW;
}
Сейчас же он выглядит как полная бредятина хотя бы потому, что после знака //, всё до конца строки является комментарием. Вот и посмотрите, что у Вас получается.
Обычно, посты с такими кодами, как у Вас я вообще не читаю (и многие), т.к. их читать невозможно! Не знаю, что на меня нашло сейчас, но следующих Ваших сообщений с неправильно вставленным кодом я читать не буду.
На другом форуме мне как то написали, что моё любимое:
if(){}
if(){}
if(){}
чревато неправильностями
а верно так:
if(){}else{if(){}else{if(){}else{}}}
Я не поверил, пока не вляпался пару, тройку раз.
Поэтому надо чётко понимать разницу между этими вариантами, они совершенно разные с точки зрения логики.
А что тут обьяснять? В else попадет любой из вариантов, который не попал в исходный if
Образно говоря, если условие
IF ((Маша дура) И (Света умная))
то вариант else будет не только когда “наоборот” - “Маша умная, а Света дура”, но и все остальные комбинации тоже - когда обе девочки умные и когда обе не очень.
Что интерсно, если в исходном IF поставить вместо “И” - “ИЛИ” - расклад с else будет совершенно иным. Оставляю его вам на потренироватся.
Принял, спасибо. В рамках форума можно рассказать почему? … в особенности учитывая, что в if “всегда одно условие”
Спасибо, что подтвердили наличие фактической разницы, а не только стилистической. Хотелось бы понять в чём она заключается? … как не странно, во множестве интернет публикаций даются только примеры, делай-так, без пояснения сути процессов.
Ну что тут понимать то?
Вот в вашем коде два условия:
if (PWMstate==HIGH && PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ:
{
analogWrite(mosfet,PWMduty);
PWMmode=HIGH;
}
if (PWMstate==LOW && PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ:
{
digitalWrite(mosfet,LOW);
PWMmode=LOW;
}
А где еще два варианта? - варианта, когда и PWMstate PWMmode оба LOW и варианта, когда оба HIGH. Вы эти ветки вовсе не анализируете и код в этих случаях вообще ничего делать не будет.
А если второе условие заменить на else - отрабатаются все четыре.
вляпаться тут можно только если модифицировать переменную Х между операторами If, что на самом деле признак плохого стиля программирования.
Если писать правильно, то применение тут else будет бредом потому как любому ясно, что если X = 0, то оно уже не может быть один или два
Спасибо, эти два сообщения доходчиво ракскрывают суть. В голове не программиста даже такие казалось бы не сложные образы сходу не выстраиваются…с подсказками заметно быстрее осознаёшь. Товарищи, всем спасибо, понял разницу между if/else !