Имя: Пароль:
LIFE
 
OFF: Оформление кода
0 Stim213
 
28.05.11
18:00
1. 1 вариант 0% (0)
2. 2 вариант 0% (0)
3. Монопесуально 0% (0)
Всего мнений: 0

1 вариант:

ДатаПроверки = бла-бла-бла;
Отказ = Источник.Дата < ДатаПроверки;


2 вариант:

ДатаПроверки = бла-бла-бла;
Если Источник.Дата < ДатаПроверки Тогда
 Отказ = Истина;
КонецЕсли;


Какой вариант идеологически правильный?
1 poligraf
 
28.05.11
18:05
Первый вариант некоторые могут не понять:)

Монопесуально
2 Невский Александр
 
28.05.11
18:08
в данном случае без разницы

Первый вариант только более читабельнее (и то только на мой взгляд)
3 Rie
 
28.05.11
18:08
(0) Первый короче (а стало быть, обозримей).
(1) Это их личные половые проблемы.

Монопесуально
4 Rie
 
28.05.11
18:09
А почему ветка в LIFE, а не в v8?
По смыслу-то - вроде как тематическая.
5 Скользящий
 
28.05.11
18:10
второй проще воспринимается при чтении чужого кода.
6 Скользящий
 
28.05.11
18:10

2 вариант
7 Stim213
 
28.05.11
18:11
(4) секция - работа.
8 Кpoшка
 
28.05.11
18:12
1й лаконичный
2й структурный
если работаешь коллективно (твой код будут читать другие)
то 2й предпочтительнее
9 Попытка1С
 
28.05.11
18:26
имхо

2 вариант
10 Nexux
 
28.05.11
18:36
хз

1 вариант
11 Asmody
 
28.05.11
18:41
Какой тип у переменной бла?
12 Mnemonic1C
 
28.05.11
18:55
Первый красивее и понятней, второй для школоты

1 вариант
13 zyto
 
28.05.11
18:55
+(11)Хорошо бы перед этим проверить на тип (и заполненность)...
А то сразу ошибку в лоб получишь (в обоих случаях)
14 Asmody
 
28.05.11
19:00
(13)+ и в попытку завернуть
15 Rie
 
28.05.11
19:04
(13) Если сразу получишь - то хорошо. Искать не надо будет.
А вот проверять на тип и заполненность или не надо - зависит от того, что было раньше.
16 rs_trade
 
28.05.11
19:14
(1) на кой черт тогда вообще в конфигуратор лезть, если не способен понять эту строчку

1 вариант
17 smaharbA
 
28.05.11
19:19
оно конечно, оно так - именно для школоты, вот тока как быть с этим ?


ДатаПроверки = бла-бла-бла;
Отказ = Источник.Дата < ДатаПроверки;
Попытка
   х = Отказ;
Исключение
   Сообщить("А нету переменной Отказ");
КонецПопытки;
18 Stim213
 
28.05.11
19:24
(17) как так нету? ты не видишь суслика? Он же есть! проверка на равенство одинаковых типов всегда что-то да вернет
19 smaharbA
 
28.05.11
19:25
учиться тебе еще стим
20 smaharbA
 
28.05.11
19:25
думай еще о чем (17)
21 Rie
 
28.05.11
19:28
(18) Посмотри, какие варианты приведены в (0) :-)
22 Stim213
 
28.05.11
19:31
поясните
23 Rie
 
28.05.11
19:32
(22) Варианты кода в (0) - не эквивалентны.
А все до (17) (включая меня) проявили себя дятлами.
24 skunk
 
28.05.11
19:33
второй дольше выполняется

1 вариант
25 Ursus maritimus
 
28.05.11
19:34
(17) Ты пьяный?
26 Rie
 
28.05.11
19:34
(24) И тебе внимательно прочитать (17).

Или даже более простой пример:

