Имя: Пароль:
IT
 
Блочный оператор в одну строку
0 trad
 
15.07.20
12:21
1. Вариант Б 78% (43)
2. Вариант А 22% (12)
Всего мнений: 55

Как вы пишете блочные операторы Если, Пока, Для, Попытка и т.п. если в теле всего один исполняемый оператора?

Вариант А:
Если А=Б Тогда Возврат; КонецЕсли;

Вариант Б:
Если А=Б Тогда
    Возврат;
КонецЕсли;
1 Ёпрст
 
15.07.20
12:22

Вариант Б
2 Лефмихалыч
 
15.07.20
12:24
Б!

И руки Б отрывал Б тем, что делает Б иначе

Вариант Б
3 Смотрящий
 
15.07.20
12:28
)

Вариант А
4 Lazy Stranger
 
15.07.20
12:32
(2) +1

Вариант Б
5 Йохохо
 
15.07.20
12:33
Если Ложь Тогда Возврат; КонецЕсли;
но
Если А=Б Тогда
    Возврат;
КонецЕсли;
6 dka80
 
15.07.20
12:35
Если Ложь Тогда Возврат; КонецЕсли;

ИндусКодДетектед?
7 dka80
 
15.07.20
12:35
.

Вариант Б
8 Многолетний Апельсин
 
15.07.20
12:51
https://its.1c.ru/db/v8std#content:456:hdoc
"4. Тексты модулей оформляются по принципу "один оператор в одной строке". Наличие нескольких операторов допускается только для "однотипных" операторов присваивания"

Вариант Б
9 Злопчинский
 
15.07.20
16:19
. ибо не надо усложнять там где это нафиг не нужно
.
а то листаешь простыни по пять экранов, когда все может на 1-2 уместиться

Вариант А
10 fisher
 
15.07.20
16:22
Вариант А затрудняет чтение.

Вариант Б
11 fisher
 
15.07.20
16:23
Особенная жесть, когда одновременно еще и на форматирование плюют.
12 NcSteel
 
15.07.20
16:31
В примере (0) только А.

Вариант А
13 NcSteel
 
15.07.20
16:31
(11) Строка короткая, чего там затруднять?
14 Злопчинский
 
15.07.20
16:38
(13) вот и я про то же самое.
.
затрудняет чтение

если...
  если...
    если...
      если...
        если...
15 hi1C
 
15.07.20
16:42
Упрощает чтение

Вариант А
16 hi1C
 
15.07.20
16:43
Я бы написал Если А = Б Тогда Возврат КонецЕсли;
17 sitex
 
naïve
15.07.20
16:45
..

Вариант А
18 Андроны едут
 
15.07.20
16:45
Я не Маяковский)

Вариант А
19 fisher
 
15.07.20
17:10
(13) Очень просто. При варианте Б работает единственное правило: открылась операторная скобка - ниже она будет закрыта.
20 Lama12
 
15.07.20
17:21
Как бы, для единообразия.

Вариант Б
21 vova1122
 
15.07.20
17:23
какраз при комбинации разных вариантов будет затруднение чтения. Представь ты листаешь километровую простень, Видешь оператор "Если" не вдаваясь в подробности условия идешь вниз интуитивно ожидая "КонецЕсли, А там "Облом"

Вариант Б
22 Злопчинский
 
15.07.20
17:24
(0) ты еще запости то что я тоже расписывал - когда многоярусные если (повбывав бы) расписываются в плоский код.
23 Злопчинский
 
15.07.20
17:28
(21) интуитивно - это когда ожидаешь конец если а он на другом экране...
.
я вот никакой трудности с комбинацией разных вариантов не ощущаю.
большие если - нормально блочным вариантом.
короткая если - в одну строку.
и нормально читается, тем более что такие коротки если - они не так уж часты и часто либо "фильтрами" работают, либо какимито завершающими выводами. И это наоборот помогает понять логику легче.

потому что когда я вижу блок - я ожидаю что там что-то сложное делается.. а тут хреняк! возврат (да еще без запяточки - повбывавбы). я наоборот напрягаюсь когда в блоке один оператора - сразу мысль что хотел сказать автор? не забыл ли он чтото еще написать кроме капитанаочевиднеости.
24 mikecool
 
15.07.20
17:32
Чтение лучше, возможные доработки - проще сравнивать в хранилище

Вариант Б
25 oslokot
 
15.07.20
17:37
(0) ; здесь лишняя

    Если А=Б Тогда
        Возврат
    КонецЕсли;        


Вариант Б
26 mikecool
 
15.07.20
17:38
(25) она не нарушает парадигму
27 acht
 
15.07.20
17:38
(25) Скажите, а что вы делаете с этим безумным количеством освободившегося времени, которое у вас появляется от пропуска необязательных разделителей?
28 Ray Zexter
 
15.07.20
17:39
Вариант Б

Вариант Б
29 Йохохо
 
15.07.20
17:39
(27) oslokot
Сообщений:     5495
30 oslokot
 
15.07.20
17:40
(29) ого!!
31 oslokot
 
15.07.20
17:40
мизда затягивает!
32 acht
 
15.07.20
17:41
(30) Второй восклицательный знак здесь лишний =)
33 vova1122
 
15.07.20
17:41
(23) Кому как удобнее писать.
Я например пишу
Если
КонецЕсли;
У уже потом условия и операторы внутри условия. Также и со скобками () открываю-закрываю, а уже потом в внутри скобок текст
34 vi0
 
15.07.20
17:42
(9) смотря что считать усложнением
по мне так вариант А это усложнение
35 mikecool
 
15.07.20
17:42
(32) еще один Андреевич? ))
36 oslokot
 
15.07.20
17:43
(32) но это не код!!
37 oslokot
 
15.07.20
17:45
Кстати отсутствие пробелов в таких конструкциях А=Б вызывает отвращение и резкое снижение читаемости кода
Пишите с пробелами А = Б
38 Конструктор1С
 
15.07.20
17:46
Только так

Вариант Б
39 fisher
 
15.07.20
17:49
(25) Необязательная <> лишняя.
1) единообразненько
2) проще рефакторить ибо 1)
40 vova1122
 
15.07.20
17:49
(37) 1-Сники ленивые, А это нужно лишние клавиши жать...
41 Конструктор1С
 
15.07.20
17:49
Вариант А просто ужасен. Мало того, что он снижает читаемость кода, так ещё и вставит палки в колёса, когда "внезапно" логическая проверка усложнится, или в блоке добавится операторов
42 acht
 
15.07.20
17:50
(35) Не. Великий князь, сын Императора =)
43 oslokot
 
15.07.20
17:52
В клюшках я активно эксплуатировал вариант А для сокращения вертикальной простыни кода, а в снеговике это просто не нужно
44 Ненавижу 1С
 
гуру
15.07.20
17:52
Когда уже 1с:экзекутор внедрят
45 acht
 
15.07.20
17:53
В первом варианте нельзя поставить брякпоинт на возврат. По сути - заподлянка для себя будущего.

Вариант Б
46 Злопчинский
 
15.07.20
17:54
(41) когда добавится - тогда и заблочим как положено для сложного кода.
вот блин камазы никто не покупает. все в одну строку ездят на леговушках.
47 fisher
 
15.07.20
17:56
(46) Я тоже предпочитаю писать максимально единообразно и удобно для последующих исправлений и доработок.
Но на самом деле это все чепуха и дело вкуса. Никакой особой проблемы в стилевых отличиях я не вижу. Главное - чтобы выбранный стиль выдерживался.
48 acht
 
15.07.20
17:56
(44) ЭКЗЕКУТОР
муж., лат. (исполнитель) чиновник при канцелярии и присутственом месте, на котором лежат полицейские и хозяйственые обязанности. Экзекуторский желудок все варит: и бумагу ест, и перья ест, чернила ест, и песок ест!

Толковый словарь Даля. В.И. Даль. 1863-1866.
49 Злопчинский
 
15.07.20
17:56
(45) это в принципе единственное против варианта А.
50 Злопчинский
 
15.07.20
17:57
(37) это ты скажи тем кто херачит простыни кода не отбивая смысловые блоки пустой строкой
51 Йохохо
 
15.07.20
17:57
вариант А используется для синтаксического мусора
если Ложь Тогда тСпр = Справочники.Спр.СоздатьЭлемент(); КонецЕсли;
(46) Камазы возят воду для роболарьков внутри мкад
52 vi0
 
15.07.20
18:09
(0) естественное читабельное написание
кто пишет в одну строку - неясно, что хотят выгодать в обмен на худшую читабельность

Вариант Б
53 Конструктор1С
 
15.07.20
18:12
(46) скорее всего это "удовольствие" достанется кому-то другому. Неужели сразу нельзя нормально сделать? Какой смысл экономить строки?
54 Franchiser
 
гуру
15.07.20
18:21
По-разному.
Если много условий "Если"  то А

Вариант А
55 timurhv
 
15.07.20
18:21
(0) Вариант А только если 1С тупит и отрабатывает быстрее чем Б.
Очень редко, пару раз использовал за почти 10 лет в 1С.
56 vi0
 
15.07.20
18:23
(55) это не 1с тупит в варианте А, а попытка оптимизировать с помощью варианта А
57 vi0
 
15.07.20
18:23
*это не 1с тупит в варианте Б, а попытка оптимизировать с помощью варианта А
58 Dionis Sergeevich
 
15.07.20
18:33
Ну я обычно совсем по другому делаю. Возврат один после блока Если. И инверсия условия:

Если НЕ А = Б Тогда
   //Код
КонецЕсли;

Возврат;

Не люблю я возвраты размазывать по процедуре
59 acht
 
15.07.20
18:54
(58) > Если НЕ А = Б Тогда
А когда надо проверить на неравенство - пишешь "Если Не А <> Б Тогда"?

Подобный подход увеличивает вложенность кода на пустом месте.
60 Dionis Sergeevich
 
15.07.20
19:05
(59) этих возвратов можно и десяток наполнить, лично мне не удобно и не нравится так.
Я <> тоже не использую. Либо = либо НЕ =
61 acht
 
15.07.20
19:07
(60) Усложняем. "Если А > Б" или "Если Не А < Б"?
62 vde69
 
15.07.20
19:07
только так:

Если А = Б Тогда
    Возврат;
КонецЕсли;

Вариант Б
63 Dionis Sergeevich
 
15.07.20
19:12
(61) нет, операторы сравнения я использую. Не использую только оператор "<>"
64 Конструктор1С
 
15.07.20
19:14
(63) чем он плох?
65 Dionis Sergeevich
 
15.07.20
19:20
(64) не знаю, не эстетичен. За то по коду можно определить кто из коллег его писал
66 ДНН
 
15.07.20
19:21
Б. В 1С так принято. Вариант А для других языков

Вариант Б
67 vde69
 
15.07.20
19:21
(64) это старый баян из 90х, не равно на 3 цикла дольше сравнения,

для 1с пофиг
68 vi0
 
15.07.20
19:55
(60) и эти люди не разрешают ковыряться в носу
69 acht
 
15.07.20
19:56
(67) Вот жешь блин. А как же теперь почувстовать себя крутым и вообще не таким как все? =)
70 trad
 
15.07.20
19:58
Мне непонятно, зачем, в обсуждении вопроса топика, апеллировать к недопустимости простыня-кода и лапша-кода?

Для борьбы с этими пороками существуют другие методики. Например, разбивка кода на процедуры и функции.
Ведь, если мы вместо Б напишем А, простыне не перестанет быть простыней, а лапша лапшой.
71 acht
 
15.07.20
20:14
(70) Потому что обсуждать особо-то и нечего?
72 Креатив
 
15.07.20
20:22
Вариант А должен быть таким:
если а=б тогда возврат конецесли;

Вариант Б
73 Злопчинский
 
15.07.20
20:23
(58) "Не люблю я возвраты размазывать по процедуре"
а я наоборот. ибо по куску кода сразу должно быть понятно - он весь отработал и больше он ни с чем не связан или еще что-то будет...
.

Поэтому когда

Если чтото
  //тут всякий код
иначе
  //тут всякий код
КонецЕсли;

Возврат;

то я предпочитаю делать так:
Если чтото
  //тут всякий код
  Возврат;
КонецЕсли;

//тут всякий код
.

а когда если усугублены многовложеннностьб лесенок если то такой вариант записи позволяет сделать код более линейным и менее ветвистым
74 Злопчинский
 
15.07.20
20:25
(70) ага. и десяток-два уровней вызово по стеку? потому что у кого-то три четыре оператора если сожрали экран и по правилам хорошего кода начинаем "влазить" в 1 экран? ;-)
75 Злопчинский
 
15.07.20
20:30
Я вот хз кому что там непривччно/тфяжело читать код. Может это болезно восьмерочников, которые только галочки расставляют, а чтение кода им мозг выламывает? ;-)
.
за 21 год в 1С я встретил всего один случай когда мне реально было тяжело читать код, пришлось адски напрягаться. это была какая-то обработка с Софтпоинта кажись. Код все хорошо был написан, прям по стандартам всяким. но читать его - я устал.
.
а все остальные коды - по крайней мере в клюшках - абсолютно пофиг - читал всё. затруднений не было.
единственно что на дух не переношу - так это лапшу без отсупов, без форматирования, без разбивки, смесь ключевых слов с прописной и со строчной, с какой-то тотальной невнятной логикой - короче адский говнокод.
76 vde69
 
15.07.20
20:53
(73) я предпочитаю всегда делать так

Функция а()
результат = Неопределено; // это всегда первый оператор
...
...
...
Возврат Результат; // это всегда последний оператор и единственный возврат во всей функции
КонецФункции
77 Уран Ренгенович
 
15.07.20
21:40
В обязательном порядке, только так:


Если А = Б Тогда

    Возврат;

КонецЕсли;

Вариант Б
78 xXeNoNx
 
15.07.20
21:43
(76) т.е. результат, приняв единственное правильное значение может надеятся до конца функции(возврата) что он окажется не псиной, а царем зверей?)
79 palsergeich
 
15.07.20
23:15
(78) Нет, то что при любом ходе функции не будет ошибки - неинициированная переменная
80 Ёпрст
 
15.07.20
23:18
(76) брехня..

чего, прям так и пишешь в коде ?


Функция вася (Параметры)
   результат = Неопределено; // это всегда первый оператор
   Если НЕ Параметры.Устраивают Тогда
       Результат = Неопределено;
   КонецЕсли;
   Если Пармаетры.НеВерные Тогда
       Результат = Неопределено;
   КонецЕсли;

   Если Параметры.ПолнаяЛажа Тогда
       Результат = Неопределено;
   Иначе
     ......остальной код....
     Результат = РассовоВерный;
   КонецЕсли;
   Возврат Результат;
КонецФункции


Заместо


Если НЕ Параметры.Устраивают Тогда
       Возврат Неопределено;
   КонецЕсли;
81 Ёпрст
 
15.07.20
23:22
А если в вычислении функции будет кучка вложенных циклов, или рекурсивная функция, и при некотором условии нужно просто написать Возврат Нечто;, будешь результат = Нечто; писать и прерывать все циклы по условию, чтоб в конце функции сделать Возврат Результат ?
Сумневаюсь
82 Dionis Sergeevich
 
