Вход | Регистрация

  1  2
1С:Предприятие ::

Метки: 

Понятно ли тебе как упрощаются логические выражения "Ложь Или А" и "Истина И Б"?

Я
   TormozIT
 
05.11.17 - 09:09
1. Сразу понятно64% (36)
3. Не понятно20% (11)
2. Понятно, но думал более 10 сек16% (9)
Всего мнений: 56

Прошу не писать упрощенные варианты выражений, а выбрать вариант ответа из опроса. Это важно для меня, чтобы лучше оценить усложнение чтения логических выражений от применения в них таких фрагментов.
 
 
   Мыш
 
101 - 08.11.17 - 10:06
(95), (100) Это частный случай.
   Веселый собака
 
102 - 08.11.17 - 10:08
А почему, собственно, такой вопрос у ТС?
Начинающий?

1. Сразу понятно
   TormozIT
 
103 - 08.11.17 - 10:23
(102) Предыстория в (10)
   Radkt
 
104 - 08.11.17 - 10:35
понятно, сек 10 думал

1. Сразу понятно
   dezss
 
105 - 08.11.17 - 10:38
А что тут непонятного?

1. Сразу понятно
   Renium
 
106 - 08.11.17 - 10:45
1. Сразу понятно
   mr_K
 
107 - 08.11.17 - 10:45
Я дольше думал над вопросом: а над чем вообще тут думать)
Сам терпеть не могу такое. Идеально все приводить к "А и Б и...и N"
   singlych
 
108 - 08.11.17 - 10:48
Ну, не то чтобы сразу. Какое-то время я бы думал, зачем это и как это переделать.

1. Сразу понятно
   dezss
 
109 - 08.11.17 - 10:59
(105) слегка почитал комменты.
Согласен с теми, кто говорит про бредовость добавления Истина, Ложь в логические выражения.
В 1С можно писать по русски, поэтому надо правильно называть переменный и текст читается как просто предложение, понятное для восприятия....просто надо писать по-русски. А зачем скобки перед (А И Б) я так и не понял.
   Numerus Mikhail
 
110 - 08.11.17 - 11:11
Думал минуты 2, искал в чем подвох.
Не нашел подвох.

2. Понятно, но думал более 10 сек
 
 Рекламное место пустует
   Numerus Mikhail
 
111 - 08.11.17 - 11:14
Прочитал статью и комментарии, но так и не понял, зачем добавлять константы, которые никак не влияют на результат.
   Smile 8D
 
112 - 08.11.17 - 11:18
(111) в (44) расписали плюсы. Вот примеры:
Если Ложь//Вот здесь можно указывать комментарий для всего блока

    //Или НомерИзменяемойКолонки = "4" - можно вот так комментировать даже первое условие при отладке, не дописывая для этого лишнего

    Или НомерИзменяемойКолонки = "5"
    Или НомерИзменяемойКолонки = "7"
    Или (Истина
        И НомерИзменяемойКолонки = "8"
        И ГруппаРасчета = мИдГруппы7)

В (99) я уже расписал, что крайне редко встречаюсь с необходимостью в этих плюсах, поэтому не использую такой подход.
   mikeA
 
113 - 08.11.17 - 11:25
(91) Я бы формулировал вопрос таким образом, чтобы понять, приемлемо ли вообще использование такой конструкции. Подозреваю что это и является конечной целью опроса)
Человек может понимать такое и сразу, но при этом каждый раз "плеваться". Кроме того сложности с пониманием могут быть связаны не с интерпретацией правил логики, а с поиском скрытого смысла в подобной конструкции.

(102) Спасибо, поржал)))
   Numerus Mikhail
 
114 - 08.11.17 - 11:26
(112) Спасибо, пропустил этот пост
Сомнительные плюсы, если честно. Ни разу не сталкивался с таким и не планирую использовать это.
   dezss
 
115 - 08.11.17 - 11:27
(112) а нафига обрамлять скобками блок, в котором присутствует только И?
   Smile 8D
 
116 - 08.11.17 - 11:29
(115) Для наглядности и простоты восприятия, скорее всего. Это пример автора, я добавил комментарии, чтобы показать нагляно описанной в (44).
   dezss
 
117 - 08.11.17 - 11:30
(116) странная наглядность.
ИМХО, когда увеличивают количество скобок, все только сильней запутывается.
   Numerus Mikhail
 
118 - 08.11.17 - 11:33
(117) Нет, в примере из (112) вполне наглядно взят в скобки отдельный блок. Для читаемости это наоборот удобнее
   TormozIT
 
119 - 08.11.17 - 11:35
(116) Да, для этого и еще для единообразия. Не все знают приоритеты логических операций. Также бывает, что нужно заменить И на ИЛИ НЕ.
   dezss
 
120 - 08.11.17 - 11:39
(118) любое сочетание И будет отдельным блоком и так.
А в результате могут появится монструозные конструкции с пятью закрывающими скобками в конце.
(119) Для единообразия так же их можно и не использовать...будет вполне себе единообразно. А тот, кто не знает приоритетов лог. операций, может посмотреть об этом в инете. Вот когда надо будет заменить, тогда скобки и поставить можно)
   DeeK
 
121 - 08.11.17 - 11:42
все понятно, но наркоманство какое-то

1. Сразу понятно
   тарам пам пам
 
122 - 08.11.17 - 11:43
Выражение понятно через пару секунд; если привыкнуть - будет понятно мгновенно.

Однако считаю такое оформление кода некорректным - потому что есть code-style от 1с, по которому оформлены все типовые конфигурации. А так как работа идет в 90% случаев с типовыми, то именно стандартный стиль кода воспринимается быстрее всего, и код "нетипового" разработчика также будет воспринят быстрее, если он будет написан в соответствии со стандартами от 1с.

1. Сразу понятно
   TormozIT
 
123 - 08.11.17 - 11:51
Примечательно, что методика (10) родилась в моей голове именно потому, что я запарился разбираться в сложных условиях не только своего но и чужого кода, в т.ч. "типового". Мне нужен был стиль записи логических выражений любой сложности, который позволит мне сразу (пусть и после некоторого привыкания) видеть всю структуру выражения "как на ладони", легко отлаживать, оптимизировать, менять порядок частей и комментировать их.
   dezss
 
124 - 08.11.17 - 11:59
(123) ИМХО, в таком случае должно быть достаточно правильных отступов, не более того
   Трипиэль
 
125 - 08.11.17 - 12:10
(84) да, понимаю. думал меньше 10 секунд. мусором это считаю потому, никакой смысловой нагрузки данный кусок не несёт. весь код должен быть функциональным, это же не сочинение на свободную тему. считаю, что программист, читая код не должен думать, что вот это полезный код, а вот это воткнули для оформления, потому что кто-то не в силах без таких конструкций понять условие. короче, раздувательство кода.
   DexterMorgan
 
126 - 08.11.17 - 12:41
Епт, только в (112) дошло зачем это нужно =)
Я теперь тоже буду так делать!
   DexterMorgan
 
127 - 08.11.17 - 12:42
(123) Да ты вообще красавчик
   DexterMorgan
 
128 - 08.11.17 - 12:52
(125) Ты не прав, код должен быть читаемым. по твоему нефиг оформлять отдельную функцию, если она используется однажды?
   Трипиэль
 
129 - 08.11.17 - 13:29
(128) я написал своё мнение, в котором ни одним словом не сказал, что код не должен быть читаемым. я знаю и использую другие способы это сделать, нежели лепить Истину и Ложь в условные операторы, до меня уже всё написали. и с тобой согласен: код должен быть читаемым, поэтому вместо того, чтобы добавлять ничего не значащие конструкции, лучше сделать отдельную функцию, которая будет использоваться однажды.
вообще, сложные нечитаемые условия, по моему скромному мнению, часто являются признаком плохой архитектуры или плохого кода. у меня в работе они встречаются настолько редко, что я даже не задумывался о том, до чего дошёл автор. лечить надо не симптомы, а причины.
   senior
 
130 - 08.11.17 - 13:43
_

1. Сразу понятно
   Basilio
 
131 - 08.11.17 - 13:45
(0) Понятно, но нахрен не нужно. ИМХО.

1. Сразу понятно
   DexterMorgan
 
132 - 08.11.17 - 14:04
(129) Смотря как на это посмотреть, действительно есть аналогия с отбором компоновщика: Ложь - "Группа ИЛИ", Истина - "Группа И", ну лично мне подход понравился
   glebgleb
 
133 - 08.11.17 - 14:16
Понятно

1. Сразу понятно
 
 
   uno-group
 
134 - 08.11.17 - 14:36
Имхо ложь вообще не читаемо. как по мне Гораздо читаемей в иначе действия запихнуть.
И вопрос не понятности кода, а скорости его чтения и уменьшения возможной ошибки при быстром просмотре кода.

3. Не понятно
   TormozIT
 
135 - 09.11.17 - 15:06
(134) Как "Иначе" может заменить "Ложь Или А"? Или что ты имел ввиду?
   lubitelxml
 
136 - 09.11.17 - 15:27
Не мне не нужно, особо не сталкивался с такими выражениями в типовых

1. Сразу понятно
   mistеr
 
137 - 09.11.17 - 16:15
(10) Любые дополнительные члены в выражении требуют дополнительных мысленных усилий. Это не только усложняет понимание (пцсть ненамного), но и замедляет чтение кода и отвлекает от основной мысли, что более важно.

Поэтому, хоть система и-или дереви и неплоха, но я против ее широкого применения в таком виде. Я бы предложил заметить "Ложь ИЛИ" и "Истина И" на пробелы с сохранением форматирования.

1. Сразу понятно
   ManyakRus
 
138 - 09.11.17 - 17:07
на инфостарте выложили то же самое недавно
http://catalog.mista.ru/public/152801/

надо писать 1=1 или 0=1 :)
   TormozIT
 
139 - 09.11.17 - 17:21
(138) То же самое по отношению к чему?
   vvp91
 
140 - 09.11.17 - 17:27
(0) Короче, Сережа, не парься - тебя не поняли - да и душ с ним.

Что ты хочешь от "простого Одинэсника".
Тут на нимфослете кто-то выдал за божественное откровение кривой отказ от рекурсивного вызова процедур, чему учат на первых курсах теории алгоритмов.

Надо проще быть. Да будет "свет", сказал монтер, и тряпкой лампочку протер. Вот и вся необходимость.
   mistеr
 
141 - 09.11.17 - 17:46
(139) Та же самая ссылка, которую ты дал в (10)  :)
   TormozIT
 
142 - 09.11.17 - 17:59
(141) 5 лет все таки не укладывается в "недавно", это уверенное "давно" =)
   mistеr
 
143 - 09.11.17 - 18:09
(142) Надо читать как "недавно я наткнулся" )
   Вафель
 
144 - 09.11.17 - 18:50
Последнюю скобку тоже нужно переносить
   DomovoiAtakue
 
145 - 09.11.17 - 19:36
В вопросе спрашивают знание составления логических выражений, а в теме разбирают как оформлять их. Так в чем вопрос то?

По поводу оформления: сходите в школу, универ там все уже давно придумано.
1)По поводу скобок - главное чтоб не было недостатка. а так хоть каждое условие выделяйте в скобки, нормальный человек легко это читает. (не говоря уже о том, что есть отладчик и я вообще не помню когда вникал что там в этих условиях написано)
2)"Тогда" не переносится на новую строку - что за новшества раздувать код и убивать читабельность?
3)Мастерить в виде дерева - вам делать нечего? Строчите быстрее и все. Сложные условия редко когда бывают из 5 блоков, а это читается мгновенно.

Чем люди только не занимаются, чтоб только ничего не делать :)

1. Сразу понятно
   mistеr
 
146 - 09.11.17 - 19:50
(145) Для меня "Тогда" на новой строке при сложном многострочном выражении — плюс к читабельности. Жаль, что автооступ в пофигураторе так не считает.
   Franchiser
 
147 - 09.11.17 - 23:46
На практике не стоит писать такие запутанные условия, проще воспринимается вхождение в массив.

1. Сразу понятно
   TormozIT
 
148 - 10.11.17 - 00:29
(147) Запутанными выглядят только сложные условия записанные без четкой системы. К тому же мы не только пишем сложные условия, но и читаем чужие. При чтении методика позволяет, не вникая в смысл произвольного сложного выражения, быстро переписать/переоформить в знакомый стиль.
   youalex
 
149 - 10.11.17 - 03:57
Это настолько просто, что сначала кажется сложным.
Если подобные выражения будут являться частью стиля, то после кратковременного привыкания будут восприниматься нативно.

зы. Сам использую подобное, но как, условно
Если СкорееВсегоЛожьНоНеФактИВообщеНаВсякийСлучай Тогда 
Иначе
//чтототам

КонецЕсли;

2. Понятно, но думал более 10 сек
 
 Рекламное место пустует
   mikeA
 
150 - 10.11.17 - 04:28
(140) Понять-то поняли, только большинство считает что каких-то существенных преимуществ это не даёт. Вроде и так всё понятно, когда отформатированно.
   МимохожийОднако
 
151 - 10.11.17 - 06:51
Много секунд потратил, чтобы прочитать ветку и понять для чего эта дискуссия. Не понял )) Главное-чтобы код был рабочим. А сложные условия лучше сделать отдельной функцией с подробным комментарием.

2. Понятно, но думал более 10 сек
   PCcomCat
 
152 - 10.11.17 - 08:33
Понятно, конечно, но не сразу. Когда с таким сталкиваешься не часто, то вызывает раздумья. Ну а когда постоянно в процессе работы, то уже не заметишь разницы.

3. Не понятно
   IvaneS
 
153 - 10.11.17 - 08:39
(0) Выявляете какой конструкцией создать алгоритм, чтобы сторонним править было сложно, каждый выбирает свой стиль.

3. Не понятно
   TormozIT
 
154 - 10.11.17 - 09:02
(152) Тогда логичнее было бы выбрать вариант 2, а не 3.
   Йохохо
 
155 - 10.11.17 - 09:04
(151) нотация или формализм записи сложных условий так, чтобы привычному к нотации человеку было легко это условие понять. С отступами и переносами, с автором и апологетами
ЗЫ В общем приятный конечно способ, но не без фанатизма
   PCcomCat
 
156 - 10.11.17 - 09:11
(152) Понятно - это когда понятно, а тут думать пришлось.))
   PCcomCat
 
157 - 10.11.17 - 09:12
(156) к (154)
   IvaneS
 
158 - 10.11.17 - 10:06
(154) Если выбрал такой почерк, то придерживайся... Главное команда положительно относился. А то могут сказать, что Сережин код я не могу читать)))
   TormozIT
 
159 - 10.11.17 - 10:10
(158) Какой почерк? В (154) я писал про нелогичный выбор варианта ответа в сообщении (152).
   bolder
 
160 - 10.11.17 - 11:12
(0) Если все это для возможности простого коммента условия- то излишние сущности.

2. Понятно, но думал более 10 сек
   TormozIT
 
161 - 10.11.17 - 11:22
(160) Можешь обосновать? Покажи как ты комментируешь части сложных логических выражений.
   zzzzz
 
162 - 10.11.17 - 11:26
Не забываем о следующих выражениях...
Если А Тогда
...
ИначеЕсли А=Ложь тогда
...
Иначе
...
КонецЕсли;
   TormozIT
 
163 - 10.11.17 - 11:30
(162) Да, вечная им память во веки веков.
   bolder
 
164 - 10.11.17 - 12:44
(161) Все гораздо проще)В данной ветке невозможно зарегистрироваться с другого устройства:регистрация пропадает.А Вы про сложные логические условия))
   bolder
 
165 - 10.11.17 - 12:50
(161)
Вот такой пример, почти из типовой
<code>
 Отчет =Новый Структура("Группировка,ДополнительныеПоля",1,1);
