Имя: Пароль:
1C
1С v8
Функции возвращающие булево или переменная Отказ. Что лучше?
,
0 ГдеСобака Зарыта
 
06.07.17
10:47
1. Свой вариант феншуй-кода. 75% (3)
2. Функцию с булево 25% (1)
3. Перем Отказ 0% (0)
Всего мнений: 4

Допустим есть код в котором организован ряд проверок в процедурах/функциях произвольной вложенности. Какой вариант кода будет более православным, читабельным?
1. Использовать функции возвращающие булево
Если НЕ УсловиеВыполнено() Тогда
    Возврат;
КонецЕсли
2. Использовать процедуры и переменную Отказ
ПроверитьВыполнениеУсловия(Отказ);
Если отказ Тогда
    Возврат;
КонецЕсли;
1 drcrasher
 
06.07.17
10:47
(0) по методике 1с - вариант 2
2 Ёпрст
 
06.07.17
10:49
(0) зависит от задачи
3 Вафель
 
06.07.17
10:49
(1) Это если есть параметр события Отказ
4 Кирпич
 
06.07.17
10:49
5 Ёпрст
 
06.07.17
10:50
И смотря, что именно должна вернуть функция.
Если одно значение, то достаточно и Возврат Ложь/Истина
если возвращает структуру, то 2-ой вариант.
6 ГдеСобака Зарыта
 
06.07.17
10:58
(1) А в какой методичке 1С это написано?
7 Лефмихалыч
 
06.07.17
10:59
параметр Отказ нужен тогда, когда, во-первых, метод должен вернуть что-то отличное от простого результата проверки, во-вторых, проверка этого условия либо установка отказа - это побочный эффект у метода. Причем - одновременно.
Когда у тебя метод служит целиком и полностью, чтобы только проверить условие, то параметр - это копрокод.
8 spock
 
06.07.17
11:11
(7) +

Функцию с булево
9 vde69
 
модератор
06.07.17
11:11
если подразумевается вызов нескольких обработчиков подряд, то лучше "Отказ" и проверка на него внутри обработчика, пример:

Отказ = ложь;
Обработчик1(Отказ,параметры);
Обработчик2(Отказ,параметры);
Обработчик3(Отказ,параметры);
10 vde69
 
модератор
06.07.17
11:12
3

Свой вариант феншуй-кода.
11 Йохохо
 
06.07.17
11:15
возвращать Неопределено слишком просто? Зачем Отказ в предопределенных процедурах понятно, в своих сам себе буратино
(9) заклюют за лишнее время. Ставить в начале каждого если не отказ возврат - на троечку
12 arsik
 
гуру
06.07.17
11:16
Я стараюсь всегда возвращать структуру минимум с 2-мя параметрами.
1) Отказ
2) Описание отказа

Свой вариант феншуй-кода.
13 senior
 
06.07.17
11:19
(0) У Отказ'а одна задача - зафиксировать, что документ не может быть проведен, но при этом не прерывать выполнение и продолжить дальнейшие проверки. Это стандартная методика 1С. Если такое поведение не нужно, то Отказ не нужен в принципе.
14 drcrasher
 
06.07.17
11:24
15 Альбатрос
 
06.07.17
11:37
(11) Ну не факт. Ибо обычно при отказе выводят информацию почему, собссно, отказ. И тогда сразу провенрить по всем условиям лучше.
16 Лефмихалыч
 
06.07.17
11:38
(11) неопределено оно на то и неопределено, что это не ответ, а его отсутствие. Возвращать Неопределено, когда смысл в том, что какая-то проверка не пройдена - очень плохо. В результате проверки неопределено должно означать, что выполнить проверку не удалось - например, ресурс, участвующий в проверке, не доступен или еще что-то такое.

Неопределено вместо отказа - это копрокод и вообще голимое пхп. Профессионалы так не делают.
17 Лефмихалыч
 
06.07.17
11:40
(14) это не то, о чем автор спрашивает. В этой статье описывается, как правильно обращаться с inout-флагами Отках, СтандартнаяОбработка и т.д. Автор же спрашивает, как православно инкапсулировать длинные проверки каких-то условий.
18 vde69
 
модератор
06.07.17
12:01
(11) у меня лишним является столь малое количество, что им можно пренебречь...

зато
1. читабельность основной процедуры отличная
2. в обработчиках можно предусмотреть например вывод логов и т.д.
19 Лефмихалыч
 
06.07.17
12:20
(18) таки это (8) хреновый вариант, усложняющий поддержку и сопровождение кода. Читабельность он как раз усирает в край - без чтения содержимого этих обработчиков ты ни когда не поймешь, что сделает последующий, если предыдущий вернул отказ. Это безусловно плохо.
20 Zamestas
 
06.07.17
12:26
(0) От ситуации зависит - я иногда вообще структуру со структурами между функциями гоняю.

Свой вариант феншуй-кода.