Правила оформления кода
Стандарты разработки
Желательно придерживаться официальных стандартов разработки 1С.
Ограничения
- Нежелательно использовать табличные части обработок и отчетов. Это связано с особенностями сборки портативных инструментов
- Для использования чужих обработок нужно разрешение автора или подходящая лицензия (MIT, GPL и т.д.)
- Все изменения должны быть совместимы с режимом отключенной поддержки модальности и синхронных вызовов
Префиксы и именование
- Все общие модули, обработки и прочие объекты метаданных подсистемы используют префикс
УИ_ - Публичные методы модулей должны быть документированы в коде
Имена переменных
- Имена переменных следует образовывать от терминов предметной области так, чтобы из имени было понятно назначение
- Каждое слово в имени пишется с прописной буквы, пробелы удаляются. Предлоги и местоимения из одной буквы также пишутся прописными
- Имена переменных запрещается начинать с подчеркивания
- Имена не должны состоять из одного символа (исключение — счётчики циклов)
- Переменные-флаги следует называть так, как пишется истинное значение этого флага
// Плохо:
масРеквизитов
ГалкаОшибка
ФлагТара
новСтр
// Хорошо:
КоличествоПачекВКоробке
ЕстьОшибки
ЭтоТоварТара
ДиалогРаботыСКатлогом
- Не используйте отрицание в именах переменных
// Плохо:
Перем НетОшибок;
// Хорошо:
Перем ЕстьОшибки;
Имена процедур и функций
- Имена процедур, функций и формальных параметров образуются от терминов предметной области. Имя должно быть «говорящим» (самодокументирующимся)
- Каждое слово пишется с прописной буквы, пробелы удаляются
- Не рекомендуется указывать в имени типы принимаемых параметров или возвращаемого значения
// Плохо:
Функция ПолучитьМассивРолейСПравомДобавления()
Функция ПолучитьСтруктуруДополнительныхНастроек()
// Хорошо:
Функция ИменаРолейСПравомДобавления()
Функция ДополнительныеНастройки()
- Процедуры — имя образуется от неопределённой формы глагола (что сделать?)
- Функции — имя образуется от описания возвращаемого значения (существительное)
// Процедуры:
Процедура ЗагрузитьКонтрагента() // правильно
Процедура ЗагрузкаКонтрагента() // неправильно
// Функции:
Функция ПолноеИмяПользователя() // правильно
Функция ПолучитьПолноеИмяПользователя() // неправильно
Функция НовыеПараметрыЗаполнения() // правильно
Функция ДатаНачалаСеанса() // правильно
- Параметр функции не должен использоваться как дополнительный вывод — весь результат возвращается через возвращаемое значение. Если нужно вернуть несколько значений, используйте
Структура,Массиви т.д. - Не используйте отрицание в именах методов
// Плохо:
Функция ПроверкаНеПройдена()
// Хорошо:
Функция ПроверкаПройдена()
Совместимость с разными платформами
| Проблема | Код заменяемый | Код необходимый | Ссылки |
|---|---|---|---|
Пустые конструкторы ОписаниеОповещения в платформах < 8.3.12 | Новый ОписаниеОповещения | УИ_ОбщегоНазначенияКлиент.НовыйПустоеОписаниеОповещения() | #668 |
Лицензионная чистота форков
При добавлении инструментов из других репозиториев обязательно:
- Получить разрешение автора (ссылка на issue/письмо)
- Убедиться, что лицензия исходного инструмента совместима с GPL-3.0
- Указать автора и источник в README и в коде