Имя: Пароль:
1C
 
Хорошие и плохие имена переменных и функций
0 Волшебник
 
27.11.25
20:08
Давайте обсудим.
Потом прикручу пост и голосовалку.

Что с венгерской нотацией? Сразу в бан?
Что с длинными именами?

Должно ли быть слово Получить у функции?
18 Волшебник
 
27.11.25
21:06
Пишите-пишите, я конспектирую...
19 Волшебник
 
27.11.25
21:07
(7) вы считаете себя не ботом?
20 Asmody
 
27.11.25
21:11
(15) где я написал про "однобуквенные сокращения"? такого я не писал

сравни:

Процедура КакойТоМедодОбработки(ПараметрНоменклатура, ПараметрКонтрагент, ПараметрОрганизация); 

   Номенклатура = ПараметрНоменклатура;
   Контрагент = ПараметрКонтрагент;
   Организация = ПараметрОрганизация;

КонецПроцедуры

или

Процедура какойТоМетодОбработки(пНоменклатура, пКонтрагент, пОрганизация);

   Номенклатура = пНоменклатура;
   Контрагент = пКонтрагент;
   Организация = пОрганизация;

КонецПроцедуры


или

МассивЧегоНибудь = ОбщегоНазначенияМассивы.НовыйМассив(ЧтоНибудь, ЕщеЧтоНибудь, ИЕщеЧтоНибудь);


массивЧегоНибудь = _Массивы.НовыйМассив(
  ЧтоНибудь,
  ЕщеЧтоНибудь,
  ИЕщеЧтоНибудь); 


Я не против длинных имен, я даже наоборот очень за.
Но я хочу, чтобы имена уменьшали когнитивную нагрузку, а не увеличивали её.
И чтобы было меньше "смыслового мусора".
"ПараметрМетода", "ОбщегоНазначения" - это смысловой мусор.
И 1Совские "КлиентСерверПовтИспПереопределяемый" - это тоже смысловой мусор, от бедности и безысходности
21 Garykom
 
гуру
27.11.25
21:11
(20) Сравни
Процедура КакойТоМедодОбработки(ПараметрСтруктура); 

   Номенклатура = ПараметрСтруктура.Номенклатура;
   Контрагент = ПараметрСтруктура.Контрагент;
   Организация = ПараметрСтруктура.Организация;

КонецПроцедуры
22 Garykom
 
гуру
27.11.25
21:12
(20) >"ПараметрМетода", "ОбщегоНазначения" - это смысловой мусор.

Это не смысловой мусор!
Это человекопонятный без заучивания лишнего
Да многословность как недостаток, но малословность с изобилием аббревиатур и непонятных имен ничуть не лучше
23 Asmody
 
27.11.25
21:13
В типовых 100500 модулей начинается одинаково.
Поэтому, ctrl+пробел не спасает.
Проще поставить "_" и дойти до нужного, чем выбирать из дохера вариантов
24 Asmody
 
27.11.25
21:14
(21) Теперь тебе еще надо как-то проверить, что в этой структуре именно те свойства, которых ты ожидаешь.
Без типов такой стиль очень небезопасен
25 Garykom
 
гуру
27.11.25
21:16
(21)+ когда надо допиливать - не приходится изменять объявления методов
только внутрь составного параметра докинуть и все

на большом проекте внедрения типовых (с глобальными доработками, причем с кучей итераций) это сильно облегчает
26 Asmody
 
27.11.25
21:16
(21) хуже всего, конечно,

Процедура КакойТоМедодОбработки(ПараметрСтруктура); 

   ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПараметрСтруктура);

КонецПроцедуры


и такое в типовых встречается
27 DiMel_77
 
27.11.25
21:17
(24) Стандартами разработки предусмотрено не более 7-ми параметров в процедурах или функциях (насколько я помню), а передача структуры облегчает дальнейшую доработку в случае необходимости. Я своим стажерам тоже рекомендую структуры использовать.
28 Garykom
 
гуру
27.11.25
21:17
(23) Используй Сервис - Шаблоны текста
Там есть замена
29 Garykom
 
гуру
27.11.25
21:17
(24) Не надо
Точнее тогда надо и кучу параметров метода проверять ))
30 Asmody
 
27.11.25
21:18
(25) когда в платформе будет нормальная проверка типов. а не вот это вот //@strict-types
31 Garykom
 
гуру
27.11.25
21:19
(26) Это идеальный код!
Даже доработки не нужны когда новое внутри ЭтотОбъект и ПараметрСтруктура добавляется, причем имена совпадают
Вот если нужно иное перекрытие или не полное заполнение приходится с доп.параметрами ЗаполнитьЗначенияСвойств() возиться
32 Garykom
 
гуру
27.11.25
21:20
(30) Это уже будет не 1С а нечто иное
Согласен что строгая типизация лучше
Но нетути
33 Asmody
 
27.11.25
21:20
1С плодит программистов-уродов.
Это хреново, конечно
34 PR
 
27.11.25
21:20
(0) Код должен быть читабельным и самодокументируемым, все остальное от лукавого
По поводу Получить есть мнение, что НаименованиеНоменклатуры ничем не отличается от ПолучитьНаименованиеНоменклатуры, а значитПолучить можно и опустить, чтобы сделать название короче
35 H A D G E H O G s
 
27.11.25
21:20
Называйте, как хотите. Но реализуйте всё функциями, возвращающими структуру с результатом

Функция ПолучитьКонтрольноеЧислоGS1(Знач ID) Экспорт
    СтруктураВозврата=Новый Структура;
    СтруктураВозврата.Вставить("Результат",Истина);
    СтруктураВозврата.Вставить("ОписаниеОшибки","");
    СтруктураВозврата.Вставить("КонтрольноеЧисло",Неопределено);
    
    Если АСФОбщегоНазначенияКлиентСервер.ЕстьНеЦифрыВСтроке(ID) Тогда
        СтруктураВозврата.ОписаниеОшибки="Переданный идентификатор семейства GS1 должен содержать только цифры.";
        СтруктураВозврата.Результат=Ложь;
        Возврат СтруктураВозврата;
    КонецЕсли;
36 Garykom
 
гуру
27.11.25
21:21
(35) Тоже дошло что Процедуры не нужны?
Достаточно Функций
37 H A D G E H O G s
 
27.11.25
21:23
А по хорошему, если чуете, что будет весело, можно пробрасывать дополнительную (пока пустую) структурку в параметрах. Потом может пригодиться.
38 Garykom
 
гуру
27.11.25
21:24
(34) Но когда рядом
НаименованиеНоменклатуры()
ЗаполнитьНаименованиеНоменклатуры()
СформироватьНаименованиеНоменклатуры()
то без префикса выглядит странно
39 Asmody
 
27.11.25
21:24
(31) "Это идеальный код!" - у "нормального" программиста от такого вытекают глаза и волосы дыбом встают
40 Garykom
 
гуру
27.11.25
21:25
(37) Если параметров >2 - стараюсь сразу делать структуру
41 PR
 
27.11.25
21:26
(1) Тут борются два начала: рациональное и прекрасное
Рациональное говорит пиши все без падежов типа НоменклатураНаименованиеУстановить
Прекрасное требует УстановитьНаименованиеНоменклатуры
Я за прекрасное, потому что чаще всего функции и процедуры довольно уникальны, а не так, что сто функций с примерно одинаковой логикой
А если уж их сто, тогда вопрос с чего бы их сто, а не одна с параметром, который может принимать сто значений
А когда процедура или функция одна и называется НоменклатураНаименованиеУстановить, то хочется взять автора за шкирку и долго и внимательно выразительно смотреть ему в глаза
42 Garykom
 
гуру
27.11.25
21:26
(39) А есть утвержденные тесты для проверки "нормальности" программиста?
43 Garykom
 
гуру
27.11.25
21:27
(41) >с чего бы их сто, а не одна с параметром

И с кучей Если ИначеЕсли внутри?
И вызовом других?? А как насчет их имен?
44 Garykom
 
гуру
27.11.25
21:29
(41) >хочется взять автора за шкирку и долго и внимательно выразительно смотреть ему в глаза
Иногда надо сразу думать на будущее
Так влом написать "лишние" буковки?
Зато потом картинка более стройная и понятная
И можно поиском по "Установить" найти/перебрать все нужные методы
45 Kongo2019
 
28.11.25
10:43
НастоящиеПрограммистыПробеламиИСимволамиПодчеркиванияНеПользуются()
46 Garykom
 
гуру
27.11.25
21:30
(45) "Настоящие программисты используют кавычки"."Для вызова методов"()
!
47 Asmody
 
27.11.25
21:30
(35) у меня для такого "псевдомейби" есть

типа:

Если ошибка Тогда
  Возврат _Результат.ВернутьОшибку(текстОшибки);
Иначе
  Возврат _Результат.ВернутьДанные(данные);
КонецЕсли;


и используется:

ответ = ЧтоТоНадоСделать();
Если НЕ _Результат.ЭтоОшибка(ответ) Тогда
   данные = _Результат.ДанныеИз(ответ);
Иначе
   ВызватьИсключение _Результат.ОшибкаИз(ответ);
КонецЕсли;
48 Garykom
 
гуру
27.11.25
21:31
(46)+ Это вы еще кода на китайском с именами (переменных, методов и т.д.) из иероглифов не видали...
49 PR
 
27.11.25
21:31
(21) Нечитабельно и хрен проверишь ошибки в конфигураторе, на кол
50 Garykom
 
гуру
27.11.25
21:33
(47) ПиПиПи...
Тех кто использует исключения для возврата результата метода - ждет отдельный котел
51 Garykom
 
гуру
27.11.25
21:33
(49) В конфигураторе и так хрен что проверишь
Только в режиме предприятия при выполнении кода
52 PR
 
27.11.25
21:35
(31) Говно это, а не идеал
Все копирования свойств должны быть явно указаны, а не по принципам:
— Если появился новый реквизит, то скорее всего его тоже нужно заполнять, давай заполним
— Если удалили или переименовали реквизит, то и ничего страшного, не будем ругаться, просто заполним остальные свойства, а на этот хрен забьем
53 Asmody
 
27.11.25
21:36
(50) где ты там возврат увидел, болезный?
54 PR
 
27.11.25
21:38
(43) Куча Если ИначеЕсли для установки наименования объекта?
А вы точно программист?
55 Garykom
 
гуру
27.11.25
21:44
(53)
   данные = _Результат.ДанныеИз(ответ);
Иначе
   ВызватьИсключение _Результат.ОшибкаИз(ответ);

Логично предположить что это внутри функции и данные возвращаются?
Или не возвращаются ибо упс происходит исключение
Приходится заворачивать такое в Попытку

Если это не внутри функции и/или прерывание кода нормально то ок
56 Garykom
 
гуру
27.11.25
21:43
(54) Нет для разной обработки одной сущности
В этом случае логично делать разные методы с понятными именами
А не портянку внутри одного метода
57 PR
 
27.11.25
21:41
(44) Не надо при создании обработки заполнения реквизита в существующих контрагентах сразу строить ее на БСП и предусматривать, что она может начать использоваться в англоязычных странах
Будет необходимость — добавишь
Не будет — будет чище код, без всяких мутных вещей, добавленных на случай а вдруг
58 PR
 
27.11.25
21:42
(45) А вот тут, кстати, да, я бы, если бы был начинающим одинесником и понял бы этот момент, пользовался бы подчеркиваниями, конечно
59 PR
 
27.11.25
21:47
(56) Если разность в том, что нужно либо наименование присвоить либо на удаление пометить, то это как бы разные вещи и разные процедуры, конечно же
А если нужно присвоить либо наименование либо код либо автора, то и че и че, просто параметр
60 Asmody
 
27.11.25
21:55
Реально в платформе нужны нормальные неймспейсы. Папочки для общих модулей.
Модули, расширяющие типы ссылок.
61 Asmody
 
27.11.25
22:21
(41) примерно так:

Процедура УстановитьСтатус(Знач Документ, Знач Статус) Экспорт
   // логика стейт-машины
КонецПроцедуры

Процедура УстановитьСтатусОжидание(Знач Документ) Экспорт
   УстановитьСтатус(Документ, Перечисления.СтатусыОпераций.Ожидание);
КонецПроцедуры

Процедура УстановитьСтатусВыполняется(Знач Документ) Экспорт
   УстановитьСтатус(Документ, Перечисления.СтатусыОпераций.Выполняется);
КонецПроцедуры

Процедура УстановитьСтатусВыполнено(Знач Документ) Экспорт
   УстановитьСтатус(Документ, Перечисления.СтатусыОпераций.Выполнено);
КонецПроцедуры


конечно, если этих вариантов не более 5-6.
62 Злопчинский
 
27.11.25
22:37
я все время страдаю
писать типа
Если а=1
или
Если А = 1
63 Злопчинский
 
27.11.25
22:38
Если пишу сейчас полную ветку
Если КакаяТоХрень()=1 Тогда // типа ничего, норма
Иначе
   // всякая шняга пишу тут
КонецЕсли;
64 Garykom
 
гуру
27.11.25
23:30
(61) Такая логика полезна когда код внутри чуть посложней
Не просто сразу УстановитьСтатус а по неким условиям

Но вот Знач совершенно лишнее ибо тип не простой
65 Asmody
 
27.11.25
23:56
(64) откуда ты знаешь, что тип не простой? Или Ссылка для тебя сложный тип?
66 mmg
 
28.11.25
00:13
(1) А еще так учат отдавать приказы. Уж несколько тысяч лет как
67 Zamestas
 
28.11.25
00:22
(41) Полностью согласен.
68 Злопчинский
 
28.11.25
01:47
(61) (64) а потом вздохи про глубокий стек вызова процедур в типовых... ;-)
69 aka MIK
 
28.11.25
01:57
(63) и получишь сразу алерт от Сонаркуба
70 aka MIK
 
28.11.25
02:03
(14)
У меня есть даже модуль "__", содержащий наиболее часто используемые "хелперы". Например, __.ЕслиНеопределено() или __.ЭтоСегодня() и т.д.


А нету __.___()?
71 Злопчинский
 
28.11.25
02:46
(69) сонаркуб - тупой.
мне удобно сразу видет как ветка отрабатывает а не листать туда-сюда чтобы увидет тогда-иначе ест или нет.
72 Сергиус
 
28.11.25
03:48
(0)После названий всяких конструкций для СКД..остальное не так уж и громоздко)
73 Ёпрст
 
гуру
28.11.25
08:05
(0)вообще по....х кто там чего пишет и как обзывает.
Со временем, на это не обращаешь внимание

Единственное, суржик вымораживает - ты или пиши всё на английском или всё на русском, а не половина так, половина так.
74 maxab72
 
28.11.25
08:49
(73) ZapolnitOtchenVazhnuyuPeremennuyu() ВериИнпотентБигФанкшен()
75 Гипервизор
 
28.11.25
09:44
(73) Например, всякие инструкции препроцессора мне проще написать латиницей без переключений туда-сюда: #Region, #Insert, #Delete. Ну или иметь раскладку Чистова или аналоги.
76 maxab72
 
28.11.25
09:49
(75) а зачем переключать клавиатуру? # - Альт + 35, & - Альт + 38 и т.д.
77 Гипервизор
 
28.11.25
09:59
(76) Я как раз и не переключаю. И запоминать это шаманство не хочется, да и быстрее ли так набирать?
78 ДенисСмирнов
 
28.11.25
10:02
(75) если вы про символы типа # и &, то лично мне удобнее набирать их как Alt+цифровой код, вместо переключения раскладки
79 АгентБезопасной Нацио
 
28.11.25
10:16
(33) не "уроды", а "парапрограммисты".©
80 АгентБезопасной Нацио
 
28.11.25
10:19
(75) трубоконф без переключения, по альт ставит...
81 Ботаник Гарден Меран
 
28.11.25
10:25
(35)
"Называйте, как хотите. Но реализуйте всё функциями, возвращающими структуру с результатом"

И тут же сразу функция, возвращающая просто Булево.

"Если АСФОбщегоНазначенияКлиентСервер.ЕстьНеЦифрыВСтроке(ID) Тогда"

(0)
Венгерская нотация - да.
Длинные имена - в топку.

Но короткие имена с венгерской нотацией - нужна шпаргалка или привычка.
82 dmt
 
28.11.25
10:34
(20) а вы один работаете?
Я когда работал один - писал как удобнее пКонтрагент, втЗаказы.
Но когда работа коллективная и в коде каша из разных нотаций, это бесит.
Поэтому только стандарты, только хардкор
83 PLUT
 
гуру
28.11.25
10:50
ИИчку вероятно похер на названия переменных

UID норм: ну или огрызки от гуя

c75b1c74
d552dda8
84 ZloyBrawler
 
28.11.25
11:01
Да не пошатнись психика смертного

Топаз_Константы.ПолучитьКонстанту_ДополнительноеЗначение_Номенклатура_РабочаяСторонаКолонкиСОдностороннейИндикацией_А() ;
85 Волшебник
 
28.11.25
13:16
(84) За такое надо бить железной линейкой по пальцам, причём ребром.
86 Кирпич
 
28.11.25
13:31
Вы чо тут раздухарились. Как 1с велит, так и пишите.
87 Волшебник
 
28.11.25
13:32
(86) Мы тоже не левой ногой сморкаемся
88 H A D G E H O G s
 
28.11.25
13:42
(86) Вот когда Совместимо будем проходить - тогда напишем, как сверху велели.
89 ZloyBrawler
 
28.11.25
13:47
(85) давайте без насилия!!!
Ваше предложение как назвать функцию выше указанную, чтобы смысл ее имени не был потерян?
90 Timon1405
 
28.11.25
13:51
(89) как поступаете когда в таком условно-постоянном виде нужно хранить массив значений (например, список складов)?
91 Гипервизор
 
28.11.25
13:51
(89) А зачем в имени функции получения константы писать имя константы?
92 Timon1405
 
28.11.25
13:55
(62) поставьте себе https://github.com/otymko/phoenixbsl
и проверяйте себя в конфигураторе еще ДО сонара.
например, можно парой кликов применить к модулю "Каноническое написание ключевых слов (CanonicalSpellingKeywords)"
93 VladZ
 
28.11.25
14:08
(88) +500
94 VladZ
 
28.11.25
14:10
(1) я не понимаю, почему в Java можно написать getUserById , а в 1с нельзя написать ПолучитьНаименованиеНоменклатуры?

Почему?
95 Timon1405
 
28.11.25
14:15
(94) может потому что в 1с нет интерфейсов и ПолучитьНаименованиеНоменклатуры 99% что будет в ОМ рядом с еще такой же сотней ПолучитьЧтотоДругое?
96 ZloyBrawler
 
28.11.25
14:41
(90) так как храним все в регистре сведений, то чтобы хранить списки, приходится мудрить с именами констант

Пилится функция типа получить список складов того-то сего-то.

Внутри она обращается к константе, хранящей количество значений. В цикле обращается по номерам + имена к константам. Формируется массив, возвращается.

Напилен ряд вспомогательных функций и процедур сохранения значений, получения, удаления. Пашет стабильно. Костыли, но только так и получается хранить все, то константное дерьмо, что насыпают юзеры в код своими особенными бизнес-процессами.

Читающие функции еще создаем так чтобы они тип значения проверяли. Типа константа должна быть именно число или иной тип!
97 ZloyBrawler
 
28.11.25
14:34
(91) искать так-то по коду программы проще по имени функции, а не имени константы
Исправлять проще
98 ZloyBrawler
 
28.11.25
14:44
(95) "люблю" Экономистов слов, что потом код не читабелен ибо смысла у всех этих огрызков названий нет
99 Волшебник
 
28.11.25
15:06
(94) русское "Получить" сильно длинее английского get
100 formista2000
 
28.11.25
15:07
(100) 100!
101 Timon1405
 
28.11.25
15:10
(99) у нас есть "дай"
102 Волшебник
 
28.11.25
15:15
(101) у нас есть даже такое: "давай бери"
103 MWWRuza
 
гуру
28.11.25
15:21
(99) А "Пол" - не? И так понятно, что "Пол" в имени функции это не гендерная принадлежность, а "Получить" :-)
104 Гипервизор
 
28.11.25
15:23
(103) Ой, фу. И будет что-то типа ПолПечФормДокРТИУ.
105 Chai Nic
 
28.11.25
15:26
(94) А с каких пор джава является образцом стиля? Это уродливый язык изначально.
106 VladZ
 
28.11.25
15:31
(105) Возьми любой другой язык.
107 VladZ
 
28.11.25
15:33
(104) Вот так точно не надо.
108 Волшебник
 
28.11.25
15:37
(103) Лучше называть функции существительными по результату, который они возвращают. Получится примерно так:
Функция УпаковочныйЛист() Экспорт
  ТД = Новый ТабличныйДокумент;
  ...
  Возврат ТД
КонецФункции


вызов:
ТД = оКоробка.УпаковочныйЛист();
ТД.Показать();
109 dmt
 
28.11.25
15:39
(108) Тут непонятно, что за упаковочный лист возвращаем, может ссылку на документ или макет.

ПечатьУпаковочныйЛист() лучше
110 АгентБезопасной Нацио
 
28.11.25
15:48
(104) ПечформаРТИУ() - почему бы и не да? (и так понятно, что РТИУ - документ, и что печформу можно по умолчанию только получить). Но все равно как-то ....
111 Волшебник
 
28.11.25
15:59
(109) можно и так
или по-венгерски:
Функция тдУпаковочныйЛист() Экспорт
112 Chai Nic
 
28.11.25
16:00
(109) ПечатнаяФормаУпаковочногоЛиста() и никак иначе
113 vicof
 
28.11.25
16:04
(112) +1
114 Garykom
 
гуру
28.11.25
16:10
(112) Плохо
Может быть несколько разных печформ упаклиста
Как их различать? Удобнее когда разница в конце
Поэтому объект суем вперед, и добавляем глагол для понятности:
СформироватьУпаковочныйЛистПечатнаяФормаФормат2025()
115 vicof
 
28.11.25
16:12
(114) +2
116 dmt
 
28.11.25
16:21
(114) ПечатьУпаковочныйЛист_2025()
117 Волшебник
 
28.11.25
16:27
(114) тогда так: СформироватьУпаковочныйЛист("Формат2025")
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн