|
[А=Б=В] vs [Если Б=В Тогда А=Истина] | ☑ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
aleks-id
18.05.12
✎
11:23
|
В ветке v8: Как по дате определить что это конец месяца? разгорелись дебаты насчет использования конструкций и возможностей языков программирования (в частности 1С) при работе с булевой алгеброй. Какой вариант кому ближе?
|
||||||||||||||||
12
Alex S D
18.05.12
✎
11:30
|
конечно
[А=Б=В] - я проф. программист |
||||||||||||||||
13
ковер
18.05.12
✎
11:30
|
(9) а куле просто нужно знать порядок выполнения операций
|
||||||||||||||||
14
Maxus43
18.05.12
✎
11:31
|
ДА!
[А=Б=В] - я проф. программист |
||||||||||||||||
15
Reset
18.05.12
✎
11:31
|
Возврат Б=В
тоже будем писать как Если Б=В тогда возврат Истина; Иначе возврат Ложь; Конец; ? |
||||||||||||||||
16
salvator
18.05.12
✎
11:31
|
За другую конструкцию меня бьют на работе
[А=Б=В] - я проф. программист |
||||||||||||||||
17
PR
18.05.12
✎
11:32
|
Из прошлой ветки.
Проще Если. Особенно если речь не про "А=Б=В", а про чуть более длинные выражение, например "ТекущиеДанные.Флажок=ОбщийМодуль.ПолучитьЧтоТоТам(ТекущиеДанные.Сумма, Истина)=ОпределитьКакойНитьТамПоказатель(Константы.МояКонстанта.Получить(), ТекущиеДанные.ДокументПланирования.Дата, ТекущаяДата())". |
||||||||||||||||
18
izekia
18.05.12
✎
11:32
|
(13) ну профпрограммер пишет для неудачников же
|
||||||||||||||||
19
izekia
18.05.12
✎
11:33
|
(16) расскажи нам как тебя бьют? сейчас мазохисты подтянутся
|
||||||||||||||||
20
aleks-id
18.05.12
✎
11:33
|
из прошлой ветки по мнению PR вместо кода
ТекСтрока.Отметка = ТекСтрока.БанковскийСчет = Константы.ОсновнойБанковскийСчет; надо писать Если ТекСтрока.БанковскийСчет = Константы.ОсновнойБанковскийСчет Тогда ТекСтрока.Отметка = Истина Иначе ТекСтрока.Отметка = Ложь КонецЕсли; |
||||||||||||||||
21
ковер
18.05.12
✎
11:33
|
(16) откизди начальника, главное чтоб работало
|
||||||||||||||||
22
PR
18.05.12
✎
11:34
|
(20) Именно.
|
||||||||||||||||
23
dmpl
18.05.12
✎
11:35
|
(13) Не только порядок, то и то, что в одном случае знак = обозначает сравнение, а в другом случае знак = обозначает присваивание. В том же C/C++ такая конструкция сделает значение всех 3 переменных равным В, а в Паскале вообще смысл будет очень хитрым.
(20) Лучше ТекСтрока.Отметка = Ложь; Если ТекСтрока.БанковскийСчет = Константы.ОсновнойБанковскийСчет Тогда ТекСтрока.Отметка = Истина; КонецЕсли; |
||||||||||||||||
24
izekia
18.05.12
✎
11:36
|
(19)+ уже тема есть, сорри)
|
||||||||||||||||
25
ХочуСказать
18.05.12
✎
11:37
|
(22) ты просто быдлокодер
|
||||||||||||||||
26
Lys
18.05.12
✎
11:37
|
В каждом конкретном случае пишу так, как более удобно и наглядно.
Упоротые адепты только первого, или только второго подхода - убейтесь, надо быть гибким. ЗЫ: Не знаю, как там в паскале или си это работает, и знать не хочу. КГ/АМ |
||||||||||||||||
27
Reset
18.05.12
✎
11:37
|
(23) При чем здесь С/С++ ?
|
||||||||||||||||
28
Irek-kazan
18.05.12
✎
11:37
|
надо писать код так, чтобы после вас любой разобрался
[Если Б=В Тогда А=Истина] - я проф. программист |
||||||||||||||||
29
Maxus43
18.05.12
✎
11:38
|
(26) смотри тему в сабже, с которой всё началось. именно ТАМ 100% А = (Б = В) по феншую
|
||||||||||||||||
30
Alex S D
18.05.12
✎
11:38
|
(27) я думаю все начинали изучать программирование не с 1С...
|
||||||||||||||||
31
Warlock
18.05.12
✎
11:39
|
Конструкция [А=Б=В], безусловно, красивая, но в реальных проектах я придерживаюсь идеологии [Если Б=В Тогда А=Истина], как более наглядной и быстро читаемой
По той же причине расписываю: Если ДлинноеИСложноеУсловие Тогда Ревизит1.Видимость = Истина; Ревизит2.Видимость = Ложь; Ревизит3.Видимость = Истина; Иначе Ревизит1.Видимость = Ложь; Ревизит2.Видимость = Истина; Ревизит3.Видимость = Ложь; КонецЕсли хотя можно написать: РезультатДлинногоИСложногоУсловия = ДлинноеИСложноеУсловие; Ревизит1.Видимость = РезультатДлинногоИСложногоУсловия; Ревизит2.Видимость = Не(РезультатДлинногоИСложногоУсловия); Ревизит3.Видимость = РезультатДлинногоИСложногоУсловия; но в таком случае, при разборе кода, приходится мысленно просчитывать результат, и, что важнее, если код дорабатывать или повторно использовать, сложность понимания может вырасти до того, что без отладчика не разобраться. [Если Б=В Тогда А=Истина] - я проф. программист |
||||||||||||||||
32
Maxus43
18.05.12
✎
11:40
|
(31) конструкция А = (Б = В) используется для простых условий, незачем воротить Если Тогда для таких мелких, они читаемы в любом случае
|
||||||||||||||||
33
aleks-id
18.05.12
✎
11:41
|
(31) если бы ты вместо РезультатДлинногоИСложногоУсловия назвал переменную Отображать то все было бы читабельно
|
||||||||||||||||
34
dmpl
18.05.12
✎
11:42
|
(27) Притом же, причем и Паскаль - конструкция неоднозначная, и если программируешь в разных языках программирования, то можешь неправильно понять конструкцию, что приведет к ошибке в программе или впустую потраченному на отладку времени.
|
||||||||||||||||
35
Ненавижу 1С
гуру
18.05.12
✎
11:44
|
(31) главное теперь не забывать при создании нового реквизита добавлять строки в ДВУХ местах, вместо ОДНОГО
|
||||||||||||||||
36
Fish
18.05.12
✎
11:44
|
(28) Забыл уточнить. надо писать код так, чтобы после вас любой ПРОГРАММИСТ разобрался. А быдлокодеру как не пиши- всё равно не осилит :)))
[А=Б=В] - я проф. программист |
||||||||||||||||
37
Reset
18.05.12
✎
11:45
|
(34) Т.е., по твоему, я сейчас и в С должен отказаться от конструкции x=y=z ? Не дай бог адинэсник мой код не правльно поймет
|
||||||||||||||||
38
Maxus43
18.05.12
✎
11:46
|
нормальный программист понимает в каком он языке кодит, и такие отличия знает
|
||||||||||||||||
39
dmpl
18.05.12
✎
11:47
|
(37) Ты сам его можешь неправильно понять ;) Пусть это и продлится недолго, но производительность твою снизит.
|
||||||||||||||||
40
PR
18.05.12
✎
11:47
|
(35) Вместо двух наборов строк лучше написать
Результат = ДлинноеИСложноеУсловие; Ревизит1.Видимость = Результат; Ревизит2.Видимость = НЕ Результат; Ревизит3.Видимость = Результат; |
||||||||||||||||
41
Steel_Wheel
18.05.12
✎
11:48
|
Скобки забыл перед "Б" и после "В"
[А=Б=В] - я проф. программист |
||||||||||||||||
42
Maxus43
18.05.12
✎
11:48
|
(39) чож ты на английском в 1с не пишеш? програмер С++ тебя не поймёт когда в 1с заглянет
|
||||||||||||||||
43
Ненавижу 1С
гуру
18.05.12
✎
11:48
|
есть и более тонкие различия, так что нельзя писать в универсальном стиле во всех языках мира
например в Си++ нельзя в конструкторе вызывать виртуальные методы, а в Си# можно |
||||||||||||||||
44
PR
18.05.12
✎
11:48
|
(37) Если ты не понимаешь отличия программирования на 1С от программирования на C, то вряд ли ты поймешь, почему в C правильнее писать А=Б=В, а в 1С наоборот.
|
||||||||||||||||
45
Ненавижу 1С
гуру
18.05.12
✎
11:49
|
(40) так я про то же, а он в (31) говорит - нефига
|
||||||||||||||||
46
aleks-id
18.05.12
✎
11:49
|
(41) скобки здесь не обязательны
|
||||||||||||||||
47
Warlock
18.05.12
✎
11:49
|
(33), (35) Пример сильно упрощенный. В жизни я попадал на такие конструкции, которые используют несколько "результатов сложных условий" и бинарную логику для вычисления необходимости отображения
Метод в (31) хорош тем, что, глядя в код, можно представить видимость реквизитов. А когда условий много, есть подблоки и прочие изыски, читать код тяжело. Но я не говорю, что надо делать только как в (31). Надо всегда решать по обстоятельствам |
||||||||||||||||
48
Fish
18.05.12
✎
11:49
|
(41) А скобки зачем?
|
||||||||||||||||
49
Ненавижу 1С
гуру
18.05.12
✎
11:50
|
(46)(48) просто визуально операцию сравнения отличить от операции присваения
|
||||||||||||||||
50
Fish
18.05.12
✎
11:50
|
(44) Ну так поведай, почему же в 1С писать А=Б=В неправильно?
|
||||||||||||||||
51
Ненавижу 1С
гуру
18.05.12
✎
11:51
|
(47) отмазка не принята ))
|
||||||||||||||||
52
PR
18.05.12
✎
11:51
|
(45) Прочитай предыдущие посты еще раз. Внимательно.
|
||||||||||||||||
53
Ненавижу 1С
гуру
18.05.12
✎
11:51
|
(50) он ее читает с трудом, но тут дело привычки, имхо
|
||||||||||||||||
54
Reset
18.05.12
✎
11:52
|
(39) Не делайте, прошу, из меня идиота. Я всегда в курсе, на каком языке пишу в конкретный момент.
|
||||||||||||||||
55
Wobland
18.05.12
✎
11:52
|
ну зачем все эти лишние слова?
[А=Б=В] - я проф. программист |
||||||||||||||||
56
Ненавижу 1С
гуру
18.05.12
✎
11:52
|
(52) да хоть обчитайся, толчем воду на пустом месте, дело в личных тараканах в голове
|
||||||||||||||||
57
aleks-id
18.05.12
✎
11:53
|
кстати, кто тут вопит про С ? там конструкция будет А=Б==С
в паскале вообще А:=Б=С |
||||||||||||||||
58
PR
18.05.12
✎
11:53
|
(50) Мне каждые 20 постов повествовать что ли?
Прочитай предыдущие посты. |
||||||||||||||||
59
Irek-kazan
18.05.12
✎
11:54
|
А вот еще вопрос, какой вариант быстрее вычислить интерпретатор?
|
||||||||||||||||
60
dmpl
18.05.12
✎
11:54
|
(42) Кодер может и не поймет. Программист - поймет.
(43) Те еще грабли, особенно при глубоком наследовании. (50) Потому что в 1С значение оператора = меняется в зависимости от места использования. В Си оператор = - это присваивание, а сравнение делает оператор ==. (57) Ну вот! Замечательно видно где сравнение, а где присваивание. |
||||||||||||||||
61
Ненавижу 1С
гуру
18.05.12
✎
11:54
|
(57) в Си можно как
А=Б==С так и А=Б=С итог разный |
||||||||||||||||
62
Fish
18.05.12
✎
11:54
|
(58) Читал, кроме того, что ты не умеешь читать такой код, я доводов не увидел :))
т.е., если какой-то одинэсник не осиливает рекурсию, то её тоже в 1С использовать нельзя? |
||||||||||||||||
63
izekia
18.05.12
✎
11:55
|
(61) мы и так все знаем что ты знаешь С
|
||||||||||||||||
64
dmpl
18.05.12
✎
11:55
|
(61) Угу, а если мы еще и перегрузили эти операторы - то вообще дух захватывает от использования возможностей языка...
|
||||||||||||||||
65
trad
18.05.12
✎
11:55
|
в одних случаях
[А=Б=В] - я проф. программист |
||||||||||||||||
66
Ненавижу 1С
гуру
18.05.12
✎
11:55
|
(60) значения разные, но однозначно определяется смысл, а для наглядности еще и скобки добавить
|
||||||||||||||||
67
trad
18.05.12
✎
11:55
|
в других случаях
[Если Б=В Тогда А=Истина] - я проф. программист |
||||||||||||||||
68
Ненавижу 1С
гуру
18.05.12
✎
11:56
|
(63) если бы
|
||||||||||||||||
69
PR
18.05.12
✎
11:56
|
(56) А, пардоньте, я неверно прочитал (31).
Я думал, что написано, что не нужно писать Ревизит1.Видимость = ДлинноеИСложноеУсловие; Ревизит2.Видимость = Не(ДлинноеИСложноеУсловие); Ревизит3.Видимость = ДлинноеИСложноеУсловие; |
||||||||||||||||
70
Maxus43
18.05.12
✎
11:57
|
(60) >>Кодер может и не поймет. Программист - поймет
дак программист и в 1с поймёт А=Б=В. Противоречиш сам себе, включи логику. То програмист не поймёт, то поймёт. [А=Б=В] - я проф. программист |
||||||||||||||||
71
dmpl
18.05.12
✎
11:58
|
(66) Однозначно, но противоестественно ;)
|
||||||||||||||||
72
dmpl
18.05.12
✎
11:59
|
(70) Для этого он должен прочитать талмуд сначала.
|
||||||||||||||||
73
Warlock
18.05.12
✎
11:59
|
(51)
Приведу чисто гипотетический код: ВалютнаяСумма.Видимость = ОтражатьВБухгалтерскомУчете И Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); КурсВзаиморасчетов.Видимость = ОтражатьВБухгалтерскомУчете И Валюта = Константы.ВалютаРегламентированногоУчета.Получить() И ОбщийМодуль.ПолучитьПравоПользователя("ПравоМенятьКурс"); против Если ОтражатьВБухгалтерскомУчете И Валюта = Константы.ВалютаРегламентированногоУчета.Получить() Тогда ВалютнаяСумма.Видимость = Истина; Если ОбщийМодуль.ПолучитьПравоПользователя("ПравоМенятьКурс") Тогда КурсВзаиморасчетов.Видимость = Истина; Иначе КурсВзаиморасчетов.Видимость = Ложь; КонецЕсли; Иначе ВалютнаяСумма.Видимость = Ложь; КурсВзаиморасчетов.Видимость = Ложь; КонецЕсли; А теперь представь, что реквизитов и ветвлений много. Какой получится читабельнее? (Про отсутствие избыточности не говорим - она принесена в жертву) |
||||||||||||||||
74
Ненавижу 1С
гуру
18.05.12
✎
12:00
|
(72) ну знаешь, в Си тоже надо прочитать талмуд ))
|
||||||||||||||||
75
dmpl
18.05.12
✎
12:01
|
(74) Если писать нормально - талмуд не потребуется ;) На Си можно писать не сложнее, чем на Бейсике.
|
||||||||||||||||
76
aleks-id
18.05.12
✎
12:02
|
(72) проще ведь на мисте спросить да?
v8: Помогите разобраться в коде |
||||||||||||||||
77
Fish
18.05.12
✎
12:03
|
(73) Первый вариант, естественно читабельнее, чем вникать в кучу если, иначеЕсли и т.п. А когда внутри одного из Иначе если засунут ещё такое же дерево из Если... ИначеЕсли, то код становится совсем нечитабельным.
|
||||||||||||||||
78
Reset
18.05.12
✎
12:05
|
(73) Второй вариант сложнее читается.
Первый подлежит оптимизации - убрать получение константы два раза Например ЭтоВалютаРеглУчета=Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); ВалютнаяСумма.Видимость = ОтражатьВБухгалтерскомУчете И ЭтоВалютаРеглУчета; КурсВзаиморасчетов.Видимость = ОтражатьВБухгалтерскомУчете И ЭтоВалютаРеглУчета И ОбщийМодуль.ПолучитьПравоПользователя("ПравоМенятьКурс"); |
||||||||||||||||
79
PR
18.05.12
✎
12:06
|
(62) Когда аргументы заканчиваются, начинаются передергивания и придумывания, да.
|
||||||||||||||||
80
Ненавижу 1С
гуру
18.05.12
✎
12:06
|
(73) спорно очень, что читабельнее
1 вариант упрощается до: УсловиеВидимостиВалютноСуммы = ОтражатьВБухгалтерскомУчете И Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); ВалютнаяСумма.Видимость = УсловиеВидимостиВалютноСуммы; КурсВзаиморасчетов.Видимость = УсловиеВидимостиВалютноСуммы И ОбщийМодуль.ПолучитьПравоПользователя("ПравоМенятьКурс"); 2 вариант упрощается до: ВалютнаяСумма.Видимость = Ложь; КурсВзаиморасчетов.Видимость = Ложь; Если ОтражатьВБухгалтерскомУчете И Валюта = Константы.ВалютаРегламентированногоУчета.Получить() Тогда ВалютнаяСумма.Видимость = Истина; Если ОбщийМодуль.ПолучитьПравоПользователя("ПравоМенятьКурс") Тогда КурсВзаиморасчетов.Видимость = Истина; КонецЕсли; КонецЕсли; |
||||||||||||||||
81
H A D G E H O G s
18.05.12
✎
12:06
|
I 'm not fortunate son!
Вот вам делать нехер. КГ/АМ |
||||||||||||||||
82
Ненавижу 1С
гуру
18.05.12
✎
12:07
|
(81) во, старая гвардия ежей подтянулась ))
|
||||||||||||||||
83
Ненавижу 1С
гуру
18.05.12
✎
12:08
|
кстати NULL в SQL и в Си++ имеет разный смысл ))
|
||||||||||||||||
84
H A D G E H O G s
18.05.12
✎
12:08
|
|||||||||||||||||
85
Fish
18.05.12
✎
12:10
|
(79) Ты самокритичен, как никогда :)))
|
||||||||||||||||
86
PR
18.05.12
✎
12:11
|
(85) Заканчиваю беспредметный разговор с тобой. Неинтересно.
|
||||||||||||||||
87
Warlock
18.05.12
✎
12:12
|
(80)Согласен, что спорно. Но если конфигурация в активной разработке и есть большая вероятность, что к коду нужно будет вернуться, я выбираю второй вариант. Хотя первый вариант, снабдив вспомогательными переменными, можно сделать красивым и лаконичным. В общем, по ситуации.
|
||||||||||||||||
88
Fish
18.05.12
✎
12:13
|
(86) Так собственно, никакого спора и не было. Ты заявил, что в 1С так писать нельзя. Я просто спросил, почему. Ты ответа не дал. То, что лично ТЕБЕ это не удобно читать и ТЕБЕ так не нравится - это не аргументы.
|
||||||||||||||||
89
mg-samara
18.05.12
✎
12:14
|
Наглядность - важнее.
Но в редких случаях можно использовать и А=Б=В. [Если Б=В Тогда А=Истина] - я проф. программист |
||||||||||||||||
90
dmpl
18.05.12
✎
12:16
|
(83) Более того, я могу написать
#undef NULL #define NULL 1000 и будет вообще весело :) |
||||||||||||||||
91
Ksandr
18.05.12
✎
12:16
|
Краткость сестра таланта
[А=Б=В] - я проф. программист |
||||||||||||||||
92
izekia
18.05.12
✎
12:17
|
(82) не гунди)
|
||||||||||||||||
93
Irek-kazan
18.05.12
✎
12:18
|
в общем то надо закруглятся. Писать можно и так и эдак, главное чтобы работало.
Те кто пишут по принципам "главное быстро. а мне и так все понятно. кто не понял дебил" выбирают первый вариант. |
||||||||||||||||
94
Ненавижу 1С
гуру
18.05.12
✎
12:19
|
(90) точно
#define true false |
||||||||||||||||
95
х86
18.05.12
✎
12:22
|
(0)используем православную конструкцию
?(Б=В, Истина, Ложь) |
||||||||||||||||
96
dmpl
18.05.12
✎
12:23
|
(94) А еще можно операторы +, -, *, /, = перегрузить, например, умножение на деление и сложение на вычитание, а присваивание на сравнение :) А чо? Использование возможностей языка :)
|
||||||||||||||||
97
aleks-id
18.05.12
✎
12:24
|
(95) а чем она отличается от конструкции
?(Б=В, Б=В, Б=В) |
||||||||||||||||
98
Steel_Wheel
18.05.12
✎
12:24
|
(48) Для наглядности, чтобы у тру-сишников разрыва шаблона не было. И только
|
||||||||||||||||
99
1Сергей
18.05.12
✎
12:27
|
"трусишники"... надо запомнить
|
||||||||||||||||
100
Ненавижу 1С
гуру
18.05.12
✎
12:28
|
100!
|
||||||||||||||||
101
х86
18.05.12
✎
12:28
|
(97)по сути ни чем от всех перечисленных не отличается
|
||||||||||||||||
102
aleks-id
18.05.12
✎
12:29
|
(101) вот именно! так почему ты так не пишешь?
|
||||||||||||||||
103
dmpl
18.05.12
✎
12:29
|
Анекдот в тему:
Пишите код так, будто человек, который будет его поддерживать – маньяк-психопат, который знает, где вы живете. |
||||||||||||||||
104
х86
18.05.12
✎
12:31
|
(102)хз, я не привередливый, конструкция как в (0) редко встречается, поэтому могу написать и так и так, и слогикой дружу понимаю все варианты
|
||||||||||||||||
105
х86
18.05.12
✎
12:32
|
(104)+ но в конструкции А=Б=В страюсь ставить скобочки для лучшего понимания А=(Б=В)
[А=Б=В] - я проф. программист |
||||||||||||||||
106
Mort
18.05.12
✎
12:33
|
Почему-то оператор "=" у некоторых вызывает возбуждение, а ">" не вызывает. Не думаю что кто-то между "А = B>C" и "Если B>C Тогда A = Истина ..." выберет второе.
[А=Б=В] - я проф. программист |
||||||||||||||||
107
dmpl
18.05.12
✎
12:36
|
(106) Потому что в 1С он штатно имеет двойное назначение.
|
||||||||||||||||
108
Irek-kazan
18.05.12
✎
12:39
|
(106) второе однозначно!
|
||||||||||||||||
109
Stepa86
18.05.12
✎
13:48
|
А = (Б=В) //когда умещается на экране и не надо думать
или Если Б=В Тогда // когда нужно в блоке много чего еще поделать А = Истина; или А = БравноВ(Б,В) // когда условие сложное/длинное или непонятное или Если БравноВ(Б,В) Тогда // когда условие сложное/длинное или непонятное и в блоке надо еще чо нить поделать А = Истина; конструкция ?(,,) ломает мне мозг - нинавижу ее (103) первое упоминание этой цитаты у Макконнелла и фразу приписывают ему, но сам он это отрицает КГ/АМ |
||||||||||||||||
110
dumb851
18.05.12
✎
13:51
|
А=Б+В
КГ/АМ |
||||||||||||||||
111
Кирпич
18.05.12
✎
13:56
|
А = (Б = В)
КГ/АМ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |