Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Количество параметров в методе, однострочные конструкции, аннотация методов #8

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 57 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@
НоваяСтрока.НомерГруппы = ГруппаПоВидуОперации(ВидОперации);
НоваяСтрока.ПоОрганизацииВЦелом = ГруппаПоОрганизации(НоваяСтрок);
```

### Методы

- Параметр функции не должен возвращать значение. Иными словами не используйте входные параметры функций как дополнительный вывод. Весь вывод должен быть в возвращаемом значении. Если нужно возвращать несколько значений следует использовать такие типы как `Структура`, `Массив` и т.д.
Expand All @@ -83,6 +82,45 @@ URLСервиса = "";
// ИмяПользователя - Строка
// ПарольПользователя - Строка
```
- Не используйте в методе больше трех основных параметров. Структура дополнительных параметров определяется четвертым параметром
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спорный момент. Sandi Metz, достаточно известный и авторитетный разработчик в своих правилах https://thoughtbot.com/blog/sandi-metz-rules-for-developers пишет:
Не используйте более 4 аргументов, элементы структуры тоже считаются.
Для 1С можно написать 5, но прятать аргументы в структуру не лучшая рекомендация.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Начиная с 5 параметров глаз уже "начинает теряться" среди такого количества. Почему же прятать аргументы в структуру не лучшая рекомендация?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Дело в том что в среднем по больнице если у метода большое количество аргументов значит у него с большой вероятностью более одной обязанности (single responsibility principle). И это правило как раз помогает лучше структурировать код на методы, которые делают одну вещь.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Убедительно. Тут по всей видимости у каждого разработчика своя величина, +- 1

```bsl
// Плохо:
Процедура СоздатьЦепочкуДокументов(ДокументПоступления, ТаблицаОпераций, Отказ,
ВыполнитьВФоне = Ложь,
ПоказыватьПрогрессБар = Ложь,
НеПоказыватьИсключения = Ложь)

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

// Хорошо
Процедура СоздатьЦепочкуДокументов(ДокументПоступления, ТаблицаОпераций, Отказ, СтруктураДопПараметров)

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

- Обязательная аннотация методов. Полноценный комментарий к методу, придерживаясь общих правил комментирования
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стивен Макконел в книге "Совершенный код" пишет - если ваш код требует комментариев - перепишите его, чтобы не требовал. В случае если это недостижимо ... (далее идет целая глава)
Поэтому я бы не упоминал обязательную аннотацию методов.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В таком случае следует написать "Аннотация не требуется, см. наименование метода"

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А есть ли ценность в этой аннотации?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Соглашусь, ценности в этом случаем ноль получается

```bsl
// Плохо:

// Выполняет перерасчет таблицы
// Параметры
// *ТаблицаДляПерерасчета - ТаблицаЗначений - Таблица значений для перерасчета
//
Процедура ВыполнитьПереасчетТаблицы(ТаблицаДляПереасчета)

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

// Хорошо

// Выполняет перерасчет сумм в таблице после изменения цен для последующего
// создания документа УстановкаЦенНоменклатуры
// Параметры
// *ТаблицаДляПерерасчета - ТаблицаЗначений - Таблица товаров с новыми ценами
//
Процедура ВЫполнитьПерерасчетТаблицы(ТаблицаДляПерерасчета)

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

### Условия
- Предпочтительней использовать тернарный оператор для простых конструкций.
Expand Down Expand Up @@ -178,6 +216,14 @@ URLСервиса = "";
...
КонецФункции
```
- Строковые переменные следует располагать в алфавитном порядке для более легкого чтения
```bsl
// Плохо:
ПараметрыОткрытияФормы = Новый Структура("НеОбновлятьДанныеПриОткрытии, ЗаголовокФормы, Комментарий");

// Хорошо
ПараметрыОткрытияФормы = Новый Структура("ЗаголовокФормы, Комментарий, НеОбновлятьДанныеПриОткрытии");
```

### Имена процедур, функций, переменных

Expand All @@ -204,7 +250,17 @@ URLСервиса = "";

Если Не Условие И Не ПроверкаПройдена() Тогда
```
### Читаемость кода
- Не используйте однострочные конструкции со сложной логикой, т.к. усложняется отладка
```bsl
// Плохо:
Наименования = Запрос.Выполнить().Выгрузить().Свернуть("Наименование").ВыгрузитьКолонку("Наименование");

// Хорошо
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРезультатаЗапроса = РезультатЗапроса.Выгрузить();
Comment on lines +260 to +261
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для данного примера я бы не выносил РезультатЗапроса в отдельную переменную.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Возможно пример получился не самый удачный (можно заменить). Главное сама суть такого подхода

Наименования = ТаблицаРезультатаЗапроса.Свернуть("Наименование").ВыгрузитьКолонку("Наименование")
```
### Комментарии
- Если код требует комментария для пояснения работы - в первую очередь необходимо рассмотреть варианты рефакторинга, чтобы код не требовал комментария.
- К комментариям также относятся ограничения на длину строки в 120 символов.
Expand Down