Правильный код на С++
- Войдите на сайт для отправки комментариев
Ср, 18/09/2019 - 17:48
Вопрос наверное философский или из раздела кому как удобней, но все же.
Имеем некое условие (состояние реле) при котором отправляем то или иное сообщение на MQTT.
Как будет правильно оформить код?
Вариант #1
if (digitalRead(RELAY)) { client.publish(mqtt_state_topic, "1"); } else { client.publish(mqtt_state_topic, "0"); }
Вариант #2 (без фигурных скобок)
if (digitalRead(RELAY)) client.publish(mqtt_state_topic, "1"); else client.publish(mqtt_state_topic, "0");
Вариант #4 (используем тернарный оператор)
digitalRead(RELAY) ? client.publish(mqtt_state_topic, "1") : client.publish(mqtt_state_topic, "0");
Ну и на закуску если кусок используем в нескольких местах.
Обычная функция или встроенная?
inline void sendStateRelay(){ digitalRead(RELAY) ? client.publish(mqtt_state_topic, "1") : client.publish(mqtt_state_topic, "0"); }
с точки зрения логики все варианты неверные, так как топик нужно публиковать только в случае, когда состояние реле изменилось.
В вашем случае. если вы например поставите свою функцию в loop() - у вас обновление топика будет формироваться десятки и сотни раз в секунду, что перегрузит сеть и сервер
А если мы сначала в обработчике кнопки сменим состояние реле и в нем же сделаем вызов функции с логикой думаю все нормально будет ;) А еще после реконекта с сервером отправим в топик состояние реле.
С точки зрения экономии траффика - нужно публиковать при изменении состояния, это верно. Но, учитывая концепцию MQTT "Shoot and forget", я бы склонялся к периодической публикации топика с любым значением. Нужно только вычислить интервал, отвечающий допустимой задержке срабатывания удалённого устройства.
Все же вопрос не стоит в том когда и как работать в с MQTT, а в правильности написания кода.
А зачем вообще два одинаковых вызова функции? Думаете соптимизирует? Сомневаюсь. Скорее, так два и всунет. Почему одним вызовом не обойтись? Типа
ну, или, в варианте для девочек:
Я б чёнить подобное написал бы.
Все же вопрос не стоит в том когда и как работать в с MQTT, а в правильности написания кода.
Хорошо, выкинем MQTT.
Вы думаете, что оптимизатору компилятора не пофигу - через if() или через тернарный?
Сейчас Ваш вопрос выглядит так: "Кому как нравится буквочки расставлять?"
С инлайном так же. Будет один вызов - легко получите auto-inline. В отрыве от основного кода рассуждение о таких вещах - сплошная маниловщина.
client.publish(mqtt_state_topic, digitalRead(RELAY) ? "1" : "0");
Я б чёнить подобное написал бы.
Сейчас Ваш вопрос выглядит так: "Кому как нравится буквочки расставлять?"
С инлайном так же. Будет один вызов - легко получите auto-inline. В отрыве от основного кода рассуждение о таких вещах - сплошная маниловщина.
Об этих вещах и хотелось поговорить.
и к чему это написано?
Притормаживаю немного кавычки не досмотрел ;)
Не, это я неправильные кавычки впялил в первом примере, сорри. Сейчас поправил в #5
Такую конструкцию я считаю излишней, лучше как для девочек :)
Ну а вообще тема родилась после прочтения статей на тему красивый/правильный код на С++.
Да и нужно ли заморачиваться на это тему или нет, а писать как удобно и что в голову пришло. ))
Да и нужно ли заморачиваться на это тему или нет, а писать как удобно и что в голову пришло. ))
В 99% случаев не нужно, но в тех случаях, когда нужно экономить каждый байт программной памяти (или каждый такт быстродействия), то (исследую только память, быстродействие - сами):
1578
1558
1560
Вот и смотрите.
Не люблю многабукав, поэтому пытаюсь писать максимально компактно
Получается запись короче и на 2 байта меньше кушает.
Могу сделать вывод, что такая запись выигрывает по всем показателям.
Не люблю многабукав, поэтому пытаюсь писать максимально компактно
Стало интересно как будет с меньшим числом буков.
Так оно и по памяти - чемпион (из того, что я рассмотрел). Так что, получается, "для девочек - самое лучшее!"
Одно дело когда в своем разбираешься, а вот совсем другое когда кто то в твоем коде голову ломает.
А если сам не можешь разобраться что писал, считаю этот случай печальным :(
В детстве тоже такие вопросы возникали, а теперь предпочитаю максимально читабельный вариант. Например, "для девочек". Экономия на спичках - она такая, сэкономил на копейку, да пропил на рубль.
Что первый, что второй вариант читается нормально, на мой взгляд.
Но во втором варианте запись короче и как выяснилось ресурсов меньше съедает.
Как уяснил для себя, кому как удобней.
А низя return (a==b); штоли? Клапа запретил?
или bool c = (a==b); если надо куданить присвоить...
Только если рилигиозные взгляды не позволяют ))
А низя return (a==b); штоли? Клапа запретил?
Я бы даже без скобок написал (ну, если не запретил, конечно).
А низя return (a==b); штоли? Клапа запретил?
Я бы даже без скобок написал (ну, если не запретил, конечно).
Признай, что чернила экономишь, как тот писарь из "Формулы любви"! ;))))
Если бы все скобки экономили, глядишь и компьютеры послабее требовались. Все ездили бы на запорожцах и по грунтовке.Ближе к корням предков ,к экологии ближе.
Если бы все скобки экономили, глядишь и компьютеры послабее требовались. Все ездили бы на запорожцах и по грунтовке.Ближе к корням предков ,к экологии ближе.
Звучит как призыв бросить программирование и в руки лопату )))
Признай, что чернила экономишь
А то! Они ж дороже шанели №5 стоють!