// 1 и типовой вариант

    
Если Отчет.Свойство("Группировка") И Отчет.Свойство("ДополнительныеПоля") Тогда
//ЗаполнитьДополнительныеПоляИзНастроек(Отчет.КомпоновщикНастроек, Отчет.ДополнительныеПоля, Отчет.Группировка);

        Сообщить("Истина!");
    КонецЕсли;

//2 вариант предлагаемый    

    Если Ложь 
    ИЛИ    ( ИСТИНА 
    И Отчет.Свойство("Группировка") 
    И Отчет.Свойство("ДополнительныеПоля")
    )
    Тогда
        //ЗаполнитьДополнительныеПоляИзНастроек(Отчет.КомпоновщикНастроек, Отчет.ДополнительныеПоля, Отчет.Группировка);

        Сообщить("Истина!");
    КонецЕсли;
    
// 3 вариант легко получаемый из 1

    Если 
        Отчет.Свойство("Группировка") И
        Отчет.Свойство("ДополнительныеПоля") Тогда
        //ЗаполнитьДополнительныеПоляИзНастроек(Отчет.КомпоновщикНастроек, Отчет.ДополнительныеПоля, Отчет.Группировка);

        Сообщить("Истина!");
    КонецЕсли;
    // 4 вариант для перфекционистов

    Если 
        Отчет.Свойство("Группировка") И
        Отчет.Свойство("ДополнительныеПоля") 
        Тогда
        //ЗаполнитьДополнительныеПоляИзНастроек(Отчет.КомпоновщикНастроек, Отчет.ДополнительныеПоля, Отчет.Группировка);

        Сообщить("Истина!");
    КонецЕсли;
    
</code>
   EvgeniuXP
 
166 - 10.11.17 - 12:52
(18) если до красоты дошло, то так красивее:

Если Ложь
ИЛИ Условие1
ИЛИ Условие2
ИЛИ и т.д.
Тогда
   ...
КонецЕсли;
   bolder
 
167 - 10.11.17 - 13:00
(166) Так я и пишу, что для удобства комментов только и нужно.А читаемость лучше не становится.Смотрим (165) пример 2.Намного же хуже типового в примере1 (165)!
   TormozIT
 
168 - 10.11.17 - 13:02
(165) Ты как то очень буквально понял методику. Зачем сверху делать группу-ИЛИ если внутри нее только один элемент? Это не моя методика =)
   TormozIT
 
169 - 10.11.17 - 13:03
(167) Пример то не соответствует методике.
   bolder
 
170 - 10.11.17 - 13:08
(169) Можно и два элемента написать с ИЛИ)
<code>
Отчет =Новый Структура("Группировка,ДополнительныеПоля",1,0);
     Состояние =Новый Структура("Включено,Ожидает",1,1);

    
    Если Ложь 
    ИЛИ    ( ИСТИНА 
    И Отчет.Свойство("Группировка") 
    И Отчет.Свойство("ДополнительныеПоля")
    )
    ИЛИ    ( ИСТИНА 
    И Состояние.Свойство("Включено") 
    И Состояние.Свойство("Ожидает")
    )
    
    Тогда
        //ЗаполнитьДополнительныеПоляИзНастроек(Отчет.КомпоновщикНастроек, Отчет.ДополнительныеПоля, Отчет.Группировка);

        Сообщить("Истина - 2!");
    КонецЕсли;
</code>
   EvgeniuXP
 
171 - 10.11.17 - 13:18
(170) пример не удачен, от верхних Ложь можно избавиться.
   TormozIT
 
172 - 10.11.17 - 13:23
(170) Теперь это подходит под мою методику, но ты забыл сравнить новое выражение с остальными вариантами. Случайно ли? =)
   Peltzer
 
173 - 10.11.17 - 13:24
Легко

1. Сразу понятно
   bolder
 
174 - 10.11.17 - 13:24
(171) А на синтаксическую ошибку не желаете нарваться?Перед ИЛИ должен быть операнд или вы первый элемент сложного ИЛИ без ИЛИ предлагаете? С Ложь все однообразно.
   bolder
 
175 - 10.11.17 - 13:26
(172) Уже нет времени)...
   TormozIT
 
