Вход | Регистрация
    1  2  3   
Информационные технологии :: Математика и алгоритмы

Блочный оператор в одну строку

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. Вариант Б
   oslokot
 
25 - 15.07.20 - 17:37
(0) ; здесь лишняя
    Если А=Б Тогда
        Возврат
    КонецЕсли;        



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

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

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

2. Вариант Б
   Злопчинский
 
46 - 15.07.20 - 17:54
(41) когда добавится - тогда и заблочим как положено для сложного кода.
вот блин камазы никто не покупает. все в одну строку ездят на леговушках.
   fisher
 
47 - 15.07.20 - 17:56
(46) Я тоже предпочитаю писать максимально единообразно и удобно для последующих исправлений и доработок.
Но на самом деле это все чепуха и дело вкуса. Никакой особой проблемы в стилевых отличиях я не вижу. Главное - чтобы выбранный стиль выдерживался.
   acht
 
48 - 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) Камазы возят воду для роболарьков внутри мкад
   vi0
 
52 - 15.07.20 - 18:09
(0) естественное читабельное написание
кто пишет в одну строку - неясно, что хотят выгодать в обмен на худшую читабельность

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

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

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

Возврат;

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

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

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

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

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

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

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

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

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

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

Возврат;

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

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

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

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


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

    Возврат;

КонецЕсли;

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

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

Функция вася (Параметры)
   результат = Неопределено;// это всегда первый оператор

   Если НЕ Параметры.Устраивают Тогда
       Результат = Неопределено;
   КонецЕсли;
   Если Пармаетры.НеВерные Тогда
       Результат = Неопределено;
   КонецЕсли;

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


Заместо

 Если НЕ Параметры.Устраивают Тогда
       Возврат Неопределено;
   КонецЕсли;

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

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

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

    Возврат Результат;
[1c]
   vi0
 
94 - 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
Да, и условия стараюсь тоже не использовать. Ветвления в программе усложняют чтение и отладку.
   vi0
 
98 - 16.07.20 - 06:37
ну да, а упоротые языки без переменных улучшают чтение)
   vi0
 
99 - 16.07.20 - 06:39
(95) лучшее - враг хорошего
от лучших решений потом коллеги плеваться будут
   ADirks
 
100 - 16.07.20 - 07:11
вариант Б
патмушта:
1. для единообразия - чтоб моск при чтении не напрягался
2. для отладки
3. для будущих поколений себя любимого - а ну как потом придётся туда дописать что-то

2. Вариант Б
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.