|
Блочный оператор в одну строку | ☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
trad
15.07.20
✎
12:21
|
Как вы пишете блочные операторы Если, Пока, Для, Попытка и т.п. если в теле всего один исполняемый оператора?
Вариант А: Если А=Б Тогда Возврат; КонецЕсли; Вариант Б: Если А=Б Тогда Возврат; КонецЕсли; |
|||||||
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) Если Не ТоварНеПродан(Номенклатура)<>Неопределено Тогда
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |