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