Отказ = "ХЕР ВАМ";
// сюда подставить первый или второй варианты
Сообщить(Отказ);
27 pavig
 
28.05.11
19:35
(0)
имхо, много лишних строчек кода
сам стараюсь взять за правило писать короче (пусть и сложнее) -- в пределах разумного

(23) просто в (0) ТС не дописал ...ИНАЧЕ...

1 вариант
28 Рэйв
 
28.05.11
19:35
(0)ты походу шлангуешь всю работу против посидеть на мисте:))
Ну вот надо из пальца высосать и непременно запостить. Это наверное и есть МИСТОзависимость?

Монопесуально
29 Ursus maritimus
 
28.05.11
19:38
(26) Мы родом из семерко? Отказ - 99% переменная определенная всегда. 79% что процедура называтеся ПередЗаписью()
30 Rie
 
28.05.11
19:38
(27) Смотрим на тот код, который есть. Недописанного - его нет.
31 smaharbA
 
28.05.11
19:40
точно облака весь мозг поплющели
32 Stim213
 
28.05.11
19:41
блин, народ. Я спросил про читабельность, а не про функциональность. Отказ в обработчиках записи и проведения всегда определен по умолчанию как ЛОЖЬ, харе придираться.
Вам "Источник" ни о чем не говорит?
33 Rie
 
28.05.11
19:41
(29) Не, просто не хрен надеяться на вероятность, если можно написать правильно.

Вот другой пример:

Отказ = Истина;
// здесь варианты кода из (0)

Переменная Отказ - определена. Вот только значение у неё будет несколько неожиданное, если Источник.Дата>=ДатаПроверки
34 rs_trade
 
28.05.11
19:41
(30) да никто не париться о правильности кода. говорим об оформлении же. можно привести и корректный пример кода, если этот не нравится оформленный по принципам в сабже
35 Rie
 
28.05.11
19:41
(32) Насчёт функциональности - см. (33).
36 Rie
 
28.05.11
19:42
(34) Ага. А потом ошибки ловим в хорошо оформленной программе.
37 smaharbA
 
28.05.11
19:43
и среди тех кто тут пренебрежно родом с семерки известен код из сабжа и его не равнозначность и неоднозначноть
и косяки текущиеся из варианта один
38 Stim213
 
28.05.11
19:44
(33) переменная Отказ уже определена как ЛОЖЬ, тип Булево. Зачем её еще раз определять?
39 Rie
 
28.05.11
19:44
(37) Косяки или их отсутствие зависят не от варианта. И вариант 1 может быть правильным (в одной ситуации) и вариант 2 может быть правильным (в другой ситуации).
40 rs_trade
 
28.05.11
19:44
(36) ошибки мы всегда ловим, при любом раскладе. такова специфика
41 Ursus maritimus
 
28.05.11
19:44
(37) Можно то же самое со знаками препинания? 5 раз прочитал - ни разу не понял.
42 smaharbA
 
28.05.11
19:45
(32) читабельность всегда была и будет лучше у второго варианта, ибо читают не только типоякрутойичиталкнута, но и те кто мысли строит ступенчато
43 Rie
 
28.05.11
19:45
(38) В (33) - по каким-то причинам установили Отказ в ИСТИНА (предыдущая проверка выявила какую-то хрень).
Вариант 1 вернёт его в ЛОЖЬ - что не есть гуд.
44 Rie
 
28.05.11
19:45
(40) Но можно уменьшить их количество.
45 smaharbA
 
28.05.11
19:45
(39) о чем и был пост (17)
46 Stim213
 
28.05.11
19:46
(39) в каких ситуациях варианты 1 или 2 могут вызвать ошибку? Напоминаю, что речь идет о синтаксисе 8ке, обработчик ПередЗаписью, вызываемый в подписке на события
47 smaharbA
 
28.05.11
19:47
(43) да, есть три состояния булевых в языках без "жесткого" приведения

