![]() |
|
OFF: Это новая мода или новый стандарт оформления кода? 🠗 (Волшебник 11.04.2023 20:21) |
☑ | ||
---|---|---|---|---|
0
Мультук
гуру
11.04.23
✎
10:53
|
При очередном обновлении УТ, обратил внимание на появление конструкции "НекаяБулеваПеременная = ИСТИНА"
Сколько помню, когда я раньше так писал (ФлагБулево = ИСТИНА) меня обвиняли в "левом уклонизме, консерватизме" и т.п. и т.д. Теперь так пишут в типовых. Это новая мода? Новый стандарт? В 1С поменялся {что у них там -- макропроцессор, который генерирует код} ? === Было === Если ОбщегоНазначения.РазделениеВключено() И НастройкаСинхронизации.НастройкаЗавершена И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкаСинхронизации.УзелИнформационнойБазы) И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда === Стало === Если ОбщегоНазначения.РазделениеВключено() И НастройкаСинхронизации.НастройкаЗавершена = Истина И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкаСинхронизации.УзелИнформационнойБазы) = Истина И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда |
|||
1
Smit1C
11.04.23
✎
10:52
|
(0) других вопросов не осталось? ))
|
|||
2
Волшебник
11.04.23
✎
10:52
|
да какая разница?
|
|||
3
Волшебник
11.04.23
✎
10:54
|
Надо дописать ещё:
Если ОбщегоНазначения.РазделениеВключено() = Истина |
|||
4
arsik
гуру
11.04.23
✎
11:02
|
(0) Я такое иногда делаю.
Например НастройкаСинхронизации.НастройкаЗавершена - возвращает кроме Истина, ложь еще и неопределенно. С коротким условием вывалится исключение, а с длинным пройдет нормально. |
|||
5
Гипервизор
11.04.23
✎
11:05
|
(0) Что делается! Неужели разработчики не соблюдают свои же Стандарты? Впрочем, ничего нового. )
"4. Логические выражения и логические значения (например, результат функции, возвращающей логическое значение, переменные типа Булево и пр.) не следует проверять путем сравнения с литералами Истина и Ложь. Правильно: Если ЭтоНовый() Тогда Неправильно: Если ЭтоНовый() = Истина Тогда" https://its.1c.ru/db/v8std/content/441/hdoc |
|||
6
Обработка
11.04.23
✎
11:10
|
Самое прикольное когда название переменных или название функции и условие проверятся на "Не" вот ту голову слмаешь.
Если Не ОбщМодуль.ПроверитьНаПодраздаление() Тогда // я тут не придумал что-то не понятно что бывает хуже. // что-то одно Иначе // что-то другое. КонецЕесли; |
|||
7
timurhv
11.04.23
✎
11:12
|
(0) Потому что:
Если ИменаПараметров.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; |
|||
8
Fish
гуру
11.04.23
✎
11:13
|
(6) А что тут голову ломать? Элементарная булева логика. Если не понимаешь её - вон из профессии.
|
|||
9
Обработка
11.04.23
✎
11:14
|
(0) Полагаю там где однозначно возврат из функции значения булево то не стоит проверять на Истину или ложь. А так хот страховка получается.
|
|||
10
Обработка
11.04.23
✎
11:17
|
(8) Я то отлично понимаю. Еще в 8м классе осовил это в 1997 году!
Но коллеги иногда такие не понятные вещи пишут что аж смешно бывает. Надо писать код читабельно! Название функций или переменных должны нести смысловую нагрузку а нет с потолка взяты. |
|||
11
Гипервизор
11.04.23
✎
11:19
|
(8) Просто в этом примере название функции такое себе получилось. Уж если возвращает Булево, так и назвать бы как-то типа ЭтоПодразделение().
(10) Да, вот и я об этом. |
|||
12
DimVad
11.04.23
✎
11:21
|
Если есть отличный от нуля шанс что НекаяБулеваПеременная будет равно "Неопределено" тогда выражение
"НекаяБулеваПеременная = Истина" точно лучше... |
|||
13
DJ Anthon
11.04.23
✎
11:23
|
(5) ЭтоНовый() не вернёт неопределено.
|
|||
14
ViSo76
11.04.23
✎
11:23
|
= Истина нужно дописывать тогда, когда возвращается 3 состояния ( Истина | Ложь | Неопределённо )
|
|||
15
Обработка
11.04.23
✎
11:23
|
Вот пример
функция ПровертьПодразделениеНаФильтр() Лучше бы назвали: функция ПровертьПодразделениеЧтоВходитВСоставТестовыйРежимРаботыЭЦП() (это в моем частном случае) |
|||
16
АгентБезопасной Нацио
11.04.23
✎
11:24
|
(12) и смотря что лучше - неопределенное поведение или вызванное исключение. Я бы предпочел исключение - чтоб знать сразу, что "пошло не по плану"
|
|||
17
ViSo76
11.04.23
✎
11:24
|
(7) Можно и без = 0. Там при проверки if будет неявное преобразование в бульон
|
|||
18
АгентБезопасной Нацио
11.04.23
✎
11:26
|
(15) монопенисуально. что одно криво, что другое.
|
|||
19
Волшебник
11.04.23
✎
11:27
|
(15) Проверить
|
|||
20
Волшебник
11.04.23
✎
11:28
|
(15) лучше так: ЭтоТестовоеПодразделениеЭЦП()
|
|||
21
magicSan
11.04.23
✎
11:29
|
(10) " Еще в 8м классе осовил это в 1997 году!" звиздишь, это программа 10-11 класс информатика.
|
|||
22
timurhv
11.04.23
✎
11:34
|
(17) я про то что функция из (0) может вернуть Неопределено
|
|||
23
Fish
гуру
11.04.23
✎
11:36
|
(15) "ПровертьПодразделениеЧтоВходитВСоставТестовыйРежимРаботыЭЦП" - Жесть, вообще непонятно о чём это :)))
|
|||
24
Fish
гуру
11.04.23
✎
11:38
|
(21) Когда я учился в школе, то информатика появилась в 8-м. И там, емнип, азы булевой логики изучали. И какие-то алгоритмы писали на каком-то абстрактном языке. А я уже тогда, помнится, на фортране программки писал.
|
|||
25
asady
11.04.23
✎
12:06
|
(0) это новый стандарт.
ты когда будешь разбираться с интеграцией типовых (и не только) через КД2/3 - много раз вспомнишь тех кто не писал "= ИСТИНА" при проверке булевых переменных. Входной язык 1С не типизирован и поэтому полной чашей хлебаем.... |
|||
26
Волшебник
11.04.23
✎
14:18
|
(25) Жёсткая типизация уменьшает количество ошибок, но замедляет разработку. Для языков RAD характерна "слабая типизация" по значению переменной
|
|||
27
Aleksey
11.04.23
✎
13:01
|
(15) Длинные названия сейчас не в моде
|
|||
28
Обработка
11.04.23
✎
13:05
|
(20) Я оказывается так назначил
Функция ОпределитьТестовыйПодр(Док, ФормаОбъектСсылка = 1) Экспорт |
|||
29
Волшебник
11.04.23
✎
13:06
|
(28) Сразу видно, что русский язык Вам не родной.
|
|||
30
Обработка
11.04.23
✎
13:07
|
(27) Согласен но бывает супер короткие и фиг разбери о чем. Пока не изучишь код.
|
|||
31
Обработка
11.04.23
✎
13:11
|
(29) Ну дык, я кыргыз (киргиз) живу в КЗ знаю казахский. Но русским владею достаточно хорошо но пишу не всегда грамотно. Иногда даже буквоед в чатах. ))
Ибо пишу уже не обдумывая. А если задумываться то можно писать грамотней и часто у меня чисто механическая ошибка при наборе по клавиатуре. |
|||
32
Волшебник
11.04.23
✎
13:14
|
(31) Да всё нормально, Борат. Мы рады, что Вы с нами.
|
|||
33
Жан Пердежон
11.04.23
✎
13:42
|
(0) твоя ошибка в том, что переменная НЕ обязательно булево
|
|||
34
АгентБезопасной Нацио
11.04.23
✎
13:43
|
(28) есть очень простой способ - подзываете какого-нибудь сотрудника (админа, прога), показываете ему название функции, и просите выразить мнение о том, что делает эта функция.
|
|||
35
Мультук
гуру
11.04.23
✎
14:14
|
(33)
1) Я только опубликовал два примера. Оба из совершенно типовых конфигураций. Почему вы решили, что я совершаю какие-то ошибки ? 2) Есть чудесная функция которую придумали в 1С ЗначениеЗаполнено(<Значение>) которая (удивительно просто) возвращает булево (Истина, Ложь). Никаких неопределено. и есть функция из типовой БСП ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НекаяПеременная) которая судя по слову "Это" должна возвращать опять-таки булево, но в некоторых случаях как выяснилось, возвращает "неопределено". Т.е. в один прекрасный момент 1С решит и ЗначениеЗаполнено() станет иногда возвращать неопределено? (да, я здесь "передергиваю", но...) P.S. Я специально пометил тему префиксом "OFF" Никаких "ответов" я не жду. Тема чисто для чая с попкорном. |
|||
36
Garykom
гуру
11.04.23
✎
14:20
|
ЗначениеЗаполнено(Ложь) вроде же возвращает Истина?
|
|||
37
H A D G E H O G s
11.04.23
✎
14:25
|
(0) Это хороший, годный подход, который поможет новичкам писать годный код.
|
|||
38
unenu
11.04.23
✎
14:26
|
(35) у вас странное отношение к чудесному. там где царит логика - чудес не бывает
|
|||
39
Serg_1960
11.04.23
✎
14:52
|
[имхо] Если Какая-то функция, кроме Истина и Ложь, может возращать Неопределенно, структуру и прочее, - то конструкция "Если КакаяТоФункция() = Истина Тогда" - более чем оправдано.
|
|||
40
Dmitry77
11.04.23
✎
15:05
|
(0) обычно дальше есть стрзаменить(текст запроса;...)
|
|||
41
timurhv
11.04.23
✎
15:33
|
(35) >которая судя по слову "Это" должна возвращать опять-таки булево, но в некоторых случаях как выяснилось, возвращает "неопределено".
ЭтоМужчина("Кофе") что должно вернуть? Истина или Ложь или Неопределено все-таки? |
|||
42
Мультук
гуру
11.04.23
✎
16:31
|
(41)
Имхо здесь уместно выкинуть исключение, ибо явно передан не тот тип, который ожидает функция |
|||
43
kuromanlich
11.04.23
✎
17:34
|
(26) в мемориз, однако
|
|||
44
XMMS
11.04.23
✎
17:41
|
(0) Это чтобы нейросеть лучше понимала, что там происходит.
|
|||
45
TormozIT
гуру
11.04.23
✎
17:58
|
(0) Это НЕ оформление. Различается поведение двух вариантов кода.
С одной стороны такой код более устойчивый к ошибкам (не подходящего типа результата функции), но с другой такие ошибки могут служит ранним индикатором некорректной работы функции. если она неумышленно вернула неподходящий тип. Если в функции умышленно добавили не булевый тип результата, то и должны были во всех местах ее вызова адаптировать код. |
|||
46
АгентБезопасной Нацио
11.04.23
✎
19:19
|
(45) о чем я и сказал в (16).
|
|||
47
Жан Пердежон
11.04.23
✎
21:13
|
(35) "НекаяБулеваПеременная = ИСТИНА" и кидает пример где переменная ВНЕЗАПНО может быть совсем не булево;
ошибки естественно никакой нет, главное их до конца не признавать |
|||
48
xXeNoNx
11.04.23
✎
22:32
|
(0) прилетает тебе функция с "Неопределено" когда у тебя ожидается булевский тип и все, туши свет.
Есть еще функция: РольДоступна |
|||
49
Ботаник Гарден Меран
11.04.23
✎
22:51
|
Стек вызовов стало тяжело отслеживать, приходится писать устойчивый код, чтобы просто не падало.
|
|||
50
Aleksey
11.04.23
✎
23:15
|
(47)
НастройкаСинхронизации.НастройкаЗавершена = Истина А какой том еще может быть вариант если реквизит "НастройкаЗавершена" булевой? Число? Строка? Дата? |
|||
51
DJ Anthon
12.04.23
✎
07:33
|
(50) да хоть что там может быть по недосмотру
|
|||
52
Serg_1960
12.04.23
✎
08:49
|
Имхо, фактор времени не учитываете. После очередного обновления штатная функция типовой конфигурации, которая ранее возвращала только булево, может быть переписана на возврат иного значения.
Например, "НастройкаСинхронизации.НастройкаЗавершена = Перечисления.ВидыНастройки.НастройкаЗавершена". И тогда ваш функционал с использованием этой функции может работать с вероятностью 50/50 :) Или программа начнёт всегда аварийно завершаться. Вам выбирать :) |
|||
53
Шурик после Казани
16.04.23
✎
05:28
|
Это далеко не новая практика.
Похоже, в команду разработчиков 1С проникла личинка функциональщика. Лично я сейчас (будучи почти без заказов и совсем без работы) потихоньку прусь осваивая сопряжение стеков GoLang и Python. При том не оставляя "чистый Си" -- потому что микроконтроллеры. На самом деле, "мыслить функционально" легко и приятно. Питон вообще молчаливо предоставляет все инструменты. Гоу -- кому-то может оказаться шоком: команда гугла внимательно вчитывалась в PEP. Ну, или я такой придурок, воспитанный на MK-61 и Forth. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |