Вот выдержка разговора наших участников о логических операциях в Salesforce, их глюках и преимуществах (группа Skype для salesforce разработчиков)
Gres: Нашел багу в компиляторе,
if(sObj.myCheckbox = false
&& sObj.myInt > 0) {
//code
}
Компилируется и выполняется
RasMisha: потому что myCheckbox - boolean
Gres: все равно прикольно
Gres: =)
wilder: а не должно....так как это сравнение, а не присвоение
Dmitry Lisovsky: там ведь только присвоение, без сравнения
Gres: что в условии можно делать присваивание
Gres: кст, тут один чел скидывал кучу примеров, на счет вычисления различных логических выражений в Apex, то что должно работать по документации на практике не работает
Gres: особенно связка бинарных опертаров с чем-либо
RasMisha: то есть вы никогда не видели такую конструкцию
RasMisha: a = b = false?
Dmitry Shnyrev: Круто! Я нет.
Gres: Например, Boolean Test_boolean3 = b4>b3 == b2 || b1
Gres: Рельно не видел?
Gres: 0_о
RasMisha: угадайте чему ровно b = false в таком выражении
RasMisha:
Dmitry Shnyrev: В смысле видел, в реальном применении не видел
RasMisha: это я к вопросу почему условие срабатывает
Gres: Boolean b = b1 | b2 & b3 | !b4^b1 не компилится
Dmitry Lisovsky: true
Dmitry Shnyrev: trueэто потому что операция присвоения выполнилась успешно.
RasMisha: эээ
Dmitry Lisovsky: а иначе никак)
RasMisha: иначе (b = false) = (b = false; return b; )
RasMisha: хотя компилер мог бы быть умнее
RasMisha: и всё равно не давать такое делать в условиях
RasMisha: поэтому a = false
RasMisha: и b = false
Dmitry Lisovsky: да, false
Gres: логично)
RasMisha: в реальном применении не видели я тоже надеюсь не увидеть
Dmitry Shnyrev: логично)из всей вашей логичной беседе о логиге это выглядит самым логичным
Gres: слишком много маслянного масла
RasMisha: ну и вообще
RasMisha: в той же джаве (на память точно не помню, но как-то так)
RasMisha: while ((line = input.nextLine()) != null) { ... }
Maxim Elets: ух сколько я пропустил)
Gres: Ну в циклах это более мене логично
Maxim Elets: while ((line = input.nextLine()) != null) { ... }а что тут не так?
Dmitry Lisovsky: логично)
RasMisha: тут всё так
Gres: Даже я использую
RasMisha: просто не понимаю чего удивляться то что b=false отрабатывает в условии
RasMisha: а чем отличается if от while? ^)
Gres: Просто никогда не видел именно в условии
RasMisha: while = if + goto before if