Ложь, Истина и еще третье Не ложь
48 rs_trade
 
28.05.11
19:48
(42) если выражение короткое, можно и первый. а вот большие и длинные выражения в одну строчку убивают
49 Stim213
 
28.05.11
19:48
(43)а что такого?? Ты имеешь ввиду, что после записи в пер. Отказ значения Истина надо всегда делать Возврат из процедуры?
50 Rie
 
28.05.11
19:49
(46) И я о нём же. Ситуация была приведена в (33).
Более подробно: предположим, что Источник.Дата>ДатаПроверки.
Изначально Отказ-ЛОЖЬ;

Если ЕстьДругиеКосякиПрепятствующиеЗаписи(Источник) Тогда
   Отказ = Истина;
КонецЕсли;

// а теперь твои варианты
51 Rie
 
28.05.11
19:49
(49) Не обязательно Возврат.
Может оказаться полезным проверить и другие условия - хотя бы для выдачи более аккуратного сообщения об ошибке.
52 NcSteel
 
28.05.11
19:53
(25) Поэтому и использую обычно первый вариант
53 skunk
 
28.05.11
19:54
так и не осилил причем тут код заказаный амбромсом ... он конечно великий танкист ... спору нет ... но тут именно спросили что правильнее (а) или (б)
54 Stim213
 
28.05.11
19:54
(50) понял. Тогда, хм. первый вариант будет как-то так:

Отказ = Отказ ИЛИ Источник.Дата < ДатаПроверки;

логически так вернее, то визуально код сложнее для чтения)
55 smaharbA
 
28.05.11
19:55
конечно проще все впихать в одно, к слову
читаемо ?

... = Мин(Найти(ВРег(НазваниеИнтерфейса()),"АДМИНИСТРАТОР"),1)+Мин(Найти(ВРег(НазваниеНабораПрав()),"АДМИНИСТРАТОР")*2,2);
56 Rie
 
28.05.11
19:55
(53) А он и ответил - что правильность (а) или (б) зависит от.
57 Stim213
 
28.05.11
19:56
(55) только давай не будем постить простыни. Понятно, что они никому не нужны. в (0) - не простыня
58 Rie
 
28.05.11
19:58
(54) Можно и так. И визуально этот код _может_ оказаться проще для чтения - из него понятно, что Отказ "накапливает" ошибки. А _может_ оказаться и сложнее.
59 smaharbA
 
28.05.11
19:59
грешен пиханием в одно условие всего и присвоения, так просче

но заявы про школоту несколько преждевременны
60 skunk
 
28.05.11
19:59
(56)кароче ... я слишком пьян сегодня для высоких материй
61 NcSteel
 
28.05.11
20:00
Короче. Хватит пить !
62 skunk
 
28.05.11
20:01
(61)упал???? ... в день пограничка такое говорить пограничникам
63 miki
 
28.05.11
20:01
бритва Оккама за

1 вариант
64 smaharbA
 
28.05.11
20:02
а я спиртику развел, жду когда охладится, счас бедрышки замариновал, отправлю в духовку. Семья смотрит фабрику звезд.
65 smaharbA
 
28.05.11
20:03
(62) пля скунки, точно простите подлеца пагранцы

С Днюхой вас Погранцы !
66 NcSteel
 
28.05.11
20:04
(62) Поздравляю !
67 Rie
 
28.05.11
20:05
(62) С праздником!
68 rs_trade
 
28.05.11
20:05
(55) мне кстати когда такой код встречается, я его не пытаюсь осмыслить как он написан. а начинаю эту строчку переписывать ступенчато.
69 skunk
 
28.05.11
20:10
(64)везет ... моя бухтит как пылесос ... жду когда спать уляжеться ... абы бутылку из заначки достать

(65),(66) и (67)спасибо
70 pwei
 
29.05.11
09:48
только первый вариант. а еще почаще использовать конструкцию ?(,,,).
а то иногда встречаешь:
если чтото=истина тогда
    делаем
