Имя: Пароль:
1C
 
Про самодокументируемость кода:
0 Fragster
 
гуру
14.10.16
11:39
1. Другой вариант (какой?) 55% (6)
2. Второй вариант 27% (3)
3. Первый вариант 18% (2)
Всего мнений: 11

Что лучше:

Вариант 1:

Процедура ПередЗаписью()
....
  // тут может быть комментарий про необходимость, если условие не самодокументируемое (типа статус = НужныйСтатус)
  Если НеобходимоЧтоТоСделать() Тогда
    ЧтотоСделать();
  КонецЕсли;
....
КонецПроцедуры

Вариант 2:

Процедура ПередЗаписью()
....
  // тут может быть комментарий про необходимость, и он должен быть всегда
  ЧтотоСделатьПриНеобходимости();
....
КонецПроцедуры

Процедура ЧтотоСделатьПриНеобходимости()
  Если Не НеобходимоЧтоТоСделать() Тогда
    Возврат;
  КонецЕсли;
....
КонецПроцедуры
1 Timon1405
 
14.10.16
11:42
НеобходимоЧтоТоСделать= НеобходимостьЧтоТоСделать();
//тут если что ее отладке можно переопределить
Если НеобходимоЧтоТоСделать Тогда
    ЧтотоСделать();
КонецЕсли;

Другой вариант (какой?)
2 Gary417
 
14.10.16
11:43
(1) Этим надо дополнить второй вариант

Второй вариант
3 Волшебник
 
модератор
14.10.16
11:43
(1) Поддерживаю
4 Fragster
 
гуру
14.10.16
11:43
(2) этим модно дополнить оба варианта
5 Fragster
 
гуру
14.10.16
11:43
*можно
6 Волшебник
 
модератор
14.10.16
11:44
(4) фраза "Если Не НеобходимоЧтоТоСделать() Тогда"
звучит не по-русски
7 Gary417
 
14.10.16
11:44
(4) можно само собой, но второй вариант более архитектурно верный
8 Fragster
 
гуру
14.10.16
11:44
(6) началось все с Не ЗначениеЗаполнено
9 novichok79
 
14.10.16
11:45
документирую для себя в самых необходимых случаях, например:
//а с чего бы это так?
//требования заказчика из ТЗ:

пытаюсь делать код, который бы содержал человеческие названия процедур и переменных (а не а, б, в).

Другой вариант (какой?)
10 Джо-джо
 
14.10.16
11:45
Процедура НичегоНеДелать()
КонецПроцедуры
11 Fragster
 
гуру
14.10.16
11:45
(6) можно заменить на НужноЧтотоСделать()
12 Мойдодыр
 
14.10.16
11:46
Процедура СделатьВсеКогдаНужно()
КонецПроцедуры
13 Волшебник
 
модератор
14.10.16
11:47
(8) Тоже не по-русски.
Лучше так Если ЗначениеНеЗаполнено() Тогда
14 Timon1405
 
14.10.16
11:48
есть же стандарты
http://its.1c.ru/db/v8std#content:-2145783193:hdoc:_top
http://its.1c.ru/db/v8std#content:2149184296:hdoc
5. Переменные, отражающие состояние некоторого флага, следует называть так, как пишется истинное значение этого флага.
Например:

Перем ЕстьОшибки; // Признак наличия ошибок в процедуре.
Перем ЭтоТоварТара; // Признак, что товар относится к возвратной таре.
2. Имена процедур, функций и формальных параметров следует образовывать от терминов предметной области таким образом, чтобы из имени было понятно назначение. Следует стремиться к тому, чтобы имена были "говорящими" (документировали сами себя).
Например, неправильно:

Функция ВыполнитьПроверку(Параметр1, Рекв, ТЗ)
Функция ПолучитьМассивыРеквизитов(ХозяйственнаяОперация, МассивВсехРеквизитов, МассивРеквизитовОперации)

Правильно:

Функция РеквизитОбъектаЗаданногоТипа(Объект, ИмяРеквизита, ТипЗначения)
Функция ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(ХозяйственнаяОперация, ИменаВсеРеквизиты, ИменаРеквизитыОперации)
15 Jija Grenkov
 
14.10.16
11:48
Я исхожу из того что читая верхний слой кода нужно будет прерваться и перейти внутрь, я стараюсьникода не прятать условия в метод типа "выполнить, если надо". По такому шаблону я могу делать методы типа "Получить или создать", " получить или вернуть значение по умолчанию"

Первый вариант
16 mistеr
 
14.10.16
11:49
(0) Условие может быть не простое, условий может быть несколько. Вызов может использоваться в куче объектов, не копипастить же везде лишний код.

Комментарий про необходимость достаточно поместить в ЧтотоСделатьПриНеобходимости().

Второй вариант
17 Jija Grenkov
 
14.10.16
11:53
(16) есть такое мнение, что комментарии это извинения за плохой код.
18 Jija Grenkov
 
14.10.16
11:54
(16) так же в посте в обоих случаях условие спрятано в функции
19 ЧеловекДуши
 
14.10.16
11:57
Питничная ветка :)

Другой вариант (какой?)
20 Irbis
 
14.10.16
12:02
Из классики, коду больше 9 лет, комментарии так никто и не удосужился удалить
                        Ресурсы.Вставить("БиржевыеРасходы", 0); // ???
                        Ресурсы.Вставить("УскорениеОтгрузки", 0); // ???
                        // Знатный косяк, никогда больше так не делай
                        //Ресурсы.Вставить("СуммаПрямыхЗатрат", 0); // Движение между выполняется по трансфертной себестоимости
                        //
                        // Учтем теперь и расчетный тариф по партии со статусом "В пути"
21 Ислам
 
26.10.16
00:57
(0) 1-й вариант норм. Как и (1) что то же самое только с промежуточной переменной.
2-й вариант не годный, т.к. запускается процедура в любом случае без условий, при отладке плохо. И внутри процедуры матрешка вторая процедура, что тоже не красиво. Да еще и  с похожим названием, вообще плохо.
22 Ислам
 
26.10.16
00:57
забыл проголосовать

Первый вариант
23 Ислам
 
26.10.16
00:58
(15) Жижа +1
24 su_mai
 
26.10.16
08:30
(0) Флаг должен быть переменной НеобходимоЧтоТоСделать, а не результатам функций НеобходимоЧтоТоСделать(). Если потребуется проверить код в отладчике, то нет возможности понять какое на самом деле вернул значение метод НеобходимоЧтоТоСделать(), так как данные в ИБ могли измениться пока вы думали. Может так?

Другой вариант (какой?)
25 vi0
 
26.10.16
08:48
2й вариант - смешение по сути двух процедур - считаю, такого стоит избегать
26 Asmody
 
26.10.16
09:06
Я стараюсь придерживаться принципа: процедура – это глагол, функция – это существительное.
27 Лефмихалыч
 
26.10.16
09:16
(0) самодокументируемость - you're ddoing it wrong!
надо вот так:


Если НекоеУсловиеВыполняется() Тогда
   ЧтоТоСделать();
КонецЕсли


// например
Если ДостпунаАвтооплата(ЗаказПоставщику) Тогда
   СоздатьЗаявкуНаОплату();
КонецЕсли;


во всех твоих вариантах название условия содержит  не только условие и то, что к нему не относится.

Другой вариант (какой?)
28 Дарлок
 
26.10.16
09:27
(0)
второй вариант хуже
вложенность нужно уменьшать, а не создавать искусственно. в мире правит ООП, а вы все пишите, как старые дряхлые деды во времена фортрана

Другой вариант (какой?)
29 Timon1405
 
26.10.16
09:32
(27) Вариант с одельной переменной лучше, потому что ее легко можно переназначить в отладке(ИР в 8.2, штатно платформой в отладке в 8.3.7), а функцию так просто не переназначишь
30 Лефмихалыч
 
26.10.16
09:35
(29) вопрос был про самодокументируемость, а не про отладку
31 Asmody
 
26.10.16
09:46
(29) "Переопределить значение переменной в отладке" – это что за дичь?
32 Timon1405
 
26.10.16
09:53
33 Timon1405
 
26.10.16
09:54
* в самом конце
34 Лефмихалыч
 
26.10.16
10:11
(31) в любом другом отладчике, кроме 1с-овского можно в отладке значения локальных переменных менять. Уже лет двадцать к ряду, наверное. Правда это надо так редко, что ни кто и не заметил особо
35 newbling
 
26.10.16
10:43
Я взял за правило ко всяким сложным процедуркам делать рефакторингом комментную приписку, где всё можно описать так, что при её вызове будет сразу понятно что и куда.

Функция СделатьЧтоПолучится()
   Возврат(ШтоШмогла);
КонецФункции
36 Злопчинский
 
26.10.16
11:00
(0) за лингвистическую конструкцию
Если Не Необходимо
За два Не я бы автору волчий билет в программирование выписал
37 Злопчинский
 
26.10.16
11:01
(34) в клюшках я могу переопоеделить
38 Stepa86
 
26.10.16
11:10
Достаточно одинаковые варианты. Если отталкиваться только от того, что описано в (0), то второй вариант мне больше нравится. В реальности буду смотреть на повторное использование, понятность, размещение, методы по соседству, объем кода, необходимость отладки итп.
Сами 1С в УП/УТ11 в модулях документов в обработке проведения делают больше по второму варианту, а в остальных по первому

Второй вариант