Вход | Регистрация


1С:Предприятие :: Математика и алгоритмы

Про самодокументируемость кода:

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

Что лучше:

Вариант 1:

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

  Если НеобходимоЧтоТоСделать() Тогда
    ЧтотоСделать();
  КонецЕсли;
....
КонецПроцедуры

Вариант 2:

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

  ЧтотоСделатьПриНеобходимости();
....
КонецПроцедуры

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

Если НеобходимоЧтоТоСделать Тогда 
    ЧтотоСделать(); 
КонецЕсли;

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

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

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

3. Другой вариант (какой?)
   Джо-джо
 
10 - 14.10.16 - 11:45
Процедура НичегоНеДелать()
КонецПроцедуры
 
 Рекламное место пустует
   Fragster
 
11 - 14.10.16 - 11:45
(6) можно заменить на НужноЧтотоСделать()
   Мойдодыр
 
12 - 14.10.16 - 11:46
Процедура СделатьВсеКогдаНужно()
КонецПроцедуры
   Волшебник
 
Модератор
13 - 14.10.16 - 11:47
(8) Тоже не по-русски.
Лучше так Если ЗначениеНеЗаполнено() Тогда
   Timon1405
 
14 - 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, Рекв, ТЗ)
Функция ПолучитьМассивыРеквизитов(ХозяйственнаяОперация, МассивВсехРеквизитов, МассивРеквизитовОперации)

Правильно:

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

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

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

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

3. Другой вариант (какой?)
   Irbis
 
20 - 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
забыл проголосовать

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

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

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


// например

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


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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует