Имя: Пароль:
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) Если Не ТоварНеПродан(Номенклатура)<>Неопределено Тогда