иначе
    неделаем
конецесли

1 вариант
71 Alexandr Puzakov
 
29.05.11
10:56
Глупое обсуждение...
72 dimoff
 
29.05.11
11:26
(71) Бессмысленный вопрос - бессмысленное обсуждение.
73 Rie
 
29.05.11
11:28
(70) Не всегда эта конструкция бессмысленна. ЧтоТо может оказаться не определено - и в результате "Невозможно привести к типу Булево".
74 Uragan_a
 
29.05.11
11:30
красивей

1 вариант
75 Дикообразко
 
29.05.11
11:36
часто появляется необходимость, дописать туда еще один оператор и приходится 1 вариант переписывать во 2й...
поэтому 1й надо использовать только тогда, когда уверен, что переписывать не придется

Монопесуально
76 kosts
 
29.05.11
11:51
В данном случае предпочту 2-й

2 вариант
77 AlStorm
 
29.05.11
14:54
Вот не надо таких извращений.

Вы видимо за особо "умными" код на С++ не правили, где можно разойтись в "красивостях" похлеще..

После этого всегда пишу код так, что и идиоту будет понятно.

Как там у Маконелла? "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете"

2 вариант
78 Rie
 
29.05.11
15:00
(77) smaharbA показал в (17), что варианты 1 и 2 - НЕэквивалентны.
После этого спор о том, какой из них "красивее", IMHO, теряет смысл.

Если же речь идёт о выборе

ДатаПроверки = БлаБлаБла;
Отказ = Источник.Дата < ДатаПроверки;

и

ДатаПроверки = БлаБлаБла;
Если Источник.Дата<ДатаПроверки Тогда
   Отказ = Истина;
Иначе
   Отказ = Ложь;
КонецЕсли;

то, IMHO, далеко не факт, что второй вариант - нагляднее. (Чисто зрительно - условие (то есть, существенная часть) теряется в тексте).
79 AlStorm
 
29.05.11
15:05
(78)
Я и не именно об этом коде говорю, а вообще о "сокращения или хитрый ход ради красоты".
Да и возможно переменная Отказ была обнулена перед вызовом:)

Как-то правил код, где переменная была - булево. То есть цикл работал 2 раза, от Ложь к Истине.
Правил код, где ради производительности в цикл запихали эквивалент 500 строчек - одной строкой.
Чем проще - тем всегда лучше.
80 AlStorm
 
29.05.11
15:06
В (79) не "переменная была", а "переменная цикла была"
81 IamAlexy
 
29.05.11
15:08
как правильно в условии писать?

если А=Б тогда....

или

если Б=А тогда...

очень, очень важный и спорный момент.

так же крайне интересно что быстрее работает.. какой вариант
82 Rie
 
29.05.11
15:10
(79) С тем, что "чем проще, тем лучше" (при неявном предположении "оба правильные", естественно) - спору нет.

(Кстати, пример с булевым параметром цикла - как бы не в одной из типовых 1С-овских видел).

Но прикол с примером в (0) - до smaharbA никто (в том числе и я) не заметил ошибки. Это уже говорит о том, насколько читабелен код. IMHO.
83 Rie
 
29.05.11
15:11
(81) Иногда и такое бывает полезно.
Скажем, в C++

if (x=0) // здесь ошибка, но компилятор в лучшем случае лишь предупредит

или

if (0=x) // и получаем кучу матов от компилятора
84 AlStorm
 
29.05.11
15:12
(81)
А какая разница?

А вообще, Маконнелл учит, что сначала проверяется самое очевидное условие:)
85 Сияющий Асинхраль
 
29.05.11
16:19
Я использую по возможности вариант 2, т.к. он читабельней, если к коду возвращаться позднее

2 вариант
86 Злобный монстр
 
29.05.11
16:41
Краткость - сестра таланта!

1 вариант
87 Mitriy
 
29.05.11
17:14
монопенисуально

Монопесуально
88 Поручик
 
29.05.11
17:34
Чем непонятней, тем востребованней.

1 вариант
89 Alexandr Puzakov
 
29.05.11
17:44
(17) это как ее может не быть, если ты ее как минимум только что создал? Твое исключение не наступит никогда.
90 Rie
 
29.05.11
17:50
(89) В данном случае - переменная есть. Это вариант 1 из (0).
А теперь то же самое - но с вариантом 2 из (0).
И?
91 Лефмихалыч
 
29.05.11
17:51
меньше буков

1 вариант
92 Поручик
 
29.05.11
17:55
Ага, (55), (91)
Например, я довольно часто использую подобные конструкции.

   СписокВыбораКонтактногоЛица.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ДолжностьФИО"));


Просто и со вкусом
93 Сияющий Асинхраль
 
29.05.11
17:56
(89) Такие глючки очень часто всплывали, например, на семерке - когда народ в ПриОткрытии писал выражение типа первого из (0), а потом жалился - почему это записанный документ после открытия всегда выдает запрос на сохранение, это же и в восьмерке осталось, так что с такими выражениями надо быть очень осторожным...
94 Лефмихалыч
 
29.05.11
17:59
(92) ну, вот такие-то конструкции вредны. Хотя бы потому, что когда в этой строке происходит рантайм ошибка, ты хер поймешь, в каком месте ее искать. Так что "КЫР сестра ТЫЛ", но без фанатизма
95 Rie
 
