Перезапись возможно неизменившихся значений в пин.

telets
Offline
Зарегистрирован: 25.08.2019

Здрасвствуйте. Большая просьба помочь с вопросом о предпочтительном варианте записи в пин.

Первый вариант:

If ( условие_включения ) {

if ( pin_state == LOW ) digitalWrite(PIN,HIGH);

pin_state=HIGH;

}

Второй вариант:

pin_state=LOW;

if ( условие_включения ) pin_state=HIGH;

digitalWrite(PIN,pin_state);

Равнозначны ли эти варианты или один из них более предпочтителен. Если верно второе, то почему?

 

 

 

 

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Здравствуйте, большая просьба выкладывать коды так, как это принято на данном форуме.

Первый вариант (он же и последний): Вставка программного кода в тему/комментарий

astwo
Offline
Зарегистрирован: 10.07.2019

Вот и для меня загадка. Что вкуснее хлеб с колбасой или колбаса с хлебом.
Пс: ну как иначе отвечать на такие вопросы.

telets
Offline
Зарегистрирован: 25.08.2019

Спасибо за комментарии. И прошу прощения за нарушение правил - исправлюсь. Наивно думал, что краткость кода не требует его специального оформления.

О мотивах вопроса. Первый вариант дольше и требует большего объема памяти, особенно для более чем одного параметра. Второй вызывал смутные сомнения относительно нежелательных последствий для состояния аппаратуры или при эксплуатации - мигания, мерцания, зависания. Если все это неактульно, получается, второй вариант предпочтительней в силу более простого кода.

sadman41
Offline
Зарегистрирован: 19.10.2016

Компилятору пофигу на размер писанины - он всё равно по-своему оптимизирует.

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

ИМХО так правильнее

if ( условие_включения ) pin_state=HIGH;
else if(условие выключения) pin_state = LOW;
digitalWrite(PIN,pin_state);

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

telets пишет:

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

Первый вариант Вам кажется сложнее потому, что там внутренний if нафиг не нужен, можно спокойно выкинуть. Результат-то один - при выполнении условия пин перейдёт (или останется) в HIGH. По сути у Вас в одном случае сначала установить пин, потом запомнить состояние, а в другом наоборот. И вся разница.

telets
Offline
Зарегистрирован: 25.08.2019

Спасибо.

sadman41, спасибо за замечание - учту.

anatoli_nik, там условие включения одного светодиода является условием выключения других. Это индикаторные светодиоды температуры. Поэтому о ветке кода 

else if

я и не спросил.

kalapanga, "там внутренний if нафиг не нужен, можно спокойно выкинуть" - вот это и было непонятно. Думал, что это выкидывание может иметь какие-то негативные последствия. Спасибо, что дали прямой ответ.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Компилятору пофигу на размер писанины - он всё равно по-своему оптимизирует.

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

b707
Offline
Зарегистрирован: 26.05.2017

anatoli_nik пишет:

ИМХО так правильнее

if ( условие_включения ) pin_state=HIGH;
else if(условие выключения) pin_state = LOW;
digitalWrite(PIN,pin_state);

ваш код можно записать в одну строчку, ваще без if :)

digitalWrite(PIN,(условие включения));

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

anatoli_nik пишет:

ИМХО так правильнее

if ( условие_включения ) pin_state=HIGH;
else if(условие выключения) pin_state = LOW;
digitalWrite(PIN,pin_state);

ваш код можно записать в одну строчку, ваще без if :)

digitalWrite(PIN,(условие включения));

 

Точнее:

digitalWrite(PIN, pin_state = (условие включения));