|
Про самодокументируемость кода: | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
Fragster
гуру
14.10.16
✎
11:39
|
Что лучше:
Вариант 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 в модулях документов в обработке проведения делают больше по второму варианту, а в остальных по первому Второй вариант |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |