Страница 1 из 4

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 16:36
Dryundel
Конвертер String >> Boolean
.
String-Boolean.jpg
Конвертер_String____Bool_(Code_-_Professional).ubi
.
Конвертирует строковую переменную в Boolean.
При наличии на входе "0" - на выходе логический ноль.
В других случаях логическая единица.
Актуален при работе с MQTT

Расширенная версия блока
.
String-Boolean(расширенный).jpg
String-Boolean(расширенный).flp
.
В расширенной версии добавлен параметр выбора логики:
- В случае проверки на ноль, - при "0" на входе, на выходе будет логический ноль,
во всех других случаях на выходе будет логическая единица.
- В случае проверки на единицу, - при "1" на входе, на выходе будет логическая единица,
во всех других случаях на выходе будет логический ноль.

Блок не создает дополнительных переменных и имеет короткий код.

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

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 18:42
Phazz
Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 18:46
Rovki
Phazz писал(а): 07 окт 2021, 18:42 Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение
Согласен . А то кто то матюкнется и включится обогрев , свет. :smile453:
и не совсем понятно что значит "0" в стринге , слово что ли , или отсутствие символов ? И почему нельзя использовать штатное сравнение строк ?

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 18:51
Naladchik
Dryundel писал(а): 07 окт 2021, 16:36 При наличии на входе "0" - на выходе логический ноль.
При таком решении я бы проверял на единицу, по мне так логичнее.
(<S> == "1") ? 1 : 0

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 18:59
Dryundel
Phazz писал(а): 07 окт 2021, 18:42 Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение
Не согласен.
Во первых из аналогии if(int Val) { } следует именно такая логика.
Во вторых если на выходе bool то и на "1" тоже буде логическая единица.
В третьих код будет гораздо длиннее.
Есть и ещё несколько мелких ЗА такой вариант.

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 20:21
Phazz
Как раз в логике boolean 1 это 1 или true. А вот 0 это все что не 1. Если например из integer в bool

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 21:19
Dryundel
Phazz писал(а): 07 окт 2021, 20:21 Как раз в логике boolean 1 это 1 или true. А вот 0 это все что не 1. Если например из integer в bool
Какой смысл переводить integer в bool ?
И в каких случаях по вашему это может пригодиться?

Вероятно Вы не поняли аналогию которую я приводил в пример.
Хорошо, давайте подробнее поясню.

Когда создается условие относительно boolean valBool, то можно написать так:
if ( valBool == 1 )
или так:
if ( valBool )
Результат один и тот же.

В случае с ineger valint тоже можно написать:
if ( valint == 1 )
В этом случае условие выполнится только если valint = 1
А можно написать:
if ( valint )
Тогда условие будет выполняться при любых значениях valint отличных от "0".
Т.е. если речь идет о физическом пине то если:
if ( valint ) {digitalWrite(lPin, 1);}
При любом значении valint - на пине появится высокий уровень и лишь при valint = 0, на пине будет низкий уровень.

Теперь рассмотрим следующий момент:
Предположим мы управляем яркостью светильника через MQTT
А я упоминал что:
Dryundel писал(а): 07 окт 2021, 16:36 Актуален при работе с MQTT
Ну так вот в этом случае, одной переменной мы можем управлять сразу двумя устройствами - включателем и диммером.
Пришло "50" - включатель включился, диммер выставился на 50%
Пришло "80" - включатель включился, диммер выставился на 80%
Пришло "0" - включатель выключился, что с диммером уже без разницы.
2021-10-07_211633.jpg
.
Вот исходя из этих мелочей и принималось решение задействованной логики.
.

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 21:38
Rovki
А зачем тогда при шиме =0 выключатель ? Для гальванической развязки ? Обычно делают шим ,у которого при уставке 0 ,на выходе нет импульсов(напряжение 0) , а при 100% нет пауз ( напряжение максимальное) , во всех других случаях длительность импульса пропорциональна уставке( лучше не линейная зависимость для освещения).

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 21:53
Phazz
[ref]Dryundel[/ref], Ну чтож хозяин - барин.

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 21:58
Dryundel
Rovki писал(а): 07 окт 2021, 21:38 А зачем тогда при шиме =0 выключатель ?
А затем, что бы обесточить высоковольтную часть прибора. Убедительно? :)
Если да, то дальнейшая часть реплики вероятно отпадает. :)

Мне нравятся все эти правильные вопросы. Всегда рад, аргументированно отвечать за свою работу. :)
Phazz писал(а): 07 окт 2021, 21:53 Dryundel, Ну чтож хозяин - барин.
Неужели не убедил?
Готов выслушать Ваши аргументы.

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 22:20
alexbonk
Dryundel писал(а): 07 окт 2021, 21:58 Какой смысл переводить integer в bool
чтобы в флпрог возможно было подать bool на вход, где требуется именно bool на входе.
И по другому никак))))

или вы можете предложить решение как можно на булеан-вход подать сразу интеджер? думаю не можете.

Отправлено спустя 3 минуты 12 секунд:
Dryundel писал(а): 07 окт 2021, 16:36 Актуален при работе с MQTT
что мешает слать в этом случае "on/off" например?

Отправлено спустя 2 минуты 29 секунд:
Dryundel писал(а): 07 окт 2021, 22:17 Ну так вот в этом случае, одной переменной мы можем управлять сразу двумя устройствами - включателем и диммером.
Пришло "50" - включатель включился, диммер выставился на 50%
Пришло "80" - включатель включился, диммер выставился на 80%
Пришло "0" - включатель выключился, что с диммером уже без разницы
это что за экономия? ресурсов? ресурсов чего?

ладно бы еще такие костыли использовать при модбасе или асме...
Но использовать такое в mqtt )))))

более того - если эти циферки будут в стринге - то можно точно также управлять и диммером и устройством))))

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 22:20
Phazz
[ref]Dryundel[/ref], вам уже ответили, случайные данные могут включить например свет

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 22:32
alexbonk
Phazz писал(а): 07 окт 2021, 22:20 вам уже ответили, случайные данные могут включить например свет
например в момент ребута.
особенно интересно будет если стринг в это время прилетает из юарта.

логика видать такая:
но ведь там же не 0? нет! а что там? мусор! ок, если там не 0, тогда включаем выход в 1.... :smile9: :D :smile390:

Конвертер String >> Boolean

Добавлено: 07 окт 2021, 23:43
Dryundel
alexbonk писал(а): 07 окт 2021, 22:20 чтобы в флпрог возможно было подать bool на вход, где требуется именно bool на входе.
И по другому никак))))
Это философская теория. Попробуйте привести реальный пример действий при которых у вас появляется integer который требуется подать на цифровой пин.
alexbonk писал(а): 07 окт 2021, 22:20 что мешает слать в этом случае "on/off" например?
Зачем? Для чего? Какой смысл если надо 0 /1 ? Ничего не мешает слать 0 или 1.
alexbonk писал(а): 07 окт 2021, 22:20 это что за экономия? ресурсов? ресурсов чего?
А хоть бы и так. Экономия ресурсов. Трафик String и преобразования весьма ресурсоемкая операция.
Хотя есть и другие тонкости, об этом я писал выше. Будьте чуть внимательней.
Phazz писал(а): 07 окт 2021, 22:20 Dryundel, вам уже ответили, случайные данные могут включить например свет
alexbonk писал(а): 07 окт 2021, 22:32 например в момент ребута.
особенно интересно будет если стринг в это время прилетает из юарта.
Какие случайные данные? О чем Вы? С какого ребута?
Вот так случайно с ребута сгенерировался случайный адрес топика и вот так случайно в него закинулся мусор? Что за бред?
Хотя по теории вероятности и обезьяна может написать "Войну и мир" если потратит на это миллиард миллиардов обезьяно-веков.

Господа, вы решили взять числом? Прикольно. :smile171:

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 04:49
alexbonk
Dryundel писал(а): 07 окт 2021, 21:38 ГОСПОДА, ВЫ РЕШИЛИ ВЗЯТЬ ЧИСЛОМ?
орут обычно когда уже не могут аргументировать :smile110:
Будьте чуть внимательнее, а то еще изобретете велосипед

Отправлено спустя 3 минуты 36 секунд:
Dryundel писал(а): 08 окт 2021, 04:42 адрес топика
эк как вас заклинило то на mqtt.
А если чуть шире глянуть?

Отправлено спустя 3 минуты 38 секунд:
Dryundel писал(а): 08 окт 2021, 04:45 и вот так случайно в него закинулся мусор
именно.
А у нас то что? А у нас же "если не 0, то ставим выход в true".
Вот именно это бред.

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 07:20
rw6cm
Не пойму о чем здесь спор?
Надо сделать так как нам хочется, или как гласит правило С++
По правилу: "Если значение переменной типа bool есть ненулевым, то оно считается равным true.
Если значение переменной типа bool равно 0, то оно считается равным false."
Какие могут быть претензии???
Если хотите добавить в блок дополнительную опцию, достаточно вежливо попросить.

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 08:33
Dryundel
alexbonk писал(а): 08 окт 2021, 04:49 орут обычно когда уже не могут аргументировать
Будьте чуть внимательнее, а то еще изобретете велосипед
А ни кто и не орет. Заметьте, ни одного восклицательного знака. Меня наоборот радует эта дискуссия. Вы приводите свои аргументы, я свои. Это нормально. В споре рождается истина. По поводу велосипеда - явный перегиб с вашей стороны.
alexbonk писал(а): 08 окт 2021, 04:49 эк как вас заклинило то на mqtt.
А если чуть шире глянуть?
Я уже просил вас быть чуть внимательней.
Dryundel писал(а): 07 окт 2021, 16:36 При наличии на входе "0" - на выходе логический ноль.
В других случаях логическая единица.
Актуален при работе с MQTT
alexbonk писал(а): 08 окт 2021, 04:49
Dryundel писал(а): ↑Сегодня{, 04:45}
и вот так случайно в него закинулся мусор
именно.
А у нас то что? А у нас же "если не 0, то ставим выход в true".
Вот именно это бред.
Не надо выдергивать половину предложения из контекста. Это по меньшей мере не вежливо.
rw6cm писал(а): 08 окт 2021, 07:20 По правилу: "Если значение переменной типа bool есть ненулевое, то оно считается равным true.
Если значение переменной типа bool равно 0, то оно считается равным false."
Какие могут быть претензии???
Именно из подобных соображений и делалась логика. Спасибо за дополнительный аргумент.
.
А вообще блок создавался не с потока, а для определенных целей, как дидактический материал в преддверии заполнения вот этого топика Топик #6.

.

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 08:52
Phazz
И что мешает сделать if else? Как это отразится на мк? Подозреваю что практически никак. Ну если у вас такое отношение к критике (хотя сами очень любите критиковать других), то наверно больше не стоит. Раз вы тут один Д'Артаньян. Пусть будет так.

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 09:22
alexbonk
Dryundel писал(а): 08 окт 2021, 08:33 А ни кто и не орет
у вас там выше капслоком же написано.

Отправлено спустя 4 минуты 11 секунд:
Phazz писал(а): 08 окт 2021, 08:33 И что мешает сделать if else?
только тссс не подсказывайте :)
ну нужен кому-то еще один велосипед :)
ну пусть будет так.

Конвертер String >> Boolean

Добавлено: 08 окт 2021, 09:26
Dryundel
Phazz писал(а): 08 окт 2021, 08:52 И что мешает сделать if else? Как это отразится на мк? Подозреваю что практически никак.
Вот здесь Вы ошибаетесь.
Если использовать if else, то не получается сделать блок который не создает ни одной дополнительной переменной ни по входу ни по выходу. А теперь представьте что у вас 50 каналов управления. Это +50 переменных String и еще столько же дополнительных boolean. Как Вы думаете, это никак не повлияет на размер проекта? К стати, boolean, если не находится в массиве, занимает 8 бит. Вот такая реальность.
Phazz писал(а): 08 окт 2021, 08:52 Ну если у вас такое отношение к критике (хотя сами очень любите критиковать других), то наверно больше не стоит.
А какое у меня отношение к критике?
На каждый аргумент я отвечаю контраргументом.
Что не так? А как надо?
Phazz писал(а): 08 окт 2021, 08:52 Раз вы тут один Д'Артаньян. Пусть будет так.
Ну раз у вас больше нет аргументов, то действительно, пусть будет так. :)

Отправлено спустя 1 минуту 37 секунд:
[ref]alexbonk[/ref], не стоит переходить на хи-хи. Есть что сказать по делу, давайте будем обсуждать.