Имя: Пароль:
LIFE
1С v8
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.
Закон Брукера: Даже маленькая практика стоит большой теории.