176 - 10.11.17 - 13:48
(175) Ну мне тут нечем крыть. Признаю поражение.
   Fannasankh
 
177 - 10.11.17 - 14:22
Не понятно зачем упрощать логические выражения. Ради оптимизации или зачем? Оптимизация сомнительна, а восприятие ухудшается.
   mistеr
 
178 - 10.11.17 - 16:55
На самом деле плюс в возможности легкого комментирования частей выражения — это действительно плюс. Я постоянно использовал такой стиль, когда основным языком был SQL (был такой период). Кое-где это даже включалось в корпоративные стандарты. Но там это больше от бедности: в SQL ты не можешь, за редкими исключениями, оформить части выражения в виде функций, ввести дополнительные булевы переменные и т.д. А если и можешь, то не станешь этого делать по соображениям производительности.

Язык 1С конечно не верх выразительности, но от этих напастей в основном избавлен. Поэтому я за то, чтобы всячески упрощать монструозные многоуровневые много-вложенные логические конструкции, а не изобретать методы управления ими.

P.S. Кроме прочего, предложенная структура выражений упрощает кодогенерацию. Но в 1С это не актуально.
   DomovoiAtakue
 
179 - 11.11.17 - 14:06
Вот смотрю и думаю почему табуляциями не выделены условия и "Тогда"? 1с же вроде выделяет, или вы как-то перенастраиваете табуляцию или это само собой разумеется, просто на это не отвлекаются? Т.е. должно быть так:

Если Ложь 
    ИЛИ    ( ИСТИНА 
    И Отчет.Свойство("Группировка") 
    И Отчет.Свойство("ДополнительныеПоля")
    )
    ИЛИ    ( ИСТИНА 
    И Состояние.Свойство("Включено") 
    И Состояние.Свойство("Ожидает")
    )
    
    Тогда
    
    Сообщить("Истина - 2!");
    
КонецЕсли;
   TormozIT
 
180 - 11.11.17 - 20:40
(179) Видимо ты под "табуляцией" имел ввиду "автоформтирование" и "автоотступ". Действительно, они не знают про такую методику. Поэтому приходится табуляции вручную расставлять.
   DomovoiAtakue
 
181 - 12.11.17 - 15:27
(180)Получается alt+shift+f уже не попользоваться? Если да, то с этого надо было начинать придумывание своего стиля оформления. Одно дело табулировать вручную условие, а другое всю процедуру, в которой встречается данное условие.
   TormozIT
 
182 - 12.11.17 - 16:00
(181) Автоформатированием я лично пользуюсь очень редко. Видимо уже привык. Автоформатирование будет ломать многие стили записи многострочных конструкций, т.к. не понимает их специфики.
В основном я страдаю от применения автоформатирования при вынесении метода (рефакторинг). В этом действии оно принудительное.
   DomovoiAtakue
 
183 - 12.11.17 - 18:59
(182)"Автоформатирование будет ломать многие стили записи многострочных конструкций"
Я бы задумался о правильности их построения. Вы представляете какого будет программировать с вами в паре или после вас другим? Может быть ваши коллеги не зря возмущаются?
   TormozIT
 
184 - 12.11.17 - 19:56
(183) В (10) я описал основные замечания коллег. Они не включали автоформатирование. Я и не утверждал, что коллеги зря возмущаются. Я хотел понять картину на большей выборке программистов.
Про многие стили многострочных конструкций я писал не только про свои. Даже в этой теме и в комментариях к моей статье приводились другие стили, которые тоже будут ломаться автоформатированием. Поэтому не стоит все валить на меня =)
   DomovoiAtakue
 
185 - 12.11.17 - 20:22
(184)Я не валю, я рассуждаю.
   DomovoiAtakue
 
186 - 12.11.17 - 20:34
А зачем вообще вы пишите выражения как в заголовке?
   Елена Троянская
 
187 - 12.11.17 - 22:47
Непривычно, неудобно.

2. Понятно, но думал более 10 сек
   Митяйский
 
188 - 13.11.17 - 09:17
да

1. Сразу понятно

  1  2

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