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

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

Должно ли быть слово Получить у функции?
123 Bigbro
 
29.11.25
10:27
(119) в нынешнем коде с 15 вызовами по 1-4 строчки действительно сложно не понять ))
124 Chai Nic
 
29.11.25
10:32
(122) Не, не надо инфинитив путать с отглагольным существительным. Это другое. Типа ФормированиеУпаковочногоЛиста(). Так можно. Хотя и не нужно, если при этом возвращается не некий промежуточный "процесс", а готовая форма.
125 Bigbro
 
29.11.25
10:33
(84) а это почти как в старом добром КАМИНе. там тоже все переменные процедуры функции такой длины что в монитор не влезали))
126 Волшебник
 
29.11.25
10:37
(122) Кстати, в русском языке на инфинитивы тоже требуются дополнительные буквы -ить, -ать,
в отличие от английского, где инфинитивы наоборот являются самой короткой формой глагола.
127 Garykom
 
гуру
29.11.25
19:39
(126) Можно применять "военный язык"
Вместо "Получить..." писать нечто вроде "Дай.."
И заменять длинные описания короткими "ЭтуХрень"
128 Волшебник
 
30.11.25
10:11
(127)
ВыполнитьБыстро()
ВычислитьСейчасЖе()
ЗапуститьФоновое("Задание", ОВыполненииДоложитьСюда)
129 TormozIT
 
гуру
30.11.25
10:49
(127) Спасибо. Буду пробовать повелительное наклонение глаголов
СформируйТаблицу()
УдалиФайл()
ОткройФорму()

Действительно короче и потому удобнее.
Но в случае имен свойств перестанет работать мой анализатор типа из имени в ИР, т.к. он опирается на типичные окончания неопределенных форм глаголов. Например свойство с именем "УдалитьФайл" он считает типом "Булево". А вот "УдалиФайл" уже труднее будет отличить от "КачелиФайл" и потому он спасует.
130 Asmody
 
30.11.25
10:55
(120) как только в языке появятся лямбды и замыкания, так сразу и начнём.
Если серьёзно, ФП - это хорошо, но не надо его безумно тыкать туда, куда оно не лезет.
131 Asmody
 
30.11.25
10:56
(129) будет диссонанс с методами платформы. Или придётся их закрыть алиасами
132 Chai Nic
 
30.11.25
11:09
(130) Сделали же зачем-то модули с повторно-возвращаемыми функциями. И там побочные эффекты не нужны, и даже вредны местами. То есть ты вызвал функцию, получил значение - и можешь быть уверен только в нём, но не можешь быть уверен что она реально выполнилась.
133 maxab72
 
30.11.25
11:17
"Спасибо. Буду пробовать повелительное наклонение глаголов" А чтоб работало и не тормозило в конце названия функции добавлять постфиксы из трех букв: "Нах" или "Б.я"...
134 eddy_n
 
30.11.25
11:36
(0) Резюме: всё подпадает под одно. Сколько людей - столько мнений.
135 eddy_n
 
30.11.25
11:42
(118) Что с чухонцев взять? Они римлян не видели.
136 eddy_n
 
30.11.25
11:43
Да простят меня люди - вот такое видел описание функции в одной самописке
137 eddy_n
 
30.11.25
11:49
Пусть будет безобразно, но однообразно. Сегодня одна культура кода, завтра - другая.
138 Eiffil123
 
01.12.25
08:55
(120) а как же Запрос.Выполнить().Выбрать()

и прочие цепочки действий? оно и функция и что-то там выполняет.
139 Гипервизор
 
01.12.25
09:04
(138) Это функция кого надо функция!
Это метод, это другое. И не всегда же методы что-то возвращают.
140 ДенисСмирнов
 
01.12.25
10:56
Самый бесячий косяк, что нет синонима для Новый, который должен быть как Новая

Писать а = Новый Структура - кривокосо по чучменьски, хоть структуры не используй

А вот а = Новая Структура - красиво бы было
141 Гипервизор
 
01.12.25
11:05
(140) Зачем всё многообразие русского языка тащить в код? После оператора Новый указывается идентификатор типа, так что всё логично.
142 Ненавижу 1С
 
гуру
01.12.25
11:16
(140) это обсуждали. Достаточно было вместо new - назвать ключевым словом "создать"
143 maxab72
 
01.12.25
12:05
(142) глагол "создать" требует после себя родительного падежа. Или предлагаете в конфигуратор добавить проверку правописания?
144 vis
 
01.12.25
12:40
(143) "Создаём"
145 maxab72
 
01.12.25
12:52
(144) а почему во множественном числе?
146 Гипервизор
 
01.12.25
12:56
(144) Так это же ничего не меняет. Что "создать", что "создаём" требует родительный падеж.
(145) Тандем же. ) Платформа создаёт и программист немножко помогает.
147 Ненавижу 1С
 
гуру
01.12.25
13:04
(143) (144) (146) "это"
148 Dedal
 
01.12.25
17:37
(14) Меня всегда удивляло как с одной стороны в документации разработчика системы сказано "Имена переменных запрещается начинать с подчеркивания" а потом ты у дочки-франча видишь "_сокращенноеимяфранчаОбщийМодуль"
149 vis
 
01.12.25
20:28
(148) А чем, кстати, обусловлен запрет подчёркивания?
150 maxab72
 
01.12.25
20:41
(149) зарезервировали для себя.
151 ДенисСмирнов
 
02.12.25
09:56
(149) ну прям запрет. "пиратский кодекс - это свод рекомендаций, а не обязательных законов"
152 Волшебник
 
02.12.25
10:04
(149) Нет такого запрета. У меня вот есть обработка "АРМ_Продажи". И это более правильное название, чем АРМПродажи.

Или вот ещё:
КонтрольОстатков_ТоварыВЯчейках
ЗагрузитьИзменения_СборВГХ
ЗагрузитьИзменения_СтрокаОрдера_ПакингЛист
ТД_Склад_ПриУказанииСекции
153 Chai Nic
 
02.12.25
10:05
Вместо СоздатьОбъект или Новый следовало бы использовать не ключевое слово, а спецсимвол. Типа @, который в 1с не задействован. Как создание объекта указанного класса с вызовом конструктора.

Например:

МассивФизлиц=@Массив;

Коротко и ясно!
154 ДенисСмирнов
 
02.12.25
10:10
(152) коллеги про этот пункт "3. Имена переменных запрещается начинать с подчеркивания"
155 Chai Nic
 
02.12.25
10:11
А вместо двух строк декларации процедуры с указаниям места вызова

&НаСервере
Процедура ОбработатьДанныеНаСервере(ИсходныеДанные)

могли бы сделать в одну строку, типа так

Процедура ОбработатьДанныеНаСервере(ИсходныеДанные)::Сервер

А директиву &НаСервере сделать применимой не к конкретной процедуре, а к области кода, захватывающей несколько процедур/функций, до конца модуля или до директивы, включающей иной режим.
156 Ёпрст
 
гуру
02.12.25
10:27
(155) при большом листинге, было бы не совсем удобно выяснять тогда, где #насервере начинается и где заканчивается, и вычисляй потом, если описание процедур/функций в этом диапазоне.
157 Chai Nic
 
02.12.25
10:33
(156) Для этого есть подсветка синтаксиса и выделение блоков в конфигураторе. Можно например цветом фона разделять.
158 Ёпрст
 
гуру
02.12.25
10:59
(157) цвет фона, ну такое. Тут пошли по пути наименьшего сопротивления
159 Chai Nic
 
02.12.25
11:02
(158) Тогда бы лучше сделали это как я написал, в виде модификатора в определении процедуры, а не отдельной строкой.
160 Asmody
 
02.12.25
11:04
(159) отдельные модули для этого должны быть, а не вот это вот всё.
161 Chai Nic
 
02.12.25
11:08
(160) Ну или так, почему бы и нет? В любом случае модификатор отдельной строкой - это худшее что могло быть придумано.
162 Garykom
 
гуру
02.12.25
11:45
(155) >А директиву &НаСервере

Логичней сделать модификаторы как в Java или C#
В одну строку со служебным словом Процедура/Функция

Ну типа public|private|protected и т.д.
Или как Экспорт в конце в 1С

Но писать в начале
Сервер Экспорт Функция ИмяФункции()
// ...
КонецФункции


Клиент Функция ИмяФункции()
// ...
КонецФункции
163 Garykom
 
гуру
02.12.25
11:51
Но да, не нравится мне, что в 1С по сути одинаковое или похожее исторически сложилось и делается по-разному

Вот чем по сути "Экспорт" отличается от "&НаСервере" и "&НаКлиенте"?
И то, и то модификаторы для области видимости
164 Волшебник
 
02.12.25
11:51
(163) слово "Функция" необязательно. В Java/C всё функции
165 ДенисСмирнов
 
02.12.25
12:12
(162) может еще Тогда и КонецЕсли на фигурные скобки заменить и отделить оператор присваивания от оператора сравнения как == ? И процедуры как класс убрать.

Лично я был бы не против.
166 Волшебник
 
02.12.25
12:46
(165) 1С-Элемент, не?
167 ILM
 
гуру
02.12.25
13:44
фыва.Дай("ИмяПеременной");

возвращает значение из регистра сведений, а фыва - общий модуль
168 Dedal
 
02.12.25
13:48
(152) не про запрет внутри, запрет на использование вначале "_индитификатора"
169 Волшебник
 
02.12.25
14:08
(168) На уровне стек-машины 1С имена переменных могут состоять из цифр и включать пробелы.
170 Chai Nic
 
02.12.25
14:13
(162) Ну это уже дело вкуса, в начале или в конце. Мне больше нравится в конце, где Экспорт. Сути это не меняет.
171 Мультук
 
гуру
02.12.25
15:09
(0)

Это нормально, если процедура "ЗаполнитьСтавкуНДСНаСервере"
не только заполняет ставкуНДС, но еще попутно удаляет многооборотную тару из тч "Товары" ?

Это кошерно с точки зрения стандартов разработки 1С ?
172 Волшебник
 
02.12.25
15:12
(171) Нет, не нормально. Надо назвать процедуру ОбработатьНаСервере()
173 TormozIT
 
гуру
03.12.25
16:41
Гуру искусства именования методов, подскажите как вы решаете дилемму "МассивВСтроку" или "СтрокаИзМассива"? Я все время по-разному называю. Не могу определиться.
174 maxab72
 
03.12.25
16:51
(173) первый вариант. он короче
175 novichok79
 
03.12.25
16:58
В 2016м помню я как-то будучи 1Сником пришлось переписывать обработку от чела, который уволился.
Так вот - переменные были вида _таб1, __таб1, __о1, еб**анное всё просто. Такая говнина.
Чем отличается _таб1 от __таб1??? А хз.
Еще и клиент-серверное взаимодействие не отлажено было.
Так зарефакторил, что сам свою написал в итоге за 3 недели.
Еще какие-то оптимизации сделал, в общем, стало збс.
По содержанию была сложная штука с расчетом технологической карты для производства.
176 maxab72
 
03.12.25
16:59
(175) сразу видно, старая школа, экономия места в памяти и поэтому имена переменных a1, b12... usw.
177 Chai Nic
 
03.12.25
17:07
(173) СтрокаИзМассива() правильнее, потому что не содержит неявный глагол.
178 novichok79
 
03.12.25
17:25
(176) самое смешное что похоже он сам стал в каком-то месте путать их местами. типа с мегабайтами он экономил пару килобайт на имена переменных? ну что скажешь, гений ёпта.
179 Lama12
 
03.12.25
17:34
(176) Извиняюсь. Вопрос для расширения кругозора. А где и когда длина имен переменных влияет на использование памяти?
180 Волшебник
 
03.12.25
20:48
(179) ассемблер знаете? Если не знаете, то не выпендривайтесь
181 maxab72
 
03.12.25
21:11
(179) застали 8-битные Атари и Спектрумы с памятью 16к?
189 Eiffil123
 
04.12.25
09:48
(35) какой кошмар. а потом смотришь в код, и не понимаешь, что там функция возвращает
190 Mort
 
04.12.25
10:41
Порой править код за этими затейниками, бредящими ООП и упаковывающими возвраты в 10 структур, душнее чем разбирать спагетти за новичками и семерочниками.

Ошибки в возвратах оправданы только тогда, когда у нас функция прокси к чему-то внешнему, которое штатно может работать и так же штатно может не работать, например http - запрос или чтение файла. А если плохие параметры - нужно дёргать исключение без всяких возвратов. Пусть вызывающая сторона парится.
191 Timon1405
 
04.12.25
10:42
(189) наоборот, это бест практис. В начале функции написан контракт: что и в каком виде она возвращает. Автор функции обязуется этот контракт соблюдать и ждёт от того кто её вызывает того же. Если ты ее вызвал в своем коде с другими ожиданиями, то это твои проблемы.
К сожалению, у многих разработчиков возникает желание написать свою функцию вместо соблюдения контракта, но надо учиться доверять коллегам. Лучший код - код который не написан! (а переиспользован)
192 Mort
 
04.12.25
10:46
Хотя многие 1Сники к исключениям относятся так: "В программе и так моих ошибок хватает, зачем мне их ещё специально генерировать".
193 Eiffil123
 
04.12.25
10:46
(191) ваш написанный перед функцией контракт - это филькина грамота и профанация. Никаких контрактов в 1С нет, ибо динамическая типизация.
и будешь видеть этот контракт либо в отладчике, либо бегая по функциям через F12
194 Timon1405
 
04.12.25
11:29
(193) думаю в 1с это понимают. но тем не менее во всех типовых конфигурациях перед каждой функцией есть блок комментария с описанием входных и выходных параметров.
а как по-Вашему должен выглядеть код из (35)?
нужно дублировать проверку что ID это число вне этой функции перед каждым местом ее вызова?
195 Garykom
 
гуру
04.12.25
12:11
(190) Дада
А потом заюзал такой код (с исключениями) в коде веб или http-сервиса
И получил зависания на клиентской стороне с дикими таймаутами
196 Garykom
 
гуру
04.12.25
12:12
(195)+ Причем уй разберешься что происходит
Сервис обязан не падать
А вернуть ошибку клиенту, чтобы можно было разбираться
197 ДенисСмирнов
 
04.12.25
13:39
(180) помню как ассемблер изучал... до сих пор отличие exe файла от com помню. сидят как латинские исключения в голове у Остапа Бендера
198 novichok79
 
04.12.25
14:03
(190) Вернуть в структуре норм, лучше передать потом структуру эту везде. Челы и ООП тут не причем.
Лучше чем рассовывать гирлянду переменных в методах.
199 Chai Nic
 
04.12.25
14:17
(198) +1. Возвращать несколько значений через структуру намного красивее, чем через кучу изменяемых параметров.
200 ManyakRus
 
04.12.25
14:18
(1) В большинстве популярных руководств по стилю кода (style guides) и принципам чистого кода (clean code) рекомендуется давать функциям имена-глаголы или глагольные словосочетания, так как функция — это действие.

Вот основные источники, где это прописано или широко рекомендуется:

1. Книга Роберта Мартина "Чистый код" (Clean Code)
Это классика. В главе 2 ("Meaningful Names") прямо указано:

"Methods should have verb or verb phrase names" (Методы должны иметь имена-глаголы или глагольные словосочетания).

Примеры: postPayment(), deletePage(), save().


НоменклатураНаименованиеПолучить() - так нельзя, это не глагол
201 Гипервизор
 
04.12.25
14:23
(200) А процедура это не действие?
202 Волшебник
 
04.12.25
14:41
(200) В движке форума функции названы существительными, например, Topic.author() - функция возвращает автора ветки.
203 VladZ
 
04.12.25
15:16
(200) Да, читал.

Многие рекомендуют эту книгу. Но есть нюанс. Книга была написана в 2010 году. Вот уже 15 лет как...

Возможно, пришло время написать другую книгу. Актуальную!
204 ZloyBrawler
 
04.12.25
15:18
(202) это похоже больше на property, то есть свойство. Ожидаешь еще наличие getAuthor и setAuthor, но это не тот случай
205 Timon1405
 
04.12.25
15:29
(203) Актуальная книга скоро будет такая: "Называйте переменные как хотите, ИИ похрену на это разберётся"
206 VladZ
 
04.12.25
15:36
(205) Лет через 10 программист даже не будет знать, что такое переменная и не будет думать, как эту сущность обозвать.
207 Гипервизор
 
04.12.25
15:48
(206) Вот это прогноз! А что будет? Мыслеформы?
208 Мультук
 
гуру
04.12.25
15:50
(206)

Вспоминается "История про один байт"

https://habr.com/ru/articles/27055/
209 Dedal
 
04.12.25
15:54
(207) Промт вида "Необходимо спарсить с сайта mista.ru все сообщения пользователя с ником Гипервизор, игнорировать сообщения где это не ник пользователя, а упоминание его или аналогичный нику текст"
210 Garykom
 
гуру
04.12.25
16:21
(198) (199) Многим не нравится что типизации нет
И обязательность не проверяется само

Может доработать структуры, добавив типизацию и нечто вроде ПроверитьЗаполнение() встроенное для них
211 Chai Nic
 
04.12.25
16:25
(210) А что, в параметрах есть типизация?
212 Dedal
 
04.12.25
16:36
(210) Вот тоже не понимаю не нравится? Ну организуй сам в своем коде.
Это наследие программирования на других языках и обучения на тех языках где строгая типизация, страдал этим только в момент входа в 1С. А потом проблемы отсутствия типизации всплывают раз в год, и то когда делаешь что-то нестандартное.  Ну и зачем оно тогда?
213 AlexKimp
 
04.12.25
16:42
(197) к сожалению, помню уже смутно. MZ... размеры сегментов, адрес точки входа, прочие данные в заголовке.
Изучал ибо попалась мне антология выпусков фидошного журнала инфектед войс. Учился в лабораторных целях писать вирусы.
Учился долго и упорно. Разумеется, ни один вирус пределы моего компа не покинул ))
вся эта история закончилась как-то одномоментно )) в одном из выпусков был листинг исходника одного из вариантов Чернобыля. Как раз тот, который МБРку затирает. Решил прогнать в отладчике. Опять же лабораторных целях. Скомпилил, поизучал и... забыл..... Как сейчас помню... было утро субботы. Горячий кофе, желание поковырять диплом, который через 2 недели на рецензию сдавать... BOOT DISK FAILURE ))))))) Хорошо, что был распечатан черновик диплома.
214 1с_ник
 
09.12.25
15:25
ИИ ответил так и я согласен с этим.
Для 1С-практики лучше глагол + сущ.: ПолучитьНоменклатуру(). Такой порядок читается естественно и соответствует типовым стилям (действие → объект)
215 Fish
 
гуру
09.12.25
15:40
Те имена, которые ты сам используешь - всегда хороши.
216 Волшебник
 
09.12.25
16:40
ЭтоБаранов = СтрНайти(ПараметрыСеанса.ТекущийПользователь.Наименование, "Баранов ") > 0;
Если ЭтоБаранов Тогда
   Предупреждение("Доступ запрещён!");
   Отказ = Истина;
   Возврат;
КонецЕсли;
217 formista2000
 
09.12.25
17:09
https://govnokod.ru/1c
не благодарите ))
218 ptiz
 
09.12.25
17:34
(14) 👍
Я всегда "м" пишу в имени переменных уровня модуля - хоть что-то.
Вообще, плохо, что по имени нельзя понять - то ли это переменная (локальная или уровня модуля), то ли реквизит объекта, то ли реквизит формы, то ли параметр процедуры.
219 Злопчинский
 
10.12.25
11:18
(214) такие стили именований могут быть наследством от англоязычных (западных) стилей, определяемых в т.ч. менталитетом и строением языка.
.
когда я открою какую-нибудь типовую и надо найти, как работают типовые с номенклатурой - я в первую очередь буду искать "номенкл", а не "получить"/взять/сложить/итд.

Да, сложилась практика отглагольных форм. но что-то я последнее время, когда много процедур и функций начал "группировать" по принципу "Объект" -> "Что с ним делаем"...
220 Chai Nic
 
10.12.25
11:24
(218) Это вы считаете что это плохо. А изначально возможность абстрагироваться от способа получения данных считалось крайне полезной. В паскале вот даже можно было вызывать функцию без скобок.
221 Fish
 
гуру
10.12.25
10:20
(42) "А есть утвержденные тесты для проверки "нормальности" программиста?" - Если ты работаешь с типовыми и у тебя волосы причёсаны и глаза не вытекли - ты ненормальный.
222 Asmody
 
10.12.25
11:16
(221) 🔥
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший