Страница 1 из 1
Где логика ?
Добавлено: 26 Апрель 2024, 13:17
Игорь Столяров
ДД !
Известный косяк синтаксиса Clarion - это отсутствие логического типа данных.
Но в то же время сам RTL видит разницу в передаваемом параметре:
Код: Выделить всё
I# = 2
If Choose(Not I#,1,2) <> Choose(I#,1,2)
Message('Это разное !')
end
Я тоже хочу сделать подобную функцию, в которой можно было бы определить какой тип имеет
передаваемое в параметре значение: логическое или цифровое.
Возможно ли такое в принципе ? Спасибо !

Где логика ?
Добавлено: 26 Апрель 2024, 15:17
ingasoftplus
определитесь, что это такое у вас
Потому как в Кларионе с логикой все просто
если сторока:
пустая = ЛОЖЬ
что-то есть = ИСТИНА
если число:
0 = ЛОЖЬ
любое<>0 = ИСТИНА
During logical evaluation,
any non-zero numeric value or non-blank string value indicates a
true condition, and
a null (blank) string or zero numeric value indicates a
false condition
Где логика ?
Добавлено: 26 Апрель 2024, 23:30
Игорь Столяров
ingasoftplus писал(а): 26 Апрель 2024, 15:17
Потому как в Кларионе с логикой все просто
К сожалению нет. Логики в Clarion вообще нет, она сделана через костыль.

И как следствие, в полном соответствии с процитированной Вами справкой:
Код: Выделить всё
S1 String(20)
Code
S1 = False
If S1 then Message('True').
И вроде всё правильно и в то же время через попу.

Про арифметические и строковые операции с "логическими" данными лучше даже не начинать.
Код: Выделить всё
If True - True = False - False then Message('True').
Где логика ?
Добавлено: 27 Апрель 2024, 7:25
finsoftrz
Игорь, без Вас очень скучно было.

По этой теме, лучше вопрос задавать с начала, как коллега уже написал, а не с середины. То есть опишите практическую ситуацию, в которой требуется отличать значения 0/1 от true/false.
Где логика ?
Добавлено: 27 Апрель 2024, 7:36
Игорь Столяров
finsoftrz писал(а): 27 Апрель 2024, 7:25
в которой требуется отличать значения 0/1 от true/false
Так я с этого и начал ... Просто читают с середины и отвечают, то что знают.
А вопрос был простой. Хочу сделать функцию, которая работает как Choose().
Т.е. выполняет действие в зависимости от того, что было в первом параметре: численное или логическое значение.
Но проблема в том, что логических значений в Clarion нет (в отличии от B4A например).
Где логика ?
Добавлено: 27 Апрель 2024, 8:03
finsoftrz
Начало это не то, что Вы хотите, а то, почему Вы это захотели.
Где логика ?
Добавлено: 27 Апрель 2024, 16:21
kreator
Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?
Где логика ?
Добавлено: 28 Апрель 2024, 16:32
gopstop2007
Игорь Столяров писал(а): 26 Апрель 2024, 13:17
Код: Выделить всё
I# = 2
If Choose(Not I#,1,2) <> Choose(I#,1,2)
Message('Это разное !')
end
Не понял, в чем проблема?
В левом - CHOOSE (condition [,truevalue, falsevalue ]), в правом - CHOOSE (expression ,value, value [,value...] )
У Вас condition = FALSE изначально )
Где логика ?
Добавлено: 28 Апрель 2024, 17:03
kreator
gopstop2007 писал(а): 28 Апрель 2024, 16:32
Игорь Столяров писал(а): 26 Апрель 2024, 13:17
Код: Выделить всё
I# = 2
If Choose(Not I#,1,2) <> Choose(I#,1,2)
Message('Это разное !')
end
Не понял, в чем проблема?
В левом - CHOOSE (condition [,truevalue, falsevalue ]), в правом - CHOOSE (expression ,value, value [,value...] )
У Вас condition = FALSE изначально )
Игорь только про то как определить на входе логическую переменную или арифметическую. А это только пример. Choose это как-то понимает. И ему нужен аналог.
Где логика ?
Добавлено: 28 Апрель 2024, 17:16
Дед Пахом
Посмотреть код CHOOSE в отладчике не предлагать.
Где логика ?
Добавлено: 28 Апрель 2024, 23:45
kreator
kreator писал(а): 27 Апрель 2024, 16:21
Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?
В развитие идеи. Есть функция evaluate, она сама всё сделает, не надо ничего распарсивать. И можно попробовать использовать тип ANY. Честно говоря, не часто использовал этот тип, поэтому не очень уверен.