Имя: Пароль:
1C
1С v8
Использование функций вместо процедур. Подмена понятий или..?
, ,
0 lxs
 
23.12.19
17:10
1. Следует строго разграничивать proc(x) и func(x) 44% (12)
2. Свой вариант 44% (12)
3. Без разницы, говнокод - наше всё 11% (3)
Всего мнений: 27

Приветствую всех.

Некоторое время назад довелось заниматься code review команды разработчиков.
Наткнулся на то, что в коллективе была принята методология использования вызова функций вместо процедур независимо от того, возвращает ли что-то данная функция или нет.

То есть код

РассчитатьЗадолженность(); //где РассчитатьЗадолженность() - функция

Повсеместно.

У кого какой опыт, кто какой методологии придерживается? Может быть я консервативен, но зачем использовать не по назначению конструкции?
1 Garikk
 
23.12.19
17:14
нужно следовать гайдлайнам языка

Следует строго разграничивать proc(x) и func(x)
2 elCust
 
23.12.19
17:14
Да ващще, пишут как хотят. Никакого уважения.

Следует строго разграничивать proc(x) и func(x)
9 jsmith82
 
24.12.19
08:22
функция [в 1с] всегда что-то возвращает, хотя бы Неопределено, т.е. можно к ней обратиться как к функции, а к процедуре уже нельзя

Следует строго разграничивать proc(x) и func(x)
13 lxs
 
24.12.19
08:45
(11) "Процедура может поменять" - процедура ничего не может, если ты там не наговнокодишь. Посмотри в любой типовой обработку проведения, например.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

    // Инициализация дополнительных свойств для проведения документа
    ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
    
    
    // Движения по денежным средствам.
    ДенежныеСредстваСервер.ОтразитьДенежныеСредстваУПодотчетныхЛиц(ДополнительныеСвойства, Движения, Отказ);
    ДенежныеСредстваСервер.ОтразитьДенежныеСредстваКСписаниюСПодотчетныхЛиц(ДополнительныеСвойства, Движения, Отказ);

...

КонецПроцедуры





И это вполне себе логично.

В каждой "внутренней" процедура в начале добавляешь проверку на отказ и всё.

Напиши мне этот же код только на функциях. Я даже за попкорном схожу.

Следует строго разграничивать proc(x) и func(x)
18 mmmarat
 
24.12.19
08:54
Если используют функции, там где это не обязательно, можно закрыть на это глаза. В каких то случаях это допустимо или это частный случай. Но если везде вместо процедур пишут исключительно функции, то это говнокод.

Следует строго разграничивать proc(x) и func(x)
21 Провинциальный 1сник
 
24.12.19
08:56
Более того. Функция должна быть строгой в математическом смысле, без побочных эффектов. То есть, не изменять контекст, а лишь возвращать значение, простое или структурное, для последующей обработки.

Следует строго разграничивать proc(x) и func(x)
39 Mort
 
24.12.19
09:40
Тупейшая хрень. "А вот чо место простаивает, давайте его используем как возврат для ошибок". Тот кто мыслит строками может такое выдумать. Кто мыслит объектами и взаимодействиями, четко понимает чем одно отличается от другого и никогда на эту херню не подпишется.

Следует строго разграничивать proc(x) и func(x)
43 ManyakRus
 
24.12.19
09:58
функция которая ничего не возвращает это обман.
Ненаписание слова "Знач" это тоже обман.
Не надо никого обманывать.

Следует строго разграничивать proc(x) и func(x)
54 novichok79
 
24.12.19
11:22
бывает так, что нужен результат выполнения какой-либо операции, тогда вроде функция ведет себя как процедура, но возвращает какие данные о статусе выполнения операции. я делаю так

Функция СделатьДело()

МассивОшибок = Новый Массив;

Попытка

РезультатОперации = Сделать1();

Исключение

РезультатОперации = Неопределено;

МассивОшибок.Добавить("Не шмогла " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));

КонецПопытки

Результат = Новый Структура;

Результат.Вставить("ОперацияУспешна", МассивОшибок.Количество() = 0);
Результат.Вставить("МассивОшибок", МассивОшибок);
Результат.Вставить("РезультатОперации", РезультатОперации);

Возврат Результат;

КонецФункции

Следует строго разграничивать proc(x) и func(x)
120 pavig
 
24.12.19
17:42
Самое адекватное объяснение ИМХО в (51)

Следует строго разграничивать proc(x) и func(x)
123 Конструктор1С
 
24.12.19
20:09
Надо делать как общепринято, а не как вошло в традицию в отдельно взятом болотце. Готов спорить, говнокодинг у этих ребят далеко не ограничивается использованием функций вместо процедур

Следует строго разграничивать proc(x) и func(x)
154 tan76
 
25.12.19
10:23
*

Следует строго разграничивать proc(x) и func(x)
2 + 2 = 3.9999999999999999999999999999999...