15.07.20
23:23
(80) да, так, только без лишних условий.
(76) так же делаю, просто привычка и какой-то порядок
83 orefkov
 
15.07.20
23:49
(81)
Это у старых сишников такие закидоны иногда бывали - что мол из функции должна быть только одна точка возврата, это у них все от отсутствия деструкторов и автоматического управления памятью - тогда они могли в этом одном месте проверить, что всё что нужно освободили. Но они при этом goto в эту одну точку возврата лепили во весь рост, не стеснялись.
84 Ёпрст
 
15.07.20
23:54
(83) ясно. Всё забываю проверить, как метка в снеговике работает, и куда она прыгать смогёт между модулями..
85 timurhv
 
16.07.20
00:07
(80) я тоже так, точка возврата из функции должна быть одна
86 timurhv
 
16.07.20
00:11
87 Ёпрст
 
16.07.20
00:28
(86) ага.. и подавляющее большинство на том же хабре против такого подхода..один вход и один выход
88 Гобсек
 
16.07.20
01:17
Времена, когда использовали перфокарты, давно прошли. Экономить место ни к чему.
Чем больше комментариев, тем лучше. Код должен быть структурирован. И в (0) только

Вариант Б
89 vi0
 
16.07.20
04:54
(76) красиво на шаблоне, но по факту приходится по дорого обслуживать этот результат, нередко появляются нагромождения блоков Если
хотя сам тоже предпочитают один выход из функции
90 vi0
 
16.07.20
04:57
(86) у макконела в совершенном коде есть хороший обзор вариантов выходов с плюсами и минусами
91 Шоколадная страсть
 
16.07.20
06:08
Если всего один оператор, то допускается в одну строку и без скобок.

Вариант А
92 Шоколадная страсть
 
16.07.20
06:10
(76) Хреновый способ, потому что приходится определять переменную, а потом ее переопределять.
Я стараюсь не переопределять переменные повторно, так проще отлаживать и меньше ошибок.
93 Шоколадная страсть
 
16.07.20
06:14
Нужно писать так, не помню точно как в 1с тернарный оператор, но суть такая:

    Результат = Параметры.Устраивают
        ? РассовоВерный
        : Неопределено;

    Возврат Результат;
94 vi0
 
16.07.20
06:20
(92) вариант хороший, т.к. уменьшает риски минимальными усилиями
95 Шоколадная страсть
 
16.07.20
06:29
(94) Но не лучший. Вообще переменные - зло. В нормальных языках от них отказываются.
96 Шоколадная страсть
 
16.07.20
06:32
Мы щас крупный проект делаем на JS, за три месяца ни одной переменной не добавил, все пишу исключительно на константах и иммутабельных объектах/массивах. Всплывают во время работы даже связанные с этим головоломки, которые интересно решать.
97 Шоколадная страсть
 
16.07.20
06:36
Да, и условия стараюсь тоже не использовать. Ветвления в программе усложняют чтение и отладку.
98 vi0
 
16.07.20
06:37
ну да, а упоротые языки без переменных улучшают чтение)
99 vi0
 
16.07.20
06:39
(95) лучшее - враг хорошего
от лучших решений потом коллеги плеваться будут
100 ADirks
 
16.07.20
07:11
вариант Б
патмушта:
1. для единообразия - чтоб моск при чтении не напрягался
2. для отладки
3. для будущих поколений себя любимого - а ну как потом придётся туда дописать что-то

Вариант Б
101 Шоколадная страсть
 
16.07.20
07:30
(98) Не упоротые, а нормальные. Конечно улучшают.
(99) На то оно и лучшее, что все будут довольны.
102 acht
 
16.07.20
08:44
(96) Есть люди, которые заводят новые ники с надеждой "вот, вот, сейчас я всех затроллю, создам себе образ". И снова и снова вместо образа тролля у них получается образ клоуна.
103 vi0
 
16.07.20
08:45
(96) гордиться можно тем, что все внедрилось хорошо, код хорошо масштабируется и поддерживается
а то что там нет переменных и головоломки от этого, то это та самая упоротость, не имеющая отношения к качеству
104 fisher
 
16.07.20
09:12
Одностроки - это что-то родом из детства. Когда перло от того, сколько логики можно засунуть в одну строку. Это ж круто. Сишные циклы с максимумом логики в объявлении цикла - наше все.
Но в программировании бизнес-логики чем больше от нее устаешь, тем больше раздражает "оригинальность" и "самодеятельность". Основное требование к бизнес-логике - читабельность и удобство поддержки и модификации. Все остальное - вторично. Ну, без грубых ляпов по производительности, ессно. 1С давно уже пора прикрутить намертво автоматические линтеры и форматтеры, которые насильно засовывают в гайд-стайлы.
105 AlexTim03
 
16.07.20
09:36
Рекомендации языка 1с

Вариант Б
106 AlexTim03
 
16.07.20
09:37
Описано в ИТС
107 hi1C
 
16.07.20
09:38
(76) я тоже так делаю, как тут лайки ставить :)
108 Джинн
 
16.07.20
09:38
Быдлокодеров на кол!

Вариант Б
109 fisher
 
16.07.20
09:41
(107) И как ты оформляешь десять последовательных проверок входных данных? "Лесенкой"?
110 pavig
 
16.07.20
10:02
(0)
Только Б

Вариант Б
111 Sserj
 
16.07.20
10:02
(76) Вообще "количество точек выхода из функции" это все таки рекомендация а не железобетонное правило.
Все зависит от ситуации, если функция огромная и зависит от правильности входных параметров, то лично я предпочту как минимум 2 точки выхода, чем
листать лапшу кода, да еще со скачками по стекам вызова:

Функция а(п1, п2, п3, ... пN)
  результат = Неопределено; // это всегда первый оператор
  Если НЕ КонтрольВходныхПараметров(п1, п2, п3, ... пN) Тогда
    Возврат результат;
  КонецЕсли;
...
...
  Возврат Результат; // это всегда последний оператор и единственный возврат во всей функции
КонецФункции
112 Полован
 
16.07.20
10:06
(111) А не надо делать огромные функции. Проверку входных параметров, если их много или она сложная, так вообще лучше делать до вызова функции. Ну, или в отдельной функции.
113 pavig
 
16.07.20
10:06
(76)
Поддерживаю.

Но для простых функций делаю проще, чтобы кода было меньше:
Если <условие> Тогда
    Возврат 1;
Иначе
    Возврат 2;
КонецЕсли;
114 Sserj
 
16.07.20
10:11
(112) Совсем опыта нет? :)
Это подойдет только в тривиальных функциях из учебников. В реальности функции делаются для частого использования и придется в десятках точек вызова не забывать проверять параметры, ну или вызывать еще одну функцию.
115 Полован
 
16.07.20
10:14
(114) :)) Ну да, конечно.
116 hi1C
 
16.07.20
10:14
(114) в (112) правильно написано, функции и процедуры применяются не только для выделения повторяющегося кода, попробуйте тест написать для своей мегафункции и всё встанет на свои места
117 Sserj
 
16.07.20
10:21
(116) И что должно встать на свои места?
Каждый день каждый использует эти мегафункции, простой пример: ОбработкаПроведения любого документа. Или по твоему это не таже самая простая функция без возврата значения?
118 hi1C
 
16.07.20
10:27
(117) мозги встанут на свои места, если есть

обработка проведения может быть разной, можно всё напихать в неё, что ты, как я предполагаю, и сделал, а можно выделить в функции блоки кода отвечающие за одну задачу и эти вот функции, отдельно, отлично тестируются

хотя зачем я это тебе объясняю, оставайся быдлокодером, так спокойней
119 fisher
 
16.07.20
10:34
(113) Если можно написать без "Иначе" - лучше писать без "Иначе". Читается легче, рефакторить легче, меньше шансов ошибиться.
120 fisher
 
16.07.20
10:39
(116) Не очень понял, каким образом тестирование отменяет проверку входных параметров.
121 Sserj
 
16.07.20
10:42
(118) Тяжело тебе малыш настоящему Дартарьяну, вокруг сплошное быдло :)
122 fisher
 
16.07.20
10:43
Если речь про юнит-тесты, то они в т.ч. как раз и должны проверить, что функция ведет себя устойчиво и ожидаемо при любых краевых условиях.
123 1c_2189
 
16.07.20
10:43
Б и только Б. Бесит когда в одну строчку. Что этим показывают? Свою "крутизну"?  Чушь все это.

Вариант Б
124 Megas
 
16.07.20
10:48
Так отлаживаться проще и глазами видеть.

Если А=Б Тогда Возврат А; иначе Возврат Б; КонецЕсли;   - Пипец неудобно

Вариант Б
125 hi1C
 
16.07.20
10:49
(120) я тоже не понимаю каким образом тестирование отменяет проверку входных параметров :) я про это ничего не писал
126 Ц_У
 
16.07.20
10:50
Отказ = ?(ВсеПлохо,Истина,Ложь)
127 fisher
 
16.07.20
10:51
(125) Тогда я не понял, за что ты топишь. За ранний выход при проверке входных параметров, или за вложенные "Если" чтобы обеспечить единую точку выхода из функции.
128 Полован
 
16.07.20
10:52
(126) Некоторые считают, что использование тернарных операторов такой-же дурной тон, как goto :)
129 hi1C
 
16.07.20
10:54
(127) за уменьшение размеров функций, чтобы функция размещалась на одном экране, тогда будет не важно сколько возвратов в функции
130 Dionis Sergeevich
 
16.07.20
10:55
Ну зачем же так фанатично. Нужна поверка - ну сделай вначале функции и точку выхода. Пусть будет две - в начале и в конце. Зло это в середине несколько выходов
131 fisher
 
16.07.20
10:56
(129) Достойная цель. Но не любой же ценой. Дроблением логики - да. Игрой синтаксисом - ересь.
132 D_E_S_131
 
16.07.20
11:02
Пишу "Если", <space>, <выбор варианта>, <написание условия>.
И всегда получается ...

Вариант Б
133 lucbak
 
16.07.20
11:04
Откуда вообще взялся вариант Б ?!

Вариант А
134 1c_2189
 
16.07.20
11:05
(133) в нормальных вузах так учат)
135 Sserj
 
16.07.20
11:17
(129) хи-хи.
Вот смотри: УТ 11.4 ОбработкаПроведения РеализацииТоваровИУслуг (центровой документ для УТ однако):

ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ);
ЗаказыСервер.ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыОрганизацийКПередаче(ДополнительныеСвойства, Движения, Отказ);
Если ДополнительныеСвойства.Свойство("ЗаписыватьРезервыТоваровОрганизацийВместеСоВсеми")
    И ДополнительныеСвойства.ЗаписыватьРезервыТоваровОрганизацийВместеСоВсеми Тогда
    ЗапасыСервер.ОтразитьРезервыТоваровОрганизаций(ДополнительныеСвойства, Движения, Отказ);
КонецЕсли;
ЗапасыСервер.ОтразитьТоварыПереданныеНаКомиссию(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОформлениюОтчетовПринципалу(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДатыПередачиТоваровНаКомиссию(ДополнительныеСвойства, Отказ);
ЗапасыСервер.ОтразитьТоварыКОформлениюОтчетовКомитента(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьОбеспечениеЗаказовРаботами(ДополнительныеСвойства, Движения, Отказ);
ДоходыИРасходыСервер.ОтразитьСебестоимостьТоваров(ДополнительныеСвойства, Движения, Отказ);
ДоходыИРасходыСервер.ОтразитьВыручкуИСебестоимостьПродаж(ДополнительныеСвойства, Движения, Отказ);
ВзаиморасчетыСервер.ОтразитьРасчетыСКлиентами(ДополнительныеСвойства, Движения, Отказ);
МногооборотнаяТараСервер.ОтразитьПереданнуюВозвратнуюТару(ДополнительныеСвойства, Движения, Отказ);    
СкладыСервер.ОтразитьДвиженияСерийТоваров(ДополнительныеСвойства, Движения, Отказ);
ВзаиморасчетыСервер.ОтразитьСуммыДокументаВВалютеРегл(ДополнительныеСвойства, Движения, Отказ);
ЗатратыСервер.ОтразитьМатериалыИРаботыВПроизводстве(ДополнительныеСвойства, Движения, Отказ);    
УчетНДСУП.СформироватьДвиженияВРегистры(ДополнительныеСвойства, Движения, Отказ);

Напомню, это обработка проведения, выполняется в транзакции. В каждой, В КАЖДОЙ из этих процедур первые 3 строки:

Таблица = ..как то получить таблицу.    
Если Отказ ИЛИ Таблица.Количество() = 0 Тогда
Возврат;
КонецЕсли;

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

И самое интерсное передаваемый в каждую процедуру Отказ вообще нигде не может измениться, он может только сразу в ОбработкуПроведения придти Истина.
А тебе при в случае отладки нужно пройти по шагам каждую эту процедуру чтобы выяснить а может она его поменять или нет.
Так ты и правда уверен что первой строкой в ОбработкаПроведения вот такой вещи это быдлячество:

Если Отказ Тогда
  Возврат;
КонецЕсли;
136 hi1C
 
16.07.20
11:22
(135) подгорает? где я писал что мне не нравится проверка входного параметра?
137 Sserj
 
16.07.20
11:31
(136) Я думаю головой, поэтому меня что-то "раздражает", ну то чем изволишь думать ты, что это что-то "подгорает" пусть у тебя расслабится :)
Так вот меня раздражает когда теоретики увидят учебный тривиальный пример и возводят его в догму. Посмотрят видосики создания функций возведеня в квадрат или даже вдруг станут гуру посмотрев пример рекурсии и начинают бросать постулаты.
Какая функция на один экран, если более-менее не тривиальный запрос только страниц на 5-10 строится.
138 hi1C
 
16.07.20
11:36
(137) раздражает так сходи водички попей, всем как бы пофиг отчего у тебя подгорает

приведенный пример не ок но лучше чем если бы всё это было в одной функции
139 Полован
 
16.07.20
11:59
(137) Запрос сворачивается до одной строки, если что :))
140 Галахад
 
гуру
16.07.20
12:00
Шаблоны же. Поэтому однотипно.

Вариант Б
141 vi0
 
16.07.20
12:39
(139) да и вся функция тоже, при желании
142 Конструктор1С
 
16.07.20
12:51
(74) большой стек вызовов, если декомпозиция методов выполнена правильно, имена методов лаконичные, делает код очень гибким и самодокументирующимся. А большая вложенность условных операторов делает код тяжелым для восприятия и изменения, увеличивает количество трудновыявляемых ошибок. Собственно, один из самых эффективных способов рефакторинга это "извлечение метода" - когда часть метода выделяется в отдельный метод
143 Конструктор1С
 
16.07.20
12:57
(76) такой подход приводит к усложнению логических конструкций внутри функции и опасности возврата неверно инициализированного значения
144 hi1C
 
16.07.20
13:06
(141) точно, а тут "если тогда" предлагают в три строки писать :)
145 vi0
 
16.07.20
13:09
(142) я вот тоже не понимаю недовольства насчет большого стека
если конечно это не параноидально сделано, когда по одной строке в каждой функции
146 Конструктор1С
 
16.07.20
13:12
(93) оператор ?() тоже зло, усложняющее восприятие кода и отладку. Никто его не переделывает в нормальное Если...Тогда, даже автор кода. Он непременно загниёт в уродливую длинную конструкцию с вложенными ?()
147 Конструктор1С
 
16.07.20
13:19
(114) не придётся, если декомпозиция кода выполнена по-человечески
148 Casey1984
 
16.07.20
15:48
(8)

Вариант Б
149 Шоколадная страсть
 
16.07.20
16:29
(103) Тем и горжусь, что код хорошо поддерживается и масштабируется, и все хорошо внедрилось, юзеры довольны.
А то что нет переменных и условий - это всего лишь причина хорошего результата.
150 vi0
 
16.07.20
17:49
(149) не только лишь все
151 AliceLight
 
16.07.20
17:57
(100) полностью поддерживаю и использую вариант Б из тех же соображений.

Люблю, когда в типовом коде несколько условий разнесены на разные строчки, т.е. не
"Если ПеременнаяСТипичноДлиннющимНазванием1 = 0 И ПеременнаяСДлиннющимНазванием1 <> ПеременнаяСДлиннющимНазванием2 Тогда", а
"Если ПеременнаяСТипичноДлиннющимНазванием1 = 0
    И ПеременнаяСДлиннющимНазванием1 <> ПеременнаяСДлиннющимНазванием2 Тогда"

Это удобно в случае, если в условие надо что-то добавить, т.к. не приходится комментировать всю строку и дописывать свое, ведь можно просто между строчками добавить свое условие.

Вариант Б
152 Шоколадная страсть
 
16.07.20
18:19
(151) Это же разные вещи. Вариант А хорош для простых и коротких условий и операций, а вариант Б лучше для длинных.
153 vi0
 
16.07.20
18:28
(151) согласен, логика одна - повысить читабельность не в ущерб ничему
154 Eiffil123
 
16.07.20
18:35
я аж бешусь, кто выбрал вариант А

Вариант Б
155 Eiffil123
 
16.07.20
18:39
(135)
>> Так ты и правда уверен что первой строкой в ОбработкаПроведения вот такой вещи это быдлячество:
>> Если Отказ Тогда
>>   Возврат;
>> КонецЕсли;

А как может первой строкой в обработку проведения прийти сразу отказ?
То, что в перечисленных вызываемых процедурах проверяется на Отказ - это нормально для ускорения. Если где-то в предыдущей процедуре выставили флаг, то можно ускориться и не выполнять код процедур.
156 obs191
 
16.07.20
18:43
(152)+
157 Djelf
 
16.07.20
19:01
(0) А где вариант: Я всегда пишу все процедуры и функции в одну строку?
Это еще компактнее и нагляднее.
158 bolder
 
16.07.20
19:28
(0) Потому что просто вставляется из шаблона.Минимум движений.

Вариант Б
159 novichok79
 
16.07.20
19:32
На разных строках, так больше денег заплатят. А если серьезно, то читается проще и не надо горизонтальный скроллбар надрачивать постоянно. А ещё неприятно, когда переменные типа и, й, к __строка1, ____число10 попадаются. Оторвал бы яи такому гению (у которого в IDE не работает автодополнение), после отладки подобного кода и попыток понять, чем отличается тз1 от тз2.

Вариант Б
160 vde69
 
16.07.20
19:33
(143) такой подход дает 2 сильных преимущества

1. ты всегда в начале функции видишь какое значение по умолчанию возвращает функция
2. ты всегда можешь поставить точку остановки на последний оператор и гарантировано там будет остановка (и ты сможешь посмотреть результат до выхода из функции, в контексте его получения)
161 bolder
 
16.07.20
19:46
(114) +100500.Тоже удивился предложению проверТь параметры функции до ее вызова)))
162 Шоколадная страсть
 
16.07.20
21:09
Забыл проголосовать

Вариант А
163 Шоколадная страсть
 
16.07.20
21:15
Вообще по современным стандартам:

1. Возврат результата из функции должен быть один.
2. Инициализированные переменные и аргументы функции не переинициализировать.
3. Не использовать операторы ветвлений и переходов.
4. И конечно только чистые функции. Никакого морально устаревшего ООП.

Не всегда кажется это осуществимым, но если подумать, то на самом деле осуществить обычно можно.
Я щас не пропускаю пулл реквесты пока не исправят все эти моменты. И ведь исправляют!
164 Shadawn
 
16.07.20
21:30
Функция должна помещаться на экран, иначе думать становится медленнее. Один из вариантов для этого явно более подходящий.

Вариант А
165 v77
 
16.07.20
21:34
Красивее, понятнее и читабельнее

Вариант А
166 vde69
 
16.07.20
21:41
(163) а дай ссылочку на "современные стандарты" где это описано
167 Шоколадная страсть
 
16.07.20
22:15
(166) Держи: (163)
168 Ненавижу 1С
 
гуру
16.07.20
22:22
(163) уже п.1 нет:

public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source)
{
  foreach(var item in source)
  {
    return true;
  }
  return false;
}
169 vde69
 
16.07.20
22:24
(167) пожалуйста аргументируйте, а то похоже на какой-то развод, кто сказал, что ООП морально устарел? Чем чисто функциональный подход дучше процедурного (только про замыкания не втирайте тут).

Давайте конкретику на стандарты или рекомендации серьезных компаний...
170 Шоколадная страсть
 
16.07.20
22:27
(168) foreach - плохой оператор.
Лучше так:

public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source)
{
    return source.some(item => item);
}
171 vde69
 
16.07.20
22:28
(170) так ведь ООП устарел, а ты используешь обьектную модель :)

сам себе противоречишь
172 Шоколадная страсть
 
16.07.20
22:29
(169) Если тебе ссылка на мисту не является авторитетной, то вот тебе ссылка на другой сайт в интернете:
https://medium.com/devschacht/glossary-of-modern-javascript-concepts-1198b24e8f56
173 Шоколадная страсть
 
16.07.20
22:30
(171) Объект при этом не изменяется. ООП наоборот, подразумевает изменение состояния объекта при выполнении над ним операций.
174 vde69
 
16.07.20
22:31
(172) JavaScript - это не язык а фуфел.... даже более ублюдочный чем 1с...
175 Шоколадная страсть
 
16.07.20
22:31
(169) Функциональный лучше тем, что замыкания.
176 Шоколадная страсть
 
16.07.20
22:31
(174) Ахахах! Шутник блин
177 vde69
 
16.07.20
22:32
(173) ООП - это 3 правила, и изменение объекта тут вообще ни причем...
178 Ненавижу 1С
 
гуру
16.07.20
22:32
(170) ну ты одно заменил другим, тогда расписывай реализацию some
179 Ненавижу 1С
 
гуру
16.07.20
22:34
Функциональный стиль прекрасен на определенном уровне абстрагирования, но когда приходится спуститься вниз к реальности, то как бы нет...
180 Шоколадная страсть
 
16.07.20
22:34
(178) Пример неудачный, так как "some" для того и добавлен в язык, чтобы получалось по красоте.
Придумай другую задачу
181 vde69
 
16.07.20
22:37
(176) почему шутник?

ублюдочные языки - это языки которым для работы нужна своя среда исполнения, например: VB, JS, 1c, и еще куча других скриптовых языков.
182 Шоколадная страсть
 
16.07.20
22:37
(177) Ладно, про ООП я не правильно написал. Использовать ООП можно, главное не создавать мутабельные объекты как это было принято раньше.
183 Ёпрст
 
16.07.20
22:38
(160) и обрастаешь немерянными вложенными условиями и брейкпоинтами, и чтоб потом найти потом, почему результат функции такой, придётся один хрен бегать по всем веткам условий.
На а про проверку параметро на вхлде функции так вообще молчу.
И досрочный выход из функции, гарантирует нужный результат сразу, подход с результатом в конце..сомнительное удовольствие с непредсказуемым результатом.
Ну разве что для маленьких функций в пару строк.
184 Шоколадная страсть
 
16.07.20
22:38
(181) В этом нет ничего ублюдочного. Если их можно исполнять в среде, значит и компилятор может существовать под этот язык. Просто не нужно
185 Ёпрст
 
16.07.20
22:39
+183 и к 1с-ине..это ну никак не применимо, достаточно посмотреть кд любой типовой или отраслевой, возвраты понапиханы везде...
186 Ненавижу 1С
 
гуру
16.07.20
22:40
(180) ну вот начинается...

на самом деле под капотом эти самые циклы и лежат - иначе вы забьете стек рекурсивными вызовами раскручивая коллекции
и изменяемые переменные - иначе вам никакой памяти не хватит
и операторы ветвления все там же

а так да, на определенном уровне абстракции мы красиво пишем:

var res = MyCollection.Where(x => x!=0).Select(x => 1.0/x).Sum();
187 Шоколадная страсть
 
16.07.20
22:40
(160) >> (и ты сможешь посмотреть результат до выхода из функции, в контексте его получения)

Только вот контекст будет уже изменен, так как переменную мог перезаписать несколько раз.
188 Шоколадная страсть
 
16.07.20
22:42
(183) Если получилось много вложений, значит ты неправильно пишешь код. Нужно чтобы было красиво, и один возврат результата в конце
189 vde69
 
16.07.20
22:42
(182) мутабельность - это свойсто контекста в привязке к объекту. Ну а Контекст - это свойство среды исполнения... в том-же JS он определен клиентской 32 разрядной частью (очень криво реализованной в плане типов ineger и аналогов а так-же "песочницы"), собственно именно из-за "песочницы"  в JS и есть эта "мутабельность"
190 Ёпрст
 
16.07.20
22:43
(188) Сообщите своё мнение на СелезнЁвку, мот прислушаются , а ?
191 Шоколадная страсть
 
16.07.20
22:43
(186) Вот и пусть они лежат под капотом. Нам главное чтобы на капоте была бизнес логика без всяких циклов.
192 Шоколадная страсть
 
16.07.20
22:46
(189) Ну а Москва - столица России. Что ты пытаешься доказать? Что мутабельность - это хорошо?
193 Ненавижу 1С
 
гуру
16.07.20
22:53
(191) думаю тут главное в обслуживании кода: читабельности, отладке, изменяемости и т.д.
если все это дается легко и хорошо в таком подходе, то это прекрасно
но видимо пока не все так радужно или мы не можем красиво это реализовывать
194 vde69
 
16.07.20
22:53
(192) мутабельность - это данность на которую нельзя повлиять программно, то есть от кода ты ничего не меняешь....

мутабельность это не ошибка а правило и если ты ему не следуешь получаешь ошибку...


почитал твою ссылку про "чистые функции" - еле вылез из под стола.... для остальных выкладываю
------------------------------------------------------------------

1. Чистые функции должны принимать аргументы.
2. Одни и те же входные данные (аргументы) всегда произведут одинаковые выходные данные (вернут одинаковый результат).
3. Чистые функции основываются только на внутреннем состоянии и не изменяют внешнее (примечание: console.log изменяет глобальное состояние).
4. Чистые функции не производят побочных эффектов.
5. Чистые функции не могут вызывать нечистые функции.


------------------------------------------------------------------

то есть в этой концепции нельзя получать данные извне (например из SQL или COM или драйвера клавиатуры).
195 Ненавижу 1С
 
гуру
16.07.20
22:58
(194) ну опять же есть разные определения "чистоты", кому-то достаточно ничего не изменять
то есть, например, функция выполняет запрос в БД и возвращает результат - такая функция может получать при одинаковых параметрах разные результаты (ну или иначе считать саму базу данных ее параметром :-)))
но она ничего не меняет в базе данных. В определенном смысле она "чистая"
196 Шоколадная страсть
 
16.07.20
23:09
(193) На 1С может и не можем. Но на том же JS вполне можно, там все есть.
197 Шоколадная страсть
 
16.07.20
23:11
(194) Ты про иммутабельность или про чистые функции? Определись сначала что мы обсуждаем в данный момент.
198 Шоколадная страсть
 
16.07.20
23:12
Конечно в чистых функциях нельзя получать данные извне. На то они и чистые.
199 Злопчинский
 
17.07.20
03:05
"извне" - это где?
параметры входные - это же извне?
200 Шоколадная страсть
 
17.07.20
05:20
(199) Кроме входных параметров.
201 Провинциальный 1сник
 
17.07.20
05:57
(67) "не равно на 3 цикла дольше сравнения"
Непонял. И равенство и неравенство - это результат выполнения инструкции вычитания (в варианте cmp, без сохранения результата) и последующего условного перехода по флагу: нулевой или не нулевой результат (jz, jnz). Инструкции jz и jnz эквивалентны в плане быстродействия.
202 Пробел
 
17.07.20
06:00
единообразие в приоритете

Вариант Б
203 rphosts
 
17.07.20
06:28
1.Вариант Б!
Ибо другие варианты  ересь! И за другие варианты гнать ссаными тряпками и сраной метлой в ассенизаторы из профессии.

Вариант Б
204 vi0
 
17.07.20
07:04
(194) Шоколад не виноват. Пацан к успеху шёл, не получилось, не фартануло
205 Провинциальный 1сник
 
17.07.20
07:45
(195) В идеале, никакая функция не должна ничего в базе изменять. Технически для этого перед выполнением должен создаваться снапшот базы и состояния сервера, доступный лишь для этой функции. А все изменения должны производиться лишь процедурами.
206 Полован
 
17.07.20
07:48
(205) А чем процедура отличается от функции, по-вашему?
207 Провинциальный 1сник
 
17.07.20
07:55
(206) Идеологически или технически? Идеологически очень многим. Функция - это значение. Процедура - это действие. Технически - зависит от языка и среды, в Си например всё функции, но Си это "переносимый ассемблер".
208 Ненавижу 1С
 
гуру
17.07.20
08:18
209 tciban
 
17.07.20
08:44
Нужно делать структурируемый, удобно читаемый код

Вариант Б
210 trad
 
17.07.20
09:52
(207) не возражения ради. Просто уточнить.

Если Процедура - как действие, должна вернуть результат действия, она может же быть функцией?
211 olegves
 
17.07.20
10:00
так нагляднее

Вариант Б
212 Eiffil123
 
17.07.20
10:11
(163) >> 1. Возврат результата из функции должен быть один.

Этот стандарт нигде не соблюдается. Взять хотя бы код на java - там сплошь и рядом несколько возвратов из метода.
213 Eiffil123
 
17.07.20
10:13
(174) ну так не используйте. отключите в своих браузерах запуск JavaScript в знак протеста против языка.
214 ДенисЧ
 
17.07.20
10:19
(212) Тут мои соседи сплошняком паркуются на газоне. Но это же не повод?
Запустил вчера проверку конфигурации (от 1с) на уг11.4 - 77 тысяч сообщений...
И что теперь - писать неправильно?
215 Провинциальный 1сник
 
17.07.20
10:20
(210) Пусть возвращает, через изменения параметров
216 ДенисЧ
 
17.07.20
10:20
217 ДенисЧ
 
17.07.20
10:22
Уг 11.4.8.92, если что
218 trad
 
17.07.20
10:31
(216) что за инструмент такой?
извините, я просто вчера с дерева слез )
219 trad
 
17.07.20
10:32
(215) это же чертовски неудобно (
220 orefkov
 
17.07.20
11:13
(219)
У людей каша в голове, говорят о процедурах-функциях, а на самом деле пытаются о "функциях с побочными эффектами" и "функциях без побочных эффектах". Почему они считают, что в этой парадигме функция с побочными эффектами должна называться "Процедура" и не должна иметь возвращаемого значения - хрен их поймешь.
221 vi0
 
17.07.20
11:24
(207) "Функция - это значение" в математике?
Или откуда такие ограничения?
222 fisher
 
17.07.20
11:29
(220) Вероятно, травматические последствия знакомства с функциональными языками.
223 Ненавижу 1С
 
гуру
17.07.20
11:29
(220) потому что есть такая парадигма (208)
224 fisher
 
17.07.20
11:36
Функции без побочных эффектов - это очень гуд и всячески приветствуются. Но очень далеки от догмы.
225 fisher
 
17.07.20
11:41
Я скорее за то, чтобы запретить процедурам возвращать значения, чем за то, чтобы запретить функциям менять состояние.
226 Полован
 
17.07.20
11:44
(218) АПК, вроде бы :)
227 acht
 
17.07.20
12:05
(220) Потому что там каша парадгим, смесь функциональщины, императивности и ООП, приправленные желанием иметь свое неоспоримое мнение. Представь, что будет, когда они услышат про методы объекта, которые возвращают, например, код результата, и при этом изменяют состояние объекта? =)
228 Провинциальный 1сник
 
17.07.20
12:49
(221) Математическое определение функции знаешь? А процедура - это просто именованная последовательность действий. Давайте не будем только упоминать язык Си и производные.
229 Провинциальный 1сник
 
17.07.20
12:51
(225) А меня реально бесят функции с императивным именованием типа ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент). К сожалению, такое даже в типовых постоянно встречается. Хотя в стандартах разработки от 1с это не приветствуется.
230 Ненавижу 1С
 
гуру
17.07.20
13:10
(229) в типовых таких дофига
231 vde69
 
17.07.20
13:58
По моему вполне нормальные названия:

ПолучитьСуммуЗадолженностиКлиента(Клиент)
РасчитатьСуммуЗадолженностиКлиента(Клиент)

а вот так уже не очень выглядит
СуммаЗадолженностиКлиента()
РасчитатьСуммуЗадолженностиКлиента(Клиент)


Названия должны учитывать общую стилизацию а не только отражать прямой смысл.
232 Вафель
 
17.07.20
14:00
(231) 1с уже не согласна с тобой
233 Провинциальный 1сник
 
17.07.20
14:18
(231) Вы не так понимаете. Я о том, когда пишут Задолженность=ПолучитьСуммуЗадолженностиКлиента(Клиент) - то есть именование функции, возвращающей значение, как действия. Если же пишут ПолучитьСуммуЗадолженностиКлиента(Клиент), имея в виду процедуру, которая куда-то там получает сумму задолженности - это нормально.
234 fisher
 
17.07.20
15:03
(229) Императивному коду - императивные наименования. Аналог Get. Как раз в качестве признака того, что это именно функция и скорее всего без побочных эффектов (ну, по основному ее назначению, по крайней мере). Если существительным, то в выражениях даже не сразу и поймешь, что это название метода а не переменной.
235 acht
 
17.07.20
15:05
(231) > учитывать общую стилизацию

РассчитатьСуммуЗадолжности(Клиент, СуммаЗадолжности);
СуммаЗадолжности = СуммаЗадолженностиКлиента(Клиент);

Вот тебе и стилизация
236 vi0
 
17.07.20
15:16
(228) Так ты не ответил на мои вопросы
237 vi0
 
17.07.20
15:17
(229) а get.. set.. тебя тоже бесят?
238 vi0
 
17.07.20
15:32
(229) такие именования комфортно читаются, что немаловажно
например в тему из xUnitFor1C конструкция:
Ожидаем.Что("Некая строка").ИмеетДлину(12);
239 fisher
 
17.07.20
15:32
В функциональных языках, где функция является основной управляющей структурой и все функции при этом чистые - там да. Там обзывать функции как действия никакого смысла нет в принципе.
240 Злопчинский
 
17.07.20
16:06
(229) "ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент)."
это вообще бяка.
д.б. типа

КлиентСуммаЗадолженности(Клиент).
.
тупо хотя бы для того, чтобы все функции, имеющие отношение к клиенту, лежали "рядом" при выборке названий функций.
потому что для нас важна не сумма задолженности вообще (чья?). а конкретная к конкретному объекту. рускавай езык велик и могуч, но лучше если придерживаться "подлежащее-сказуемоле)
241 novichok79
 
17.07.20
16:44
(240) если это 8.3 там есть области для этого. в 7.7 наверное приходится извращаться.
242 Конструктор1С
 
17.07.20
16:56
(160) значение по-умолчанию можно присвоить и без операторов возврата. А одна точка останова ну такое себе преимущество, ведь большинство ошибок скрываются за логическими ветвлениями, и их нужно проверять в первую очередь, а не конечное значение
243 Шоколадная страсть
 
17.07.20
17:17
(229) >> А меня реально бесят функции с императивным именованием типа ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент).

Я пока в этом сомневаюсь. И тот вариант кажется верным, и другой, в разных ситуациях. Например, если у тебя переменная называется СуммаЗадолженностиКлиента, то по логике функция должна называться ПолучитьСуммуЗадолженностиКлиента. Вот так:

Перем СуммаЗадолженностиКлиента = ПолучитьСуммуЗадолженностиКлиента(Клиент);

Выглядит логично.

С другой стороны, функция с таким именем была бы удобна если забыть про промежуточную переменную:

Возврат СуммаЗадолженностиКлиента(Клиент);

Какой вариант не правильный, и почему?
244 Смотрящий
 
17.07.20
17:20
(240) По идее вообще должно быть КлиентЗадолженностьСуммаПолучить(Клиент)
245 vi0
 
17.07.20
17:20
(240) чтобы они лежали рядом должно быть Клиент.СуммаЗадолженности()
246 Шоколадная страсть
 
17.07.20
17:29
Друзья, с функциями все понятно, чистые это бесспорно хорошо.
А как вы относитесь к условиям внутри чистых функций? А так же к переменным внутри чистых функций? Лично я от них полностью отказался, и увидел что это хорошо.
В процедурах на этот принцип пофиг, их ничто не испортит, ибо они и так грязные. А функции стараюсь делать идеальными.
247 Шоколадная страсть
 
17.07.20
19:26
Чотко
248 Злопчинский
 
17.07.20
19:46
(244)(245) угу, а не тот трэш что есть...
249 vi0
 
18.07.20
08:16
(246) мы во всем блюдём меру. в секту функциональщиков пока не планируем
250 Ненавижу 1С
 
гуру
18.07.20
11:34
(246) требуется написать функцию "модуль числа". Как раз ее нет во встроенных функциях. Напиши чтобы она была чистой и без условий
251 Voronve
 
18.07.20
14:35
(250) Мнэээ Макс(а,-а) не ?
252 Ненавижу 1С
 
гуру
18.07.20
15:20
(251) хорошо. Напиши тогда Максфй
253 Злопчинский
 
18.07.20
15:22
(250) Модуль = Число(СтрЗаменить(Строка(Число),"-",""));
- не прокатит?
254 vi0
 
18.07.20
15:53
(253) часто так балуешься на проде?)
255 1ctube
 
18.07.20
16:29
Вариант Б конечно же. Так удобно, и тому кто пишет и тому кто читает

Вариант Б
256 Злопчинский
 
18.07.20
16:38
(254) ну, модуль за кучу лет я давно не помню чтобы использовал ;-)
и чем тебе в принципе код не нравится? ;-) юзай (251) тогда
257 acht
 
18.07.20
16:49
(250) Ох уж мне эти одинэсники...

Функция МодульЧисла(Число)

    Результат = Sqrt(Число * Число);
    Возврат Результат;
    
КонецФункции

Устроит
258 acht
 
18.07.20
16:50
? =)
259 acht
 
18.07.20
17:05
(250) На тебе еще вариант, без возможной потери точности.

Функция МодульЧисла(Число)
    
    Тест = Новый Соответствие;
    Тест.Вставить(Число, Истина);
    Тест.Вставить(-Число, Ложь);
    Тест.Вставить(Истина, -Число);
    Тест.Вставить(Ложь, Число);
    
    Результат = Тест[Тест[Число]];
    Возврат Результат;
    
КонецФункции
260 Смотрящий
 
18.07.20
17:09
извращенцы
261 vi0
 
18.07.20
17:10
(257) грубо, есть недостатки
262 vi0
 
18.07.20
17:17
(259) тестировал хоть? Ох уж мне эти одинэсники...
263 Злопчинский
 
18.07.20
18:01
(260) ну ты понял, кто пишет типовые на снеговике...
264 acht
 
18.07.20
18:35
(262) Да, чой-то я с переходом от hashmap загнался и накосячил. Ну, кто ж виноват, что у 1С структуры данных такие корявые? =)
265 acht
 
18.07.20
18:36
(263) ... написал автор рещения (253)
266 vi0
 
18.07.20
18:53
(264) вообще соответствие это индекс, а индекс это поиск, а поиск это условие
267 vi0
 
18.07.20
18:54
(264) ты накосячил, а виновата 1с
268 acht
 
18.07.20
19:00
(266) А крутится все на процессоре, а там jnz разные, поэтому...
269 vi0
 
18.07.20
19:09
(268) тут то абстракция самая верхняя, сама 1с
270 acht
 
18.07.20
19:14
(269) Ой, извини, пожалуйста, сейчас исправлюсь!

...а крутится все на байт-машине 1С, а там проверки разные, поэтому...
271 dot05
 
18.07.20
20:48
Я смотрю некоторые не только Макконнелла не читали, но и стандарты разработки 1с тоже

Вариант Б
272 Злопчинский
 
18.07.20
22:58
(271) если все читать - времени на продакшен не останется...
273 Шоколадная страсть
 
19.07.20
05:50
(250) Ну модуль числа и так никто не делает через условия. Есть много способов написать в функциональном стиле, тебе уже ответили. Можно даже чисто математически решить.
Придумай другую задачу
274 vi0
 
19.07.20
10:05
(273) твоя ошибка в том, что вместо того чтобы предложить решение какой то насущной проблемы разработки, ты пытаешься протолкнуть просто решение
275 acht
 
19.07.20
16:12
О, вот отличная иллюстрация использования паттерна "А" из опроса. А так же паттерна отрицания условия при сравнении.
Проверка заполнения реквизитов

Чувствуете запах?
276 vi0
 
19.07.20
19:28
(275) запах свежей полиграфии?
277 Злопчинский
 
19.07.20
20:13
(275) а что не так? просто интересно.
чисто по логике - вроде норм, возвращает Ложь/Истина
278 Cyberhawk
 
19.07.20
21:52
.

Вариант Б
280 Злопчинский
 
20.07.20
12:20
(279) трэш какой-то
281 fisher
 
20.07.20
12:41
(277) Если не обращать внимание на вероятные ошибки, то как минимум было бы лучше так, ИМХО:

Процедура СообщитьОбОшибке(ТекстОшибки, ПроверяемоеПоле = Неопределено)

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстОшибки;
    Если ПроверяемоеПоле <> Неопределено Тогда
        Сообщение.Поле = ПроверяемоеПоле;
    КонецЕсли;
    Сообщение.Сообщить();
    
КонецФункции

Функция ПроверкаЗаполнения ()
    
    ПроверкаПройденаУспешно = Истина;

    // проверка суммы
    Если Сумма <= 99999 Тогда
        ПроверкаПройденаУспешно = Ложь;
        СообщитьОбОшибке("Неправильно заполнено", Сумма);
    КонецЕсли;
    
    // проверка периода
    Если ЗначениеЗаполнено(Период) Тогда
        ПроверкаПройденаУспешно = Ложь;
        СообщитьОбОшибке("Неправильно заполнено", Период);
    КонецЕсли;
    
    Возврат ПроверкаПройденаУспешно;
    
КонецФункции
282 fisher
 
20.07.20
12:45
Блин. У него вероятно еще и проверка инверсная. Вероятно, правильнее так:
Функция ПроверкаЗаполненияПройдена()
    
    ПроверкаПройденаУспешно = Истина;

    // проверка суммы
    Если Сумма > 99999 Тогда
        ПроверкаПройденаУспешно = Ложь;
        СообщитьОбОшибке("Неправильно заполнено", Сумма);
    КонецЕсли;
    
    // проверка периода
    Если НЕ ЗначениеЗаполнено(Период) Тогда
        ПроверкаПройденаУспешно = Ложь;
        СообщитьОбОшибке("Неправильно заполнено", Период);
    КонецЕсли;
    
    Возврат ПроверкаПройденаУспешно;
    
КонецФункции
283 Конструктор1С
 
20.07.20
12:59
(279) это уже усложнение кода получается. Отказ от условных операторов не должен быть самоцелью

(281) есть же библиотечные функции. Например, ОбщегоНазначенияКлиентСервер.СообщитьПользователю();
284 hi1C
 
20.07.20
13:07
(275) И где там паттерн А?
285 fisher
 
20.07.20
13:46
(283) Решил что так нагляднее плюс не факт, что у автора кода БСП стоит.
286 trad
 
20.07.20
14:51
(284) Иначе Возврат Истина;
287 TStan
 
20.07.20
14:53
Только Б. А в этом частном случае, думаю, лучше через тернарный ?(,,)

Вариант Б
288 hi1C
 
20.07.20
16:00
(286) и, конечно, использование этого паттерна сломало функцию?
289 trad
 
20.07.20
16:59
(288) нет, не сломало
290 acht
 
20.07.20
17:57
(288) Сделало невозможным отладку. Внутрь этой ветки нельзя поставить брекпоийт.
291 acht
 
20.07.20
18:04
(282) > У него вероятно еще и проверка инверсная

Вооот. Понимание кода с первой попытки не проходит, приходится мучительно и неоднократно перечитывать. Паттерн отрицания условия во всей красе.
292 patria0muerte
 
20.07.20
18:07
Естественно

Вариант Б
293 acht
 
20.07.20
18:12
(291)+
Это на самом деле из той же серии, что и использование отрицания в идентификаторах.

Если Не ТоварНеПродан(Номенклатура) Тогда
    // Успешного чтения
294 Djelf
 
20.07.20
18:33
В 99.99% случаях вариант Б.
Без однострочных конструкций код понимается значительно быстрее.
Код после обускаторов тоже читается, но зачем делать обфускакию с своем коде?

Вариант Б
295 H A D G E H O G s
 
20.07.20
18:35
Кто пользует вариант А - кхаб.
Пользователям ?() уже разогрели отдельный котел...

Вариант Б
296 acht
 
20.07.20
18:37
(295) > котел
В аду для интровертов нет отдельного котла (:
297 H A D G E H O G s
 
20.07.20
18:39
(296) это для хакатона..
298 Злопчинский
 
20.07.20
18:54
(293) в клюшках есть типовой обфускаторный хрень... я специально пишу в каких-нить хитрых разработках нетповых неочевидных чтоб враги после меня мозг сломали

Если ПустаяСтрока(ЧтотоСтрока)<>0 Тогда
  //тырыпыры
299 vi0
 
20.07.20
19:35
(293) Если Не ТоварНеПродан(Номенклатура)<>Неопределено Тогда
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан