Имя: Пароль:
1C
1С v8
Как правильно писать для красоты кода редкое условие.
0 Гений 1С
 
гуру
28.11.12
16:48
Есть некоторое условие Х, но оно встречается редко, т.е. описывает частный случай.

Как правильно писать:

Если НЕ Х Тогда
 Код1;
Иначе
 Код2;
КонецЕсли;

Или:

Если Х Тогда
 Код2;
Иначе
 Код1;
КонецЕсли;


Суть вопроса в том, чтобы более часто используемый код описывался сначала, а частные случаи - позже.

Или все же общий - в конце? Или как-то по другому?
1 YF
 
28.11.12
16:49
(0) Лучше второй вариант - при наличии Иначе изврат делать в условии общее Не
2 Kashemir
 
28.11.12
16:50
Какая разница - переход будет в любом случае
3 vii88
 
28.11.12
16:50
я смотрю по смыслу Код1 и Код2, если код1 основной, а код2 дополнительный, то делаю чтобы первый был код1

а если они равнозначны, то первым пишу тут чтобы без "Не"
4 Wobland
 
28.11.12
16:50
(0) извращенец
5 Maxus43
 
28.11.12
16:51
второй - читабельней. пожалей тех кто будет за тобой косяки править
6 Reset
 
28.11.12
16:55
(0)
"Суть вопроса в том, чтобы более часто используемый код описывался сначала, а частные случаи - позже.
Или все же общий - в конце?"

Без разницы в общем случае.
Частные случаи можно подобрать как под один так и под другой вариант.

Обсуждения, имхо, не стОит.
7 mikecool
 
28.11.12
16:56
(0) сейчас производительность процессоров такова, что никто инверсию и не заметит в твоем копрокоде )))
8 Гений 1С
 
гуру
28.11.12
16:56
(6) я порой думаю о красоте кода. Не хотелось бы описывать редкие исключения раньше по ходу модуля, чем общий случай. Как-то оно бросается в глаза.
9 Гений 1С
 
гуру
28.11.12
16:57
(7) Я не о скорости вопрос задал, а о красоте
10 НЕА123
 
28.11.12
16:57
(6)+1
не ассемблере пишем.
11 Xapac_2
 
28.11.12
16:58
лучше так

Если Х Тогда
 Код2;
Иначе
 Код1;
КонецЕсли;
ибо можно делать так
Если Х Тогда
 Код2;
ИначеЕсли Х Тогда
 Код3;
ИначеЕсли Y Тогда
 Код4;
ИначеЕсли Z Тогда
 Код5;
Иначе
12 Chai Nic
 
28.11.12
16:58
И вот еще варианты: "не(а=б)", "a<>b". Что лучше в смысле понимания?
13 Xapac_2
 
28.11.12
16:59
а вообще лучше сделать так:
class Object
calculate(){Код2}

class Object_1
override calculate(){Код1}
14 Xapac_2
 
28.11.12
16:59
(13) где Object_1 порожден от Object
15 acsent
 
28.11.12
17:00
(12) по стандарту 1с a<>b
16 mikecool
 
28.11.12
17:00
(9) кому нафик нужна красота? главное - чтобы работало правильно и быстро
17 mikecool
 
28.11.12
17:01
+16 пользователю глубоко нас-рать на красоту кода...
18 Гений 1С
 
гуру
28.11.12
17:01
(16) я олд-скул, мне нужна красота в коде
19 mikecool
 
28.11.12
17:02
(18) такими скулами похвастать может каждый, и каждой школы свои тараканы в голове...
20 acsent
 
28.11.12
17:03
(18) Если тебе нужна красота, то: Отрицательные условия читаются гораздо хуже
21 МишКа
 
28.11.12
17:03
(0) Правильно писать в три ветки. Третья - для условия, которое не встречается никогда.
22 mikecool
 
28.11.12
17:03
(18) и это - объясни , в чем прелесть отрицания?
23 Лефмихалыч
 
28.11.12
17:07
(0) ты ошибаешься, если думаешь, что тебя это каким-то образом спасет
24 Serg_1960
 
28.11.12
17:09
Уникальность условия можно подчеркнуть не разделением основного потока алгоритма, а внесением изменения в основной поток (круто загнул) :)

...
Четыре = 2 х 2;

Если Гений_1С = Истина Тогда
  Четыре = 5;
КонецЕсли;
...
25 orefkov
 
28.11.12
17:13
(24)
Это 1С. В нем
"Если Условие" и "Если Условие = Истина" - немного разные вещи...
26 samozvanec
 
28.11.12
17:16
(25) чем же?
27 samozvanec
 
28.11.12
17:17
(0) под условие Иначе могут разные вещи попадать, поэтому все зависит от условия и вариантов Иначе
28 Reset
 
28.11.12
17:21
(26) наличием составных типов напр
29 ManyakRus
 
28.11.12
17:22
отрицание НЕ вообще никогда не надо писать.
Код должен быть легким чтоб его читать как книжку слева на право, а не посмотреть что справа а потом проотрицать слева.
30 orefkov
 
28.11.12
17:23
(26)
Если в Условие - Неопределено, то
"Если Условие Тогда" - вылетит с ошибкой "Преобразование значения к типу Булево не может быть выполнено"
а
"Если Условие = Истина Тогда" - без ошибок перейдет в Иначе.
31 mikecool
 
28.11.12
17:23
(29) не вижу смысла такой категоричности
32 samozvanec
 
28.11.12
17:24
(28) если у ваши условия могут вернуть не только булево, но и ссылку на план счетов, или там Неопределено, для такого кода название  существуют очень давно
33 samozvanec
 
28.11.12
17:25
(32) и к (29) тоже относится
34 Reset
 
28.11.12
17:25
(31) и к (32) тоже относится ;)
35 samozvanec
 
28.11.12
17:26
(33) равно как и к 34 8)
36 Гений 1С
 
гуру
28.11.12
17:28
(24) лишний прогон кода не есть хорошо для скорости
37 Гений 1С
 
гуру
28.11.12
17:29
(31) Не можно использовать, но по другому.
Если у вас есть отрицание в услоии, нужно писать так.

ТоварИсключительный = НЕ Товар.ВидТовара = "Бук";
Если ТоварИсключительный Тогда
...
КонецЕсли;

Тогда Не не замыливает глаз
38 Reset
 
28.11.12
17:29
(35) Я запутался в ваших goto, шеф :)
Думаю меня вы поняли
39 acsent
 
28.11.12
17:30
И этот копрокод красив?
ТоварИсключительный = НЕ Товар.ВидТовара = "Бук";
40 qeos
 
28.11.12
17:32
функция сравнитьРезультат(условие, резИстина, резЛожь)
41 acsent
 
28.11.12
17:34
(40) Такая функция уже есть "?"
42 pessok
 
28.11.12
17:40
(37) очешуенно читабельно...
43 Гений 1С
 
гуру
28.11.12
17:49
(39) Условие должно вычисляться отдельно и сохраняться в переменную с читаемым названием, в названии которой нет НЕ
44 Sidney
 
28.11.12
17:51
(0)Если можешь не писать - не пиши.
Сказал как то один уважаемый человек. И я, глядя на тебя, полностью с ним согласен.
45 Гений 1С
 
гуру
28.11.12
18:03
(44) ты не художник
46 hhhh
 
28.11.12
18:08
(45) ну если запрос к базе занимает 99.99% времени, а всё остальное 0,01%, то вы наверно сильно чего-то накурились, что ищете резервы скорости в присваивании значения булевой переменной.
47 Chai Nic
 
28.11.12
18:09
А еще функции (особенно булевские) в принципе не должны иметь императивного названия! Функция на то и функция, что не является процедурой...

Просто убивают такие конструкции в типовых:
"Если ПроверитьЗначенияРеквизита(Реквизит) тогда"

Это кошмар какой-то..
48 Mort
 
28.11.12
18:32
Так, конечно же лучше:

Если Х Тогда
 Код2;
Иначе
 Код1;
КонецЕсли;
49 Йохохо
 
28.11.12
18:41
так

// Если не редкая >|<опа, делаем, как обычно
Если НЕ Х Тогда
 Код1;
Иначе
 Код2;
КонецЕсли;
50 Vladal
 
28.11.12
18:51
(48) Что посоветуешь для этого кода?
http://s52.radikal.ru/i137/1207/77/6ea15989e208.png
51 Vladal
 
28.11.12
18:51
(50) к (51)
52 GLazNik
 
28.11.12
18:52
(50) ctrl-a + delete ^)
53 Chai Nic
 
28.11.12
19:02
(50) Впечатляет. Только глВозвестиВСтепеньЧисло некорректно реализовано.
54 ПесняПроЗайцев
 
28.11.12
19:07
?(,,)
55 ПесняПроЗайцев
 
28.11.12
19:07
вот ? сделали, а ++ нет. все таки 1с делали обкуренные.
56 Гений 1С
 
гуру
28.11.12
19:11
(50) это мой ночной кошмар.
57 ПесняПроЗайцев
 
28.11.12
19:14
(50) Это просто конгениально. Напоминает мне пору писания на с++.
58 TormozIT
 
гуру
28.11.12
20:26
Обычно короткие ветки условия я располагаю спереди, чтобы читать код было проще.
59 Гений 1С
 
гуру
29.11.12
13:53
(58) вот то то и оно, что часто используемый код обычно короче, чем редко. ;-)
60 Mort
 
29.11.12
14:04
длинных веток условий вообще не должно существовать.
61 Mort
 
29.11.12
14:05
+(60) И циклов. И вообще процедур.
62 mikecool
 
29.11.12
14:08
Серега, у тебя какое то очередное обострение?
Какая нафик красота кода? Код должен быть работоспособен и быстр...
63 Mort
 
29.11.12
14:08
А код в (50) может быть и неплохой. Тока раскидать по строкам.
64 Гений 1С
 
гуру
29.11.12
14:17
(62) я привык писать красиво
65 acsent
 
29.11.12
14:18
(64) красиво это как в (39)
66 Reset
 
29.11.12
14:30
(64) Что значит "красиво"?
Оптимально(по разным критериям) - может быть.
Читаемо (то же могут быть разные "стандарты" и точки зрения)- может быть.
Красиво? - что это?

Не ну я понимаю, иногда можно назвать "красивым" какое-то удачное(иногда, может, нестандартное) решение, алгоритм и тп.
Сабж же - это с какой стороны к монитору бантик привесить.
67 Infsams654
 
29.11.12
14:39
(0) "... а кому свиной хрящик"
68 Defender aka LINN
 
29.11.12
14:39
(64) За последние 3 часа успел, или когда?
69 tdm
 
29.11.12
14:42
(64) а чем не нравится : =?(X,Код2,Код1);
70 tdm
 
29.11.12
14:43
(54) +1, не заметил)))
71 Chai Nic
 
29.11.12
14:52
(66) "Красиво" - это когда достигнут баланс между читаемостью (поддерживаемостью) и производительностью(затратами ресурсов).