29.05.11
18:02
(94) Не согласен. Конструкция полезная и популярная (правда, в более других языках - например, в C#). По сути - это то же самое последовательное выполнение вызовов методов, но без использования дополнительных переменных.
Отладчиком тут действительно пользоваться сложновато. Но это, скорее, проблемы создателей Отладчика. (IMHO, Отладчик как инструмент - нужен в редких случаях; если возникла ошибка - организовать (временно) условия для её анализа вполне возможно).
96 Alexandr Puzakov
 
29.05.11
18:02
(90) а переменная в любом случае будет. В (17) она создается вне конструкции Если.

Я понимаю, что в (0) второй вариант может оказаться неработоспособным, если переменная Отказ не была создана ранее, или не является параметром процедуры/функции.
97 Alexandr Puzakov
 
29.05.11
18:04
(92) очень трудно читается...
98 Rie
 
29.05.11
18:05
(96) Во всех случаях. Даже если переменной Отказ было присвоено значение - вариант 1 его изменяет _всегда_, вариант 2 - _иногда_. Соответственно, эти варианты работают по разному.
Какой из них правильный, а какой нет - зависит от того кода, который написан до этого места и после этого места.
Но один из них - всегда окажется неправильным.
99 Rie
 
29.05.11
18:07
(97) Можно переписать поудобнее:
СписокВыбораКонтактногоЛица.ЗагрузитьЗначения
   (Запрос
       .Выполнить()
       .Выгрузить()
       .ВыгрузитьКолонку("ДолжностьФИО")
   );
100 zak555
 
29.05.11
18:08
сотня
101 Rie
 
29.05.11
18:10
+(99) Это в некотором роде аналог конструкции with в паскале или VB.
(Ну а будь Конфигуратор помощнее - тут прекрасная возможность для оптимизации; более изощрённые компиляторы её и делают).
102 Alexandr Puzakov
 
29.05.11
18:11
(98) я тоже самое и сказал.
103 Rie
 
29.05.11
18:16
(102) Не совсем то же самое. У Вас был перечень случаев, когда второй вариант неработоспособен. Но не обязательно будет работоспособен именно второй вариант (даже в указанных случаях). Кроме того, второй вариант может оказаться неработоспособным и в других случаях (когда переменная Отказ будет определена). И это будет ещё хуже: ошибку, связанную с неопределённой переменной ловить проще, чем ошибку, связанную с тем, что переменная _почему-то_ имеет не то значение, которое ожидалось.

Тут суть как раз в том, что сравниваются НЕэквивалентные конструкции. И говорить, какая из них лучше/хуже - бессмысленно.
104 Эльниньо
 
29.05.11
18:56
А что лучше:


Если  Тогда
   Если  Тогда
       Если  Тогда
           Если  Тогда
               Если  Тогда
                   Если  Тогда
                       Если  Тогда
                           
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецЕсли;

//или

Если  Тогда
   Продолжить;
КонецЕсли;
// и т.д.
?
105 gae
 
29.05.11
19:03
(0) В первом варианте значение будет присвоено всегда.
Во втором - только при выполнении условия.

В контексте того, что ловим Отказ - 2-ой вариант, а то первым можно и сбросить.

2 вариант
106 1C master
 
29.05.11
19:45
Наглядно, однозначно.

2 вариант
107 Alexandr Puzakov
 
29.05.11
19:48
(103) не видя всего кода бессмысленно говорить об эквивалентности/не эквивалентности.
Если это кусок кода из процедуры ОбработкаПроведения(), ПередНачаломЗаботыСистемы() или еще какой системной процедуры с параметром Отказ, или произвольной процедуры/функции, гарантированно имеющей параметр/переменную Отказ с гарантированным булевым значением, то в обоих случаях получим абсолютно одинаковый результат.

(104) это плохой стиль программирования. Нужно избегать подобных "цепочек" логических условий.
108 Rie
 
29.05.11
19:50
(107) Отнюдь не одинаковый.
Пример - в (33). (Ранее установленное для Отказ значение Истина вариант 1 может сбросить в Ложь - что, скорее всего, неправильно).
109 Rie
 
29.05.11
19:52
+(108) Ну и разговор об эквивалентности/неэквивалентности фрагментов кода отнюдь не бессмысленен. Как раз наоборот - структурное программирование, которым пользуются уже "на автомате" как раз и построено на _отношениях_ между "входом" и "выходом" ("преобразователи предикатов").
110 Alexandr Puzakov
 
29.05.11
20:01
(108) да нет же, в (0), при заранее существующей переменной Отказ с булевым значением, результаты кода будут абсолютно одинаковы, даже если в обоих изменить условие сравнения (но, разумеется, оставить его одинаковым в обоих вариантах)
111 Rie
 
29.05.11
20:07
(110) См. (33).
До выполнения этих фрагментов:
Отказ имеет значение Истина.
После выполнения варианта 1 Отказ получит значение ЛОЖЬ, если Источник.Дата>=ДатаПроверки.
После выполнения варианта 2 при том же условии Отказ будет по прежнему иметь значение Истина.
112 Rie
 
29.05.11
20:09
+(111) Иными словами, в случае, если это - обработчик события, то при варианте 1 если Источник.Дата>=ДатаПроверки, то результаты _предыдущих_ проверок будут в итоге проигнорированы - а это уже ошибка. Причём проявится, скорее всего, не сразу - со всеми вытекающими отсюда очень неприятными последствиями.
113 Alexandr Puzakov
 
29.05.11
21:24
(111) а, ну да. Теперь я понял.
114 Alexandr Puzakov
 
29.05.11
21:27
Во втором варианте не хватает Иначе...
115 Stepa86
 
29.05.11
21:44
я б так сделал: проверка отдельно, обработка результата проверки отдельно

Отказ = Не ДатаКорректна( Источник );

Функция ДатаКорректна( пИсточник )

Возврат пИсточник.Дата >= ПолучитьДатуБлаБлаБла();

КонецФункции
116 Stepa86
 
29.05.11
21:47
+(115) чтобы не тыкали в (111) сразу говорю, что если проверок несколько, то все их выношу в отдельный метод, а присвоение отказу тока единажды происходит