Тернарные операторы в 1С #806366


#0 by svsvsv
Уважаемые коллеги! Есть ли у вас какие-то правила (для себя) по использованию тернарных операторов определенного уровня вложенности? (например, не использовать тернарный оператор внутри тернарного оператора). И вообще, используете ли вы его? Наткнулся на следующее Г, поэтому и возник вопрос:
#1 by Йохохо
это Г только если это не твое Г )
#2 by Numerus Mikhail
Использую не больше 1 вложенного. Пример из вполне читабельный.
#3 by azernot
Использую. Регулярно. В т.ч. вложенные. Как правило при формировании какой-либо строки (например, текста запроса). Но бывает и подобное , если есть чёткое булево условия как в , то почему бы и нет?
#4 by lubitelxml
+1
#5 by Asmody
А если переписать вот так:            );
#6 by svsvsv
Он читабельный, т.к. на мисте шрифт мельче, чем в конфигураторе (скажем, EDT-style) В конфигураторе это 176 символов, не помещается в экран
#7 by Asmody
+ хотя формирование даты просится отрефакториться в функцию
#8 by vde69
лучше так
#9 by svsvsv
я и отрефакторил в функцию. Еще заменил "?" на "Если", а то не очень удобно смотреть, хоть и в одну строчку
#10 by Asmody
Не лучше. Три присваивания вместо одного - потенциальный источник проблем.
#11 by Fedor-1971
нормально читается так: При рефакторинге имеет смысл переделывать на Если ... КонецЕсли;
#12 by Asmody
Я бы всё это вынес в функцию.
#13 by vde69
Вы не правы, все три присвоения никогда не выполняются все вместе... а из плюсов - любой из трех результатов наглядно записан в виде одной строчки, это примерно как case в других языках
#14 by vde69
ну и можно еще так Если не Шапка.ЭтоУвольнение Тогда
#15 by H A D G E H O G s
Не использую дичь вида ?
#16 by svsvsv
Я бы сделал так: то есть добавил бы это: ПериодРегистрации = Шапка.ПериодРегистрации;
#17 by Fragster
#18 by sitex
Использую, причем но не более 3-4 вложенных. Далее просто становиться не читабельно.
#19 by drcrasher
за такой перенос запятой 1С смело разворачивает конфу на исправление
#20 by Fragster
ты про запятую в начале в функции Дата? это мне тоже не нравится
#21 by oslokot
? использую, но без вложений
#22 by Fragster
15                 ),
#23 by drcrasher
да. у них вообще много интересных требований к коду, сначала плеваться тянет, потом втягиваешься и даже логичность некоторая видна
#24 by Asmody
1С может ходить нахер. Или пусть опубликуют codestyle. В таком стиле ты никогда не пропустишь и не забудешь запятую.
#25 by kittystark
+1
#26 by Сти
Это хорошо, когда платят за количество строк кода. Как по мне, так чем более кратко, тем лучше. После Perl, наверное )))
#27 by Fragster
в именно про запятые ничего нету
#28 by Ненавижу 1С
А почему 1С решила извратить этот классческий оператор?
#29 by ptiz
В нашем деле, главное - читаемость кода. Вложенные "?" читаемость портят.
#30 by Fedor-1971
Взяли за основу С Вот так красивее:
#31 by Asmody
А разве не так:
#32 by Asmody
1С вообще сделали этот как-бы , каковой он не является. Зато в 7.7 с его помощью делалась "ленивая" проверка условий.
#33 by тарам пам пам
Использую без вложенных. Пример вполне читабелен, но от вложенного ? я бы все равно избавился.
#34 by Филиал-msk
Да тоже, когда язык проектировали, забыли как пишется.
#35 by Филиал-msk
Особенности реализации стековой машинки, очевидно. Дерево разбора у них ЕМНИП, только в эклипсе и появилось, до этого - тупая попытка компиляции и смотрим что получилось
#36 by Asmody
хотя для ? они все аргументы не вычисляют
#37 by mexanik_96
сложные условия обычно объединяют(речь не про 1с) в переменную. Фиксин по моему даже писал где-то об этом
#38 by Филиал-msk
Синтаксическая глюкоза от 1С (:
#39 by Fragster
что в ? что в ЕСЛИ - проверка ленивая
#40 by Филиал-msk
в 7.7 нет
#41 by PiotrLoginov
Тогда уж голосовалку. Код в очень даже норм.
#42 by Fragster
да
#43 by Лефмихалыч
правило простое - тернарные операторы должны быть простыми и укладываться в голове с одного прочтения. Если приходится читать по частям, то надо рефакторить. Код в топике - УГ, фу так делать
#44 by Брудвар
Да вроде норм. С одного раза все понятно
#45 by kittystark
вот как надо
#46 by kittystark
если позаботиться о читабельности, то так выглядит лучше
#47 by kittystark
поэтому самый наиприемлемый варинат
#48 by kittystark
и зачастую, когда в запросе наворотишь условий со всякими И / ИЛИ, да ещещ перевложенными в скобочках, чтоб понимать суть условия приходится  делать отступы и потом НЕ ПОЛЬЗОВАТЬСЯ конструктором, чтобы потом вся "логическая"не слетела нах, после его "стандартизации"
#49 by kittystark
* "логическая Красота"
#50 by Asmody
А вот если в запросе наворотишь вот это всё, то это 100% рефакторить надо.
#51 by VladZ
Для себя решил так: вложенные конструкции в "?" не использовать.
#52 by Рэйв
Только если под настроение для прикола могу навернуть:-) А вообще стараюсь если есть вложенность, то использовать Если...Тогда. Потому что потом сам материшься спустя какое то время разгадывая  этот ребус:-)
#53 by Ненавижу 1С
А вот если бы в SQL писали бы не select case     when x>1000 then y1000     when x>100  then y100     when x>10   then y10     else             y0 end as Y а вот так (а ля Си-лайк): select Y = x>1000    ? y1000    :     x>100    ? y100    :     x>10    ? y10    :                   y0
#54 by Сияющий в темноте
select case в запросах 1с прекрасно реализован
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С