Имя: Пароль:
1C
1С v8
Стиль написания кода
0 В тылу врага
 
26.04.13
13:10
1. Плохо 38% (22)
2. Отлично 22% (13)
3. Пойдет 17% (10)
4. Мне пох 17% (10)
5. Хорошо 5% (3)
Всего мнений: 58

Что вы скажите о стиле кода:

Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;
1 drcrasher
 
26.04.13
13:11
дурдом. если запрос пустой, то Выгрузить()[0] свалится с ошибкой

Мне пох
2 zak555
 
26.04.13
13:11
может проще не запросом, а объектной техникой получить сумму долга ?
3 Волшебник
 
26.04.13
13:12
(1)

Попытка
  Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;
Исключение
  Возврат 0;
КонецПопытки
4 В тылу врага
 
26.04.13
13:13
(1) будем считать, что запрос гарантированно не пуст, например

ВЫБРАТЬ ЕСТЬNULL(СУММА(Сумма),0) КАК СуммаДолга
ИЗ РегистрНакопления.Чтото.Остатки(....)
5 Alex S D
 
26.04.13
13:13
.

Отлично
6 МихаилМ
 
26.04.13
13:13
не вясните профилеровщиком, какой метод ресурсоемкий

Плохо
7 shuhard
 
26.04.13
13:13
(0) руки резать

Плохо
8 В тылу врага
 
26.04.13
13:13
(3) вот попытка тут точно не оправдана
9 Господин ПЖ
 
26.04.13
13:14
(3) ламерюга...
10 GANR
 
26.04.13
13:14
Один оператор - одна строчка!

Плохо
11 Волшебник
 
26.04.13
13:14
(8) Тебя забыли спросить
12 бомболюк
 
26.04.13
13:15
я так конечно не пишу никогда но в общем то

Пойдет
13 Alex S D
 
26.04.13
13:15
(10) нахрена? ты лисп юзал?
14 В тылу врага
 
26.04.13
13:16
(11) это мое мнение, можешь оставаться при своем
15 andreymongol82
 
26.04.13
13:16
(10) бэйсик что ли?
16 jsmith82
 
26.04.13
13:18
Сумма = 0;
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
Сумма = Выборка.Сумма;
КонецЕсли;
Возврат Сумма;

Плохо
17 Maxus43
 
26.04.13
13:18
Даже если работает - то плохо, ибо копрокод. Код должен красив и гармоничен

Плохо
18 le_
 
26.04.13
13:18
ВозвращаемоеЗначение = 0;
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
   Выборка = Результат.Выбрать();
   Выборка.Следующий();
   ВозвращаемоеЗначение = Выборка.СуммаДолга;
КонецЕсли;
Возврат ВозвращаемоеЗначение;
19 Alex S D
 
26.04.13
13:18
(14) свое мнение озвучь... для порядка)
20 Rie
 
26.04.13
13:18
Коротко и понятно.

Отлично
21 Лефмихалыч
 
26.04.13
13:19
(0)  отличный способ сделать плохо
22 Maxus43
 
26.04.13
13:19
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Сумма;
Иначе
Возврат 0;
КонецЕсли;
23 В тылу врага
 
26.04.13
13:19
(16) много букв
24 В тылу врага
 
26.04.13
13:20
(19) по поводу (3)? я озвучил - оператор Попытка неуместен тут
25 Лефмихалыч
 
26.04.13
13:20
хуже только, если на это гогно что-нибудь разделить без проверки на ноль

Плохо
26 Alex S D
 
26.04.13
13:20
(24) по поводу (0)
27 andreymongol82
 
26.04.13
13:20
(0) при таком гм... стиле, есть вероятность ошибик

Плохо
28 Лефмихалыч
 
26.04.13
13:20
(16)  садись, 2
проверку нудно выполнять так
Если Результат.Пустой()
29 Rie
 
26.04.13
13:21
(3) Не факт. Этот код, скорее всего, - лишь часть более общего кода. И в Попытка куда лучше завернуть весь (представляющий законченную операцию) код, чем на каждый фрагмент "попытаться".
30 Necessitudo
 
26.04.13
13:21
Лучше расскажите, как вы комментарии в коде пишите. Прям перед процедурой описываете ее(процедуры) смысл?
31 andreymongol82
 
26.04.13
13:21
(28) Почему?
32 jsmith82
 
26.04.13
13:21
(28) poker face
33 Лефмихалыч
 
26.04.13
13:22
(4)  если запрос на блокировке скопытится, то ты все равно получишь пустотень
34 Rie
 
26.04.13
13:22
Мне кажется - или все действительно считают, что в (0) приведена логически завершённая операция, а не кусочек оной?
35 GANR
 
26.04.13
13:22
(13)(15) Это просто культура программирования.
36 almar
 
26.04.13
13:23
Я всегда так пишу

Отлично
37 Лефмихалыч
 
26.04.13
13:25
(31)  потому, что быстрее и потому, что компания 1С этого требует от прикладных решений
38 NS
 
26.04.13
13:25
Всё зависит от уровня. Для программиста, который будет час вникать что-же делает это строка это слишком перегруженная строка.
Для того кто сразу понимает что он делает - это совершенно нормальный код, вместо того чтоб читать несколько строк достаточно прочитать одну строку кода.
39 В тылу врага
 
26.04.13
13:26
(33) скопытиться запрос, то будет исключение как раз, чего не нужно
40 SherifSP
 
26.04.13
13:26
(0) Cамый оптимальный вариант, на мой взгляд

Выборка = Запрос.Выполнить().Выгрузить();
Если Выборка.Количество() > 0 Тогда
  Возврат Выборка[0].СуммаДолга;
Иначе
  Возврат 0;
КонецЕсли;

Пойдет
41 NS
 
26.04.13
13:26
(10) В этой строчке ровно один оператор. "Возврат"
42 jsmith82
 
26.04.13
13:27
в средах развитого программирования возврат должен происходить как минимум в теле функции, а не в блоке
44 Rie
 
26.04.13
13:27
(42) Э?
45 Rie
 
26.04.13
13:27
(39)  А исключение ты поймаешь "наверху", где реализуется содержательная часть.
46 Лефмихалыч
 
26.04.13
13:28
(38)  если говорить об восьмибитных программистах, которые читают код построчно и компилят в голове, то да. А квалифицированный специалист, чтобы разобраться в принципах функционирования читает бегло блоками и конструкциями, так что пофиг - одна строка будет или 3
47 Lexusss
 
26.04.13
13:28
Красиво, мне нравится.
Ошибок не бывает, если выбирается агрегированная функция без группировки

Отлично
48 Rie
 
26.04.13
13:29
Это в Питоне принято всё, что не попадя, в исключения обёртывать. А у нас тут - не Питон :-)
49 SherifSP
 
26.04.13
13:30
Какой вариант лучше (3) Или (40) ?
50 Rie
 
26.04.13
13:30
(46) Не по фиг. Одна строка - _при прочих равных_ - легче воспринимается.
51 Джинн
 
26.04.13
13:30
Быдлокод

Плохо
52 Rie
 
26.04.13
13:30
(49) Оба хуэйвэй.
53 Rie
 
26.04.13
13:31
(51) Да ну? А в чём именно "быдло"?
54 В тылу врага
 
26.04.13
13:31
(45) про обертывания в попытку я давно создавал тему - про случай, когда все работало без ошибок, но неправильно - большой кусок был в попытке
55 SherifSP
 
26.04.13
13:31
(52) Аргументируйте)
56 rs_trade
 
26.04.13
13:33
(40) я так пишу

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
  Возврат Выборка.СуммаДолга;
Иначе
  Возврат 0;
КонецЕсли;
57 andreymongol82
 
26.04.13
13:34
(37) От оно че. А в типовых таки на Следующий() частенько видется. Таки надо посравнивать на досуге.
Я, кстати, частенько пишу типа такого
Если Отказ Тогда Возврат; КонецЕсли;
Нафига загромождать 3-мя?
58 orefkov
 
26.04.13
13:34
Если платят не за количество строк кода, то

Отлично
59 SherifSP
 
26.04.13
13:35
Если ТС нужно минимум кода и чтобы что то возвращало, тогда возвращай текст запроса%)
60 Полотенчик
 
26.04.13
13:35
(28) зачем специально проверять Результат.Пустой(), а затем брать первый элемент, если выборкой Следующий() уже будет понятно что результат не пустой?

(40) зачем таким образом создавать таблицу значений, функционал которой использоваться не будет?
имхо оптимальнее делать выборку, а не выгрузку

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
  Возврат Выборка.СуммаДолга;
Иначе
  Возврат 0;
КонецЕсли;

Плохо
61 NS
 
26.04.13
13:35
(46) Учитывая что размер экрана ограничен,
и что чтоб разбить этот оператор нужно вводить несколько дополнительных переменных - разделение его на строки сразу снизит читабельность.

Выше было сказано правильно - одна строчка - как правило один оператор (есть исключения, например switch/case - в случае одного оператора, break как правило пишут в той-же строке вторым оператором)

В этой строчке  - один оператор.
"Одна строка - один метод" как предлагается многими в этой ветке - это маразм.
62 Wobland
 
26.04.13
13:35
строк может не быть совсем

Плохо
63 Rie
 
26.04.13
13:36
(55) Попытка - операция, мягко говоря,
а) дорогостоящая;
б) _максирующая_ ошибку (поскольку после неё продолжается нормальное исполнение).
Поэтому в Попытка имеет смысл заворачивать законченные операции (в некотором роде - транзакции).
В (0) - явно не законченная, а промежуточная операция. Поэтому оборачивать её в Попытка - нецензурно (в предположении, что операция в целом - контролируется Попытка или ещё чем).
64 orefkov
 
26.04.13
13:37
+(58)
Естественно, это если запрос правильный, т.е. гарантировано возвращает ровно одну строку.
65 andreymongol82
 
26.04.13
13:37
(60) А так можно:
Возврат ?(Выборка.Следующий(),Выборка.СуммаДолга,0)
66 NS
 
26.04.13
13:37
Забыл проголосовать.
Естественно:

Отлично
67 SherifSP
 
26.04.13
13:38
(63) А (40) в (60) Уже объяснили, но пошел тестировать выгрузить() и выбрать()
68 Rie
 
26.04.13
13:39
(67) А можно пояснить - какая задача решается-то? :-)
69 Alex S D
 
26.04.13
13:40
(68) задача - убить время в пятницу)
70 SherifSP
 
26.04.13
13:41
(68) Оптимизация скорости)
71 ptiz
 
26.04.13
13:42
(0) Часто так делаю.

Отлично
72 NS
 
26.04.13
13:43
(70) Странно, а в (0) вроде шла речь не о скорости и экономии ресурсов, а о стиле и читабельности.
73 Rie
 
26.04.13
13:43
(69) Тогда правильный код
Попытка
   Попытка
        Попытка
            Если Х="время убито" Тогда
                ВызватьИсключение "Ну, звиздец!"
            КонецЕсли;
         Исключение
              Сообщить("Заколебали");
         КонецПопытки;
    Исключение
         Сообщить("Со второго тоже");
    КонецПопытки;
Исключение
    Сообщить("С первого раза не удалось");
КонецПопытки;
74 fisher
 
26.04.13
13:43
(0) Если запрос гарантированно не пуст, то нормально. Я примерно так и делаю обычно. Только возвращаемое выражение все же стараюсь отдельно прописывать, чтоб читабельнее было.
Чаще всего бывает как-то так:
СуммаДолга = 0;
...........
СуммаДолга = Запрос.Выполнить().Выгрузить()[0].СуммаДолга;

Возврат СуммаДолга;

Хорошо
75 Полотенчик
 
26.04.13
13:44
(63) +1
зачем ховнокодом специально провоцировать на ошибку и обрабатывать это исключением, если можно написать нормально?
(67) сам не проверял, но просто логически, таблица значений со своими столбцами, коллекцией столбцов, индексами и пр. должна памяти отжирать больше чем просто выборка.
наверняка, разница мизерная, но и та не в пользу ТЗ
76 live in sky dreams
 
26.04.13
13:46
А сама задача хде?

"СуммаДолга", как я понимаю, подразумевает под собой дебиторку\кредиторку.

Ежели так, то, опять же в зависимости от задачи, наверное вернее будет собрать дебиторов\кредиторов с необходимой аналитикой в запросе. А затем или искать в выборке\таблице или.... х.з. Нужна задача!
77 ssh2006
 
26.04.13
13:46
Порой годно

Отлично
78 rs_trade
 
26.04.13
13:47
(70) о да... работает быстрее на 0.00000000000001 сек
79 fisher
 
26.04.13
13:47
(75) Гы. На однострочной выборке - далеко не факт что мизерная разница будет не в пользу ТЗ. Однострочная запись может перевесить эту мизерную разницу в свою пользу.
80 _Atilla
 
26.04.13
13:49
(3) Вариант лучше.

Если сравнить с кодом С...

Отлично
81 В тылу врага
 
26.04.13
13:50
(76) ну считай, что это некоторая функция, которая на входе получает договор, а на выходе сумму просроченного долга по этому договору, согласно условий договора
82 SherifSP
 
26.04.13
13:52
(78) Если знать все фишки, только тогда можно себя гордо называть специалист)
83 Rie
 
26.04.13
13:52
(81) Вот и показал бы функцию...
А то задал вопрос по висящему в глубоком вакууме оператору...
84 SherifSP
 
26.04.13
13:53
ТекДата = ТекущаяДата();
   Для А = 1 По 10000 Цикл
       ТЗ1 = Выгрузить();
   КонецЦикла;
   Сообщить(ТекущаяДата() - ТекДата);
   
   ТекДата = ТекущаяДата();
   Для А = 1 По 10000 Цикл
       ТЗ2 = Выбрать();
   КонецЦикла;
   Сообщить(ТекущаяДата() - ТекДата);

70
69
85 В тылу врага
 
26.04.13
13:53
(83) так интереснее
86 VladZ
 
26.04.13
13:54
Плохо. Код должен быть не только "коротким и понятным", но и максимально надежным.

Плохо
87 SherifSP
 
26.04.13
13:55
(86) Не всегда надежность может сочетаться с читабельностью
88 SherifSP
 
26.04.13
13:56
+(87) Нужно выбрать или то, или другое)
89 Rie
 
26.04.13
13:56
(86) Не поверишь, но приведенный в (0) код - надёжен на все 100% (а временами - даже на 146%).
90 Полотенчик
 
26.04.13
13:57
(84) я подразумевал не скорость выполнения в секундах, а, в первую очередь, количество оперативки для ТЗ со всеми ее прелестями и выборкой. Это как на Камазе перевозить один листок бумаги.
91 NS
 
26.04.13
13:59
(90) И сколько памяти требуется для хранения ТЗ из одной строки? Тем более что сразу после выполнения оператора память будет освобождена.
92 badboychik
 
26.04.13
14:01
У меня так (когда надо всю таблицу а не поле):

   Результат = Запрос.Выполнить();
   Если Результат.Пустой() Тогда
       Отказ = Истина;
       Сообщить("Не найдены затраты на выпуск полуфабрикатов");
       Возврат Неопределено;
   Иначе
       Возврат Результат.Выгрузить();
   КонецЕсли;

Плохо
93 Полотенчик
 
26.04.13
14:12
(91): (75) "сам не проверял, но просто логически"
94 NS
 
26.04.13
14:14
(93) Просто логически если на переменную нет ссылок, то память высвобождается сборщиком мусора.
95 CoolCat
 
26.04.13
14:16
красивый код все гениально просто

Отлично
96 bruss007
 
26.04.13
14:25
Если только для.

Мне пох
97 mikecool
 
26.04.13
14:27
(4) не факт, что такой запрос вернет хотя бы одну запись
98 mikecool
 
26.04.13
14:27
+97 и вообще - весь код, написанный не мною - г_овно_код!
99 badboychik
 
26.04.13
14:27
Надо в 1С добавить функционального стиля. Особенно функций Map и Reduce не хватает, а ведь с обработкой числовых списков и массивов довольно часто приходится встречаться
100 Alex S D
 
26.04.13
14:28
100
101 В тылу врага
 
26.04.13
14:30
(97) аргументируй ))
102 Бывший адинэсник
 
26.04.13
14:39
(3) "Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;" по всем канонам это моветон..
103 NS
 
26.04.13
14:40
(102) Дашь пример "канона" по которому этот код моветон?
104 megabax
 
26.04.13
14:49
Правльно в 1 сказали, если запрос пустой, то вывалится с ошибкой. Кто так пишет, надо пальцы пообрывать!!!
Надо так:
ТЗ=Запрос.Выполнить().Выгрузить();
если ТЗ.Количество()>0 тогда
  Возврат ТЗ[0].СуммаДолга;
иначе
  //что то делать на случай если запрос пустой
конецесли;

Плохо
105 Alex S D
 
26.04.13
14:50
(104) разуй глаза и читай всю ветку. При условии, что запрос гарантировано не пустой
106 megabax
 
26.04.13
14:51
+104
а еще лучше так
Выборка=Запрос.Выполнить().Выбрать();
если Выборка.Следующий()
  возврат Выборка.СуммаДолга;
иначе
  //что то делать на случай если запрос пустой

конецесли;
107 megabax
 
26.04.13
14:52
105 не может такого быть, что запрос гарантированно не пустой. Все не предусморишь, а элементарная защита от дурака доложна быть.
108 В тылу врага
 
26.04.13
14:54
(107) запрос (4) гарантированно не путой
109 AlexITGround
 
26.04.13
14:55
в (18) уже был правильный ответ и выборку сделал после проверки
110 Вик72
 
26.04.13
14:56
Вы что, угораете??
Правильно писать так:

Возврат Запрос.Выполнить().Выгрузить().Итог("СуммаДолга");
111 megabax
 
26.04.13
14:57
110, ну и так в принципе тоже правильно, но не оптимально, будет доп. время тратить на  подсчет итогов
112 Эмбеддер
 
26.04.13
15:04
Напишешь по-другому - найдется кто-то, который скажет что лучше в одну строку и наоборот

Мне пох
113 Hawk_1c
 
26.04.13
15:04
Плохо.

Плохо
114 mikecool
 
26.04.13
15:05
(101) пустой результат запроса
115 mikecool
 
26.04.13
15:06
(104) а если там больше одной строки? о ужас!!!!
116 В тылу врага
 
26.04.13
15:06
(114) этот в (4) не может быть пустым по определению
117 Бывший адинэсник
 
26.04.13
15:07
(103) вот например как это прописано в проекте samba https://github.com/jkstrick/samba/blob/master/README.Coding#L352
118 В тылу врага
 
26.04.13
15:07
(115) и больше 1 не может быть
119 Эмбеддер
 
26.04.13
15:08
(106) ну тогда уж возврат делать не по иначе, а то бывают такие языки программирования, которые сообщат, что возвращаемое значение не указано

Выборка=Запрос.Выполнить().Выбрать();
если Выборка.Следующий()
  возврат Выборка.СуммаДолга;
конецесли;
//что то делать на случай если запрос пустой
возврат 0;
120 В тылу врага
 
26.04.13
15:09
(119) если есть возврат во всех ветках ветвления, то они не ругаются
121 AlexITGround
 
26.04.13
15:11
зачем вы все выборку делаете до того, как проверите есть там что или нет?

Пойдет
122 rs_trade
 
26.04.13
15:13
(118) из пустых таблиц запрос тоже гарантированно возвращает 1 строку?
123 Вик72
 
26.04.13
15:16
(111)
И ты туда же? Основные затраты ресурсов - это обращение к БД и обмен между сервером-клиентом. "Итог()" даже для ТЗ из 100000 строк - это сотые доли секунды.
124 n0ther
 
26.04.13
15:19
для удобства чтения кода, надо еще и переменные "правильно" называть

Возврат з.Выполнить().Выгрузить()[0].сд;

Плохо
125 organizm
 
26.04.13
15:19
Если НЕ РезультатЗапроса.Пустой() Тогда
...

лучше всегда делать, менее ресурсоемко.
"Выборка"  это все-таки таблица в памяти компьютера,с большим размером Байт, а "РезультатЗапроса.Пустой()" от силы Байт.

Все ничего, когда мало данных, а когда уйма - ахтунг!
Поэтому лучше не привыкать к плохому стилю.

Мне пох
126 jk3
 
26.04.13
15:25
(18) Идеальный вариант с точки зрения скорости и безопасности.
127 rs_trade
 
26.04.13
15:27
(124)

инд = МоиСуперФункции.ПолучитьИндексСтрокиЗапроса();
 
   .......

Возврат з.Выполнить().Выгрузить()[инд].сд;

Плохо
128 JesteR
 
26.04.13
15:32
(3)Если такое выполнится в транзакции, то она отвалится.

Плохо
129 NcSteel
 
26.04.13
15:42
Плохой код.

Плохо
130 fyn
 
26.04.13
15:50
Возврат Запрос.Выполнить().Выгрузить().Итог("СуммаДолга")

уже было?

Пойдет
131 В тылу врага
 
26.04.13
15:55
(122) этот да
132 Karavanych
 
26.04.13
15:57
Нормальный код, однозначно сразу видно что возвращает, читаемо.

автор еще скажи что вот такие штуки надо построчно разворачивать:

etPosition.setText(Integer.toString((Integer.parseInt(cr.getString(nameIdIndex))+1)));

ты по программируй в языках со строгой типизацией и успокойся, еще не такое увидишь.

Хорошо
133 Бывший адинэсник
 
26.04.13
16:04
>etPosition.setText(Integer.toString((Integer.parseInt(cr.getString(nameIdIndex))+1)));
ну если для себя пишешь то можешь не разворачивать, а если кто-то будет сопровождать после тебя. То это некрасиво по отношению к коллегам.
134 Wern
 
26.04.13
16:06
На то чтоб понять что делает код в (0) надо меньше времени, чем на то чтобы понять что делают остальные приведенные тут варианты. А это самое главное, в тех случаях когда оптимизация не критична.

Отлично
135 Бывший адинэсник
 
26.04.13
16:10
(132) вот один из предшественников написал

return(if(persons.disdate=date(0,0,0) or persons.disdate>=date(1,01,2004),
  if(day(servlen.fromdate)>1,if((2004-year(servlen.fromdate)-1)<1,0.00,if((2004-year(servlen.fromdate)-1)<3,1.00,
     if((2004-year(servlen.fromdate)-1)<5,1.5,if((2004-year(servlen.fromdate)-1)<8,1.75,2.00)))),
  if(month(servlen.fromdate)>1,if((2004-year(servlen.fromdate)-1)<1,0.00,if((2004-year(servlen.fromdate)-1)<3,1.00,
     if((2004-year(servlen.fromdate)-1)<5,1.5,if((2004-year(servlen.fromdate)-1)<8,1.75,2.00)))),
  if((2004-year(servlen.fromdate))<1,0.00,if((2004-year(servlen.fromdate))<3,1.00,
     if((2004-year(servlen.fromdate)-1)<5,1.5,if((2004-year(servlen.fromdate)-1)<8,1.75,2.00)))))),
  if(day(servlen.fromdate)>day(persons.disdate),if(month(servlen.fromdate)>month(persons.disdate)-1,
  if((year(persons.disdate)-year(servlen.fromdate)-1)<1,0.00,if((year(persons.disdate)-year(servlen.fromdate)-1)<3,1.00,
  if((year(persons.disdate)-year(servlen.fromdate)-1)<5,1.5,if((year(persons.disdate)-year(servlen.fromdate)-1)<8,1.75,2.00)))),
  if((year(persons.disdate)-year(servlen.fromdate))<1,0.00,if((year(persons.disdate)-year(servlen.fromdate))<3,1.00,
  if((year(persons.disdate)-year(servlen.fromdate))<5,1.5,if((year(persons.disdate)-year(servlen.fromdate))<8,1.75,2.00))))),
  if(month(servlen.fromdate)>month(persons.disdate),if((year(persons.disdate)-year(servlen.fromdate)-1)<1,0.00,
  if((year(persons.disdate)-year(servlen.fromdate)-1)<3,1.00,if((year(persons.disdate)-year(servlen.fromdate)-1)<5,1.5,
  if((year(persons.disdate)-year(servlen.fromdate)-1)<8,1.75,2.00)))),
  if((year(persons.disdate)-year(servlen.fromdate))<1,0.00,if((year(persons.disdate)-year(servlen.fromdate))<3,1.00,
  if((year(persons.disdate)-year(servlen.fromdate))<5,1.5,if((year(persons.disdate)-year(servlen.fromdate))<8,1.75,2.00))))))))

Убивать надо за такое...
136 pumbaEO
 
26.04.13
16:11
(134) что бы вычистить такие участки каленым железом понадобиться потом очень много времени.
137 Иде я?
 
26.04.13
16:14
Программировать по русски...фу какая гадость.
Вы какие паттерны используете ?
138 DexterMorgan
 
26.04.13
16:19
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.СуммаДолга, 0)
139 DexterMorgan
 
26.04.13
16:19
и

Мне пох
140 wowik
 
26.04.13
16:24
на специалиста не сдашь.

Плохо
141 Stella0608
 
26.04.13
16:45
По поводу "много строчек"...
Как вам такое условие?

Если ((Пользователь.СотрФилиала = 1)) и (ТекущийЭлемент().ПринадлежитГруппе(Константа.ГруппаТорговыхМарок) = 0) и (ТекущийЭлемент().ИгнорироватьФильтры=0) Тогда
   Если (((НазваниеНабораПрав() = "Менеджер") или (НазваниеНабораПрав() = "НОП")) и (ТекущийЭлемент().ПринадлежитГруппе(Пользователь.ГруппаКлиентовДляРаботы) = 0) и (ТекущийЭлемент() <> Пользователь.КлиентДляФилиала) и (ТекущийЭлемент() <> Пользователь.ГруппаКлиентовДляРаботы)) или
       (Не((НазваниеНабораПрав() = "Менеджер") или (НазваниеНабораПрав() = "НОП")) и
       (((ТекущийЭлемент().ПринадлежитГруппе(Пользователь.ГруппаКлиентовДляРаботы) = 0) и (ТекущийЭлемент() <> Пользователь.ГруппаКлиентовДляРаботы)) или ((ТекущийЭлемент().Сотрудник.СкладПоУмолчанию.ГруппаСкладов <> Пользователь.СкладПоУмолчанию.ГруппаСкладов) и (ТекущийЭлемент().ЭтоГруппа()=0))))
       и НЕ((РазрешатьВыборСвоейГруппы = 1) и ((НазваниеНабораПрав() = "Менеджер_Розница") или (НазваниеНабораПрав() = "Менеджер_Старший_Розница")) и (ТекущийЭлемент().ПринадлежитГруппе(Пользователь.ГруппаКлиентовДляРаботы) = 1)) Тогда
...

Сейчас пытаюсь переписать в более удобоваримой форме, выходит явно больше строчек + комментарии, чтобы крыша не съехала при чтении условия. :)
142 Stella0608
 
26.04.13
16:46
По теме - то что написано - не айс, но по кр. мере читабельно :).

Мне пох
143 Classic
 
26.04.13
16:46
до тех пор пока не будет пустого результата

Мне пох
144 mikecool
 
26.04.13
16:48
(116) аргументы?
ВЫБРАТЬ ЕСТЬNULL(СУММА(Сумма),0) КАК СуммаДолга
ИЗ РегистрНакопления.Чтото.Остатки(, Номенклатура = "херня какая то")
вернет пустой результат
145 Xatori
 
26.04.13
16:48
Решений тут описали достаточно, и почти каждое имеет право на жизнь, стиль написания кода довольно часто диктуют условия.
Вот пример, надо посчитать колонку некой таблицы, при этом необходимо подтягивать данные из других n-таблиц, какой то из этих таблиц может не быть, у какой то не найдётся нужного значения, а в какой то значение просто нам не подходит и что писать n-раз условия которые по своей сути будут характеризовать отсутствие каких либо данных и возврат 0 или ещё чего то там, проще в Попытку обернуть, отработал хорошо, нет всё равно выгодней чем 100500 проверок понятных только автору.
Сколько людей, столько мнений :)

Хорошо
146 В тылу врага
 
26.04.13
16:51
(144) не поверишь, но нет - будет 1 строка
147 rs_trade
 
26.04.13
16:58
(131) Тогда другой вопрос. Зачем очевидную логику делать не очевидной? Выполнение запроса, и потом очевидная проверка результатов гораздо понятнее же чем, вариант в (0). Я вижу этот код впервые, сразу мысль, вот автор гомнокодер, лезу в запрос проверять, сможет ли он вернуть пустой результат. Убеждаюсь что все ок, но в другом варианте мне бы и не пришлось этого делать.
148 В тылу врага
 
26.04.13
17:00
(147) а ты головой думай, хотя конечно и твое мнение имеет право на жизнь
я не категорично же отстаиваю
149 Wern
 
26.04.13
17:04
(147) чем вариант в (0) не очевиден? Как раз наоборот с первого взгляда понятно что он делает, не нужно думать, а не используются ли где нибудь ниже по коду эти выборки или тз еще раз.
150 almar
 
26.04.13
17:07
Вот классика: функция склонения ФИО. По-моему, гениально

Функция обПадежОдногоСлова(Знач Слово,Знач Падеж=2,Знач Пол="*",ВидСклонения=0) Экспорт
   z5=Найти(Слово,"-");
   z6=?(z5=0,"","-"+обПадежОдногоСлова(Сред(Слово,z5+1,СтрДлина(Слово)-z5+1),Падеж,Пол,ВидСклонения));
   Слово=НРег(?(z5=0,Слово,Лев(Слово,z5-1)));
   z7=Прав(Слово,3);z8=Прав(z7,2);z9=Прав(z8,1);
   z5=СтрДлина(Слово);
   za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
   zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
   zc=Макс(Падеж,-Падеж);
   zd=?(za=4,5,Найти("айяь",z9));
   zd=?((zc=1)или(z9=".")или((ВидСклонения=2)и(Найти("оиеу"+?(Пол="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((ВидСклонения=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(Пол="ч"),2,?(ВидСклонения=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(Пол<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(Слово,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
   ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
   zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(Слово="лев","ьв",?((Найти("аеёийоуэюя",Сред(Слово,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
   zf=?((zd=9)или((ВидСклонения=3)и(Прав(Слово,1)="ы")),Слово,Лев(Слово,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
   Возврат ?(""=Слово,"",?(ВидСклонения>0,ВРег(Лев(zf,1))+?((Падеж<0)и(ВидСклонения>1),".",Сред(zf,2)),zf)+z6);
КонецФункции
151 NS
 
26.04.13
17:12
Вот за такое нужно расстреливать на месте.
152 Ненавижу 1С
 
гуру
26.04.13
17:19
Всем спасибо, поехал я отдыхать на моря, удачи!
153 c00Lo
 
26.04.13
17:42
Каждый дрочит как он хочет =)))

Мне пох
154 zak555
 
26.04.13
17:56
(152) кто тебя разбанил ? о_О
155 Alex S D
 
26.04.13
17:57
(154) вот что пятница животворящая делает...
156 Aprobator
 
26.04.13
18:14
(3) просто фи какое фу.
157 Гобсек
 
26.04.13
18:16
Иногда сам так делаю, но считаю, что надо проверять, чтобы процедура не вывалилась по ошибке.

Пойдет
158 Mafoni
 
26.04.13
19:02
я бы сказал отвратительно

Плохо
159 Волчара2010
 
26.04.13
19:06
(0) буквоед-идеалист?
160 Сияющий Асинхраль
 
26.04.13
19:34
Если не учитывать (1), то нормально, но, сказать честно, лучше бы удостоверится, что при отсутствии строк в запросе програ отработает

Пойдет
161 фобка
 
26.04.13
19:39
писать в одну строчку - продвинутый быдлокод

Плохо
162 Speshuric
 
27.04.13
16:51
Для небольшого одноразового скрипта или редконужной обработки - вполне допустимы такие выражения. Но с точки зрения продуктного кода, лучше не злоупотреблять откровенно лишней выгрузкой в ТЗ.

Пойдет
163 Rie
 
27.04.13
16:53
(162) Ты ж не знаешь, что там в запросе. Может, там "ПЕРВЫЕ 1".
164 Steel_Wheel
 
27.04.13
17:02
(61) >>"Одна строка - один метод" как предлагается многими в этой ветке - это маразм.

Это Code Conventions. Если программист о них не знает, то лио он узнает и рефакторт то, что написал, или на его место приходит человек, знакомый с Code Conventions
165 Torquader
 
27.04.13
17:06
(164) На самом деле - вполне нормально - если все предыдущие процедуры и функции считать не методами, а способами доступа к методу или параметру.
Например, в Visual Basic мы имеем некоторую странность:
Obj.GetCOntroller.GetServiceTable.Run(1)
Выглядит более хорошо, но GetController - это метод, а не поле. Так что в 1С:
Выполнить().Выбрать выглядит вполне приемлемо.
А если кому-то стыдно, когда возникают ошибки, то можно весь код обернуть в попытку - не только выполнить().Выбрать() а вообще всю работу с запросом.
166 NS
 
27.04.13
17:15
(165) Есть простое правило - в одной строке не больше одного оператора.

Насчет методов и вычислений - разбивание на удобные для восприятия порции.
Если для кого-либо три метода (через три точки) тяжело для восприятия, то ИМХО нужно задуматься о смене профессии.
(164) Ссылку дашь? Никогда не было такого правило, что один метод, одна строка. Бред.
Delta.X=Point1.X-Point2.X;
Не нравится так, другой пример
Delta.X=Point1.GetX()-Point2.GetX();
Перепиши с одной точкой в строке.

Некоторых клинит настолько, что методы путают с операторами.
167 Torquader
 
27.04.13
17:25
(166) Таки для интерпретатора всё равно, что методы, что функции, что операторы.
Простая строка Номенклатура.ЕдиницаИзмерения.Коэффициент может вызывать ошибку, если не проверить, что Номенклатура.ЭтоГруппа=Истина
Просто в 1С установили правила названий методов, которые в один экран не всегда помещаются - и если их будет много, то просто неудобно читать.
P.S.
Результат=
 лЗпр.
 Выполнить().
 Выгрузить().
 [0].Кол1;
Вполне удовлетворяет правилу - одна строка - один параметр.
168 NS
 
27.04.13
17:27
(167) Ссылку дай на это правило? Нет такого правила, и никогда не было.
m_is = new BufferedReader(new java.io.InputStreamReader(m_socket.getInputStream()));
Вот это нормальная строка, из примеров JAVA.
Если кто её разбивает - это уже невминяемость. Бзик на почве непонимания разницы между методом и оператором.
Метод, и допустим арифметическая операция - суть одно и тоже. И разбиваются арифметические операции - не по одной опреции в строке, а так чтоб формула была читабельна. И с методами тоже самое.
169 NS
 
27.04.13
17:42
1С это по сути VB
http://msdn.microsoft.com/ru-ru/library/h63fsef3(v=vs.90).aspx
Вот например от Майкрософт. Один оператор (инструкция) в строке - рекомендация есть. Один метод в строке - конечно-же такой рекомендации нет.
170 Torquader
 
27.04.13
17:52
(169) Есть рекомендации, которые остались от языков прошлого уровня - например - в ассемблере по-другому просто не напишешь.
Что касается Си подобных языков, то там конструкции бывают и более сложные, и никто ничего не говорит.
171 NS
 
27.04.13
18:00
(170) Но никто не говорит что одна арифметическая операция в строке, так ведь. Так чего вдруг 1Сников смутило написание в одной строке через три точки?
В (0) абсолютно нормальная конструкция. Нормальней просто не бывает. И как можно сходу не понять что там написано - для меня загадка. И зачем её делить, мне никогда не понять.
172 NS
 
27.04.13
18:02
Dim closeItem As New ToolStripMenuItem( _
   "Close", Nothing, AddressOf ToolStripMenuItem1_Click)
Me.MainMenuStrip.Items.Add(closeItem)

Это пример от Майкрософт, со страницы "Соглашения о написании кода в Visual Basic"

Точно так-же через три точки.
173 NS
 
27.04.13
18:04
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
Та-же фигня, только C#
174 Steel_Wheel
 
27.04.13
18:13
>> (166)  Ссылку дашь? Никогда не было такого правило, что один метод, одна строка. Бред.

Читай, просвещайся.
Java Code Conventions
September 12, 1997
Copyright Information
(c) 1997, Sun Microsystems, Inc. All rights reserved.
2550 Garcia Avenue, Mountain View, California 94043-1100 U.S.A.
175 NS
 
27.04.13
18:14
(174) Я в этой цитате ничего не вижу про один метод в одной строке. Цитату дай.
176 NS
 
27.04.13
18:20
(174) Даже скачал. Зачем врешь-то? Нет там ничего подобного.
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
Один оператор в одной строке - есть.
Один метод в одной строке - естественно и близко ничего к этому нет.
177 Speshuric
 
27.04.13
18:31
(163) Даже если в запросе "первые 1". ТЗ зря создаётся. Но в целом - даже исправлять бы не стал без большой нужды.
178 Rie
 
27.04.13
18:50
(177) Читаемость vs. эффективность. (0) - читаемо. Для запросов, выдающих немного значений - можно пожертвовать эффективностью. (Особенно если рядом стоят МойЭлемент.МойРеквизит.ЕщёОдинРеквизит.НуИУглубимся :-)
179 Mustang
 
27.04.13
18:53
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?((Выборка.Следующий()), Выборка.СуммаДолга, 0);

Пойдет
180 Rie
 
27.04.13
19:14
(179) Да всё пойдёт. В зависимости от задачи.
181 Steel_Wheel
 
27.04.13
20:57
(175), (176) Ты дочитал до 4-ой главы.
Глава 7.1:
182 NS
 
27.04.13
20:57
(181) Дальше, дальше. Где Цитата?
183 Steel_Wheel
 
27.04.13
20:58
7.1 Simple Statements
Each line should contain at most one statement

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html#431

Браузер гугл-хром умееть переводить с английского на русский, если английский не понятен.

Ссылка дана на сайт фирмы Оракл, подразделением которой является Sun Microsystems
184 Steel_Wheel
 
27.04.13
21:00
Т.е. для operator и statement -- одна строчка по соглашению.

Что такое statement объяснять тадо такому великому специалисту?
185 Rie
 
27.04.13
21:00
(183) И чо? По теме - 0 без палочки.
186 NS
 
27.04.13
21:00
(183) (184) Раскрой свою мысль.
Что ты хочешь сказать я никак не могу понять.
187 Rie
 
27.04.13
21:01
Не, ну с NS можете бодаться до посинения :-)
188 NS
 
27.04.13
21:02
Этот пункт как раз о том что в строке должно быть не больше одного оператора.
Где ты видишь несколько операторов в (0)?
Тебе объяснить что такое оператор?
189 Steel_Wheel
 
27.04.13
21:07
(185) NS не знает, что такое statement в ЯВУ. Печаль...

(186) Внимательно читай и ты постигнешь смысл:
http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html#431

(188)
Запрос.Выполнить() // statement 1
Выгрузить() // statement 2
[0].СуммаДолга; // stetement 3
190 NS
 
27.04.13
21:08
(189) Я в шоке. У тебя по ссылке опертор с методом в одной строке. В примере. Ты этого не видишь?
В примере как НУЖНО делать.
191 Steel_Wheel
 
27.04.13
21:10
(190) А что ты хочешь видеть в примере?
Вот соглашение: Each line should contain at most ONE STATEMENT.

Залание домашнее: найди определение что такое statemet. Принимаю ссылки на Оракл/Сан/МСДН/ANSI
192 Rie
 
27.04.13
21:11
Ребятки, а идите на йух. Все оставшиеся в этой ветке прекрасно понимают, что такое statement и с чем его едят. Далее пошла фаллометрия. (Если я не прав - жду аргументированных возражений).
193 NS
 
27.04.13
21:13
statements - синоним русского слова оператор.
В него входит вызов функции (но вложенный вызов функции не противоречит нормальному стилю)
обяъвление переменной (возможно с присваиванием)
управляющие операторы и т.д.

Никогда в жизни написание нескольких методов через точку не было несколькими операторами. А равносильно вложенным вызовам функции. например sin(pow(x,3)) В (0) ровно один оператор - возврат функции значения выражения.
194 NS
 
27.04.13
21:15
(191) Молодец, ты мало того что незнаком с азами программирования, но из-за подмены терминологии у тебя уже вложенные функции типа sin(pow(x,3)) стали запрещенными.
А вызов метода через точку равносилен вызову функции в процедурном программировании.
195 NS
 
27.04.13
21:20
updateSales.setInt(1, e.getValue().intValue());

Откуда эта строчка?
Да естественно с оракла.
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
196 Steel_Wheel
 
27.04.13
21:23
(194) Бу-га-га..
NS ты это про себя. Прямо в точку: ты не знаком с азами программирования.
(195) В туториале уровня advanced ты такого не найдешь ))
Вот, NS -- твой уровень basic. Студент-практикант ))
197 Steel_Wheel
 
27.04.13
21:25
Открою секрет: уровень basic -- это уровень студента или джуниора. Им соглашений можно не придерживаться. Как и индусам
198 NS
 
27.04.13
21:25
if (jrs.getString("SUP_NAME").equals(supplierName)) {
http://docs.oracle.com/javase/tutorial/jdbc/basics/joinrowset.html
Один оператор if <выражение>
Один оператор return <выражение>
Естественно выражение может сожержать и вложенные функции, и вложенные методы. И нигде, ни в каких правилах не написано что это плохо.
199 NS
 
27.04.13
21:27
(196) Мой уровень - призер и участников чемпионатов мира.
И уж поверь, может я не всегда сам пишу красиво, но с соглашениями я уж всяко за 25 лет опыта ознакомился, и не на таком поверхностном уровне как ты.
200 Steel_Wheel
 
27.04.13
21:30
В (194) ты перешел на личности. Не считаю достойным себя спорить с троллем. Слив засчитан

(199) Первый с конца? Охотно верю
201 NS
 
27.04.13
21:31
(200) Ты еще и читать не умеешь.
202 Steel_Wheel
 
27.04.13
21:31
Вообще, когда говорят "Я призер больших и малых театров", прикладывают ссылку на сертификат или скан.
203 Steel_Wheel
 
27.04.13
21:31
(201) С троллями не разговариваю, это был последний пост тебе
204 NS
 
27.04.13
21:34
wiki:Оператор_(программирование)
Инструкция или оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. Программа обычно представляет собой последовательность инструкций.
return <выражение> - это один оператор.
Естественно выражение может иметь вложенные функции и вложенные вызовы методов. Ты даже азов не знаешь. Не знаешь что такое оператор, и что statements - это оператор.
205 NS
 
27.04.13
21:40
(202) NS
Всё есть в личке, в разделе "достижения"
206 anastasia1188
 
27.04.13
21:46
РезультатЗапроса = Выборка.Выполнить().Выгрузить();
РезультатФункции = ?(РезультатЗапроса.Количество()> 0, РезультатЗапроса[0].СуммаДолга, 0);
Возврат РезультатФункции;
207 bolder
 
27.04.13
22:42
(203) Да, прокололся насчет statement , уделал NS тебя, признайся, что ошибался)).

Мне пох
208 Steel_Wheel
 
28.04.13
00:19
(207) Не уделал. Не вижу понимая со стороны NS что такое statement.

Ну раз NS болеет звездной болезнью, то я предлагаю независимый арбитраж. NS, я регаюсь под своим ником на форуме разработчиков и задаю провокационный вопрос насчет кода в нулевом посте и соглашению написания кода. Если комменты в твою пользу -- с меня публичные извинения (такую тему отдельно заведу). Устраивает?
209 Steel_Wheel
 
28.04.13
00:20
*я регаюсь под своим ником  = я регаюсь под ником NS
210 NS
 
28.04.13
00:24
(208) При чем тут звездная болезнь? Ты нахватался вершков по Си и Java, половину не усвоил, половину понял не так как надо. И сразу лезешь со своим определением оператора. Даже не смешно. Это надо-же перепутать выражение с оператором, и обвинить оракл в запрете вложенных вызовов методов!!!
Когда на сайте оракла полно примеров вложенных вызовов.
211 Волчара2010
 
28.04.13
00:28
Пилять, эстеты собрались
212 Волчара2010
 
28.04.13
00:31
> Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;

И что тут страшного?
Разработчик подразумевает, что запрос всегда возвращает хоть одну строку.
Если это так, то все нормально.
213 Steel_Wheel
 
28.04.13
00:39
(210) 10 лет работаю и " половину не усвоил, половину понял не так как надо"? Смешно. Хотя нет, смотрю на тебя и грустно становится
(210) Для тех, кто страдает дизлексией, у Оракла написано что
- statement один на строку
- operator один на строку
- Object.getProperty(..) -- это как раз statement
- Object.publicVariable -- не statement

NS, ты в самом деле боишься проверить меня способом, указанным в (208) и (209)?
214 NS
 
28.04.13
00:41
Прежде чем лезть на какие-то форумы, и что-то спрашивать - неплохо бы уяснить что такое оператор, statement.
И как определить где он начинается и где заканчивается.
Для школьников объяснение - оператор начинается и заканчивается либо операторными скобками, либо точкой с запятой. В Java.
И Вызов нескольких методов через точки - это один оператор.
return <выражение>; - это один оператор. В выражении могут быть и вложенные вызовы. От этого несколько операторов у тебя не станет. И нигде, и никогда вложенные вызовы не считались плохим тоном, и не в каких рекомендациях по написанию красивого кода никогда они не были запрещены.

Есть ограничения по длине выражения, есть ограничения по читабельности выражения. Но никогда не запрещались вызовы через точку. Кучу примеров я тебе привел.

(213) Именно так. Ты 10 лет работаешь, и нифига не усвоил.
215 NS
 
28.04.13
00:54
Каждая команда (оператор) в языке Java должна заканчиваться точкой с запятой.
http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson1.htm
Занятие 1 по Java.
//
Это какого же клина нужно словить, чтоб сказать что в возврате выражения состоящего из вложенного метода через точку - больше одного оператора (statement)?
216 Steel_Wheel
 
28.04.13
01:05
(214), (215) Я тебя понял. Ты напрудил в штанишки. За сим к тебе просьба не лезть в дискуссии к серьезнм людям. Твое мнение не стоит и ломанного гроша
217 Steel_Wheel
 
28.04.13
01:05
Ты копрокодер 80-го левела. Что и требовалось доказать
218 bolder
 
28.04.13
01:12
(217) вот нафлудил то..И все изза Гугла, вывел тебя на 7 Главу Соглашения, где Simple Statement )))
Вот, полюбился, документ Oracle:
<code>
public void updateCoffeeSales(HashMap<String, Integer> salesForWeek)
   throws SQLException {

   PreparedStatement updateSales = null;
   PreparedStatement updateTotal = null;

   String updateString =
       "update " + dbName + ".COFFEES " +
       "set SALES = ? where COF_NAME = ?";

   String updateStatement =
       "update " + dbName + ".COFFEES " +
       "set TOTAL = TOTAL + ? " +
       "where COF_NAME = ?";

   try {
       con.setAutoCommit(false);
       updateSales = con.prepareStatement(updateString);
       updateTotal = con.prepareStatement(updateStatement);

       for (Map.Entry<String, Integer> e : salesForWeek.entrySet()) {
           updateSales.setInt(1, e.getValue().intValue());
           updateSales.setString(2, e.getKey());
           updateSales.executeUpdate();
           updateTotal.setInt(1, e.getValue().intValue());
           updateTotal.setString(2, e.getKey());
           updateTotal.executeUpdate();
           con.commit();
       }
   } catch (SQLException e ) {
       JDBCTutorialUtilities.printSQLException(e);
       if (con != null) {
           try {
               System.err.print("Transaction is being rolled back");
               con.rollback();
           } catch(SQLException excep) {
               JDBCTutorialUtilities.printSQLException(excep);
           }
       }
   } finally {
       if (updateSales != null) {
           updateSales.close();
       }
       if (updateTotal != null) {
           updateTotal.close();
       }
       con.setAutoCommit(true);
   }
}
</code>
219 bolder
 
28.04.13
01:14
(217) надеюсь , насчет statement больше вопросов нет?Урыл тебя NS, урыл...
220 NS
 
28.04.13
01:20
(216)(217) Без комментариев. Хуже программиста словившего клина уж точно ничего на свете быть не может. А уж когда ему в голову взбрело что нельзя в одной строке два метода через точку использовать - это уж вообще полный алес.
dx = Point1.getX() - point2.getX();
У такого горе-программиста станет вдруг запрещенной конструкцией, и всё из-за неумения читать и вникать в написанное. Хоть бы сил хватило на код на сайте оракла посмотреть, где кругом и всюду несколько методов через точку, но и на это ума не хватает.
221 xReason
 
28.04.13
01:21
Попытка он же Try надо использовать только тогда, когда не может проверить значение стандартными средствами
222 NS
 
28.04.13
01:32
Это ссылка на tutorials по Java, азы, без знания которых - языка ты не знаешь.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html
Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution. The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).
До точки с запятой. Один statement.
- Method invocations
statement в себя включает не вызов метода, а вызовЫ методов!
223 NS
 
28.04.13
01:40
А теперь смотрим (189)  Steel_Wheel:
Запрос.Выполнить() // statement 1
Выгрузить() // statement 2
[0].СуммаДолга; // stetement 3

- 10 лет говоришь? Как можно за десять лет не уяснить себе что такое оператор?! Жесть!
224 bolder
 
28.04.13
01:48
(221) Ну не скажи.Try широко используется, но не для чтения одного значения, а всего контекста:
public static void viewTable(Connection con, String dbName)
   throws SQLException {

   Statement stmt = null;
   String query =
       "select COF_NAME, SUP_ID, PRICE, " +
       "SALES, TOTAL " +
       "from " + dbName + ".COFFEES";

   try {
       stmt = con.createStatement();
       ResultSet rs = stmt.executeQuery(query);
       while (rs.next()) {
           String coffeeName = rs.getString("COF_NAME");
           int supplierID = rs.getInt("SUP_ID");
           float price = rs.getFloat("PRICE");
           int sales = rs.getInt("SALES");
           int total = rs.getInt("TOTAL");
           System.out.println(coffeeName + "\t" + supplierID +
                              "\t" + price + "\t" + sales +
                              "\t" + total);
       }
   } catch (SQLException e ) {
       JDBCTutorialUtilities.printSQLException(e);
   } finally {
       if (stmt != null) { stmt.close(); }
   }
}
225 xReason
 
28.04.13
01:53
(224) а это не выпадает из моего контекста.

НО в реальности, этот кусок кода надо переписывать

узкое место только в получение запроса(зактык будет в коннекшене), потом уже можно справиться стандартами методами
226 NS
 
28.04.13
01:58
(225) Это учебный пример oracle :)
http://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html
227 NS
 
28.04.13
02:00
228 xReason
 
28.04.13
02:13
(226) Если Оракал написал, то на это молиться надо? К слову ваша Ява меня никогда не радовала своим стилем
229 xReason
 
28.04.13
02:15
Все зависит от задач, вам а если там будет таблица, где есть часть полей (а другую часть с дефолтом), то нужно вернуть данные или лучше вернуть ошибку?
230 Бывший адинэсник
 
28.04.13
02:28
(212)
>> Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;

>И что тут страшного?

в общем случае это усложняет отладку.
231 bolder
 
28.04.13
02:37
(230) Не усложняет, сумма получается гарантированно)), даже без захода в эту функцию, ее не нужно отлаживать.
232 Steel_Wheel
 
28.04.13
02:56
(226) Учебный для студентов 4-го курса. Это твой уровень.
(219) Не урыл. Он ведь сам не знает. Ты тоже не знаешь, наверное...
(226) И еще один пример студента 4-го курса из серии "Как стать нубом на Джаве"
NS, ты копрокодер 80-уровня потому что
а) не понимаешь разницы между продакшеном и туториалом -- поясню, ты ссылаешься на копрокод для новичков с 4-го курса
б) ты понимаешь, что на спец. форумах меня под твоим ником (читай, тебя) просто закопают -- я бы этому не мешал. Рейтинг -1000 на RSDN тебя бы порадовал
в) ты ремесленник 1-це, который никогда не выходил за рамки своей системы. То, что ты из ховна и пал.. извини, из желудей и спичек мастеришь для себя -- не имеет никакого отношения к реальной жизни

Dixi.
233 NS
 
28.04.13
03:00
(232) Совсем упоротый что-ли?
Тебе определение statement с сайта оракла дали, а ты всё-равно не въезжаешь чем оператор отличается от операции.
234 NS
 
28.04.13
03:03
Горе жава-недопрограммист.
Я то хоть успешно в чемпионатах по программированию выступаю. В пару википедий вписан. Причем никак не на 1С, а на нормальных языках. А тебе базовые сертификаты не получить по одной причине - ты даже основы програмирования, определение оператора не способен усвоить.
235 Steel_Wheel
 
28.04.13
03:06
(234) Я их все получил. А ты -- ссылку в студию, о "виликий" погромист.

И хватит слюной брызгать. Как спец -- твой потолок - junior coder. И ты себе это ставишь в достижение. Я просто ржу
236 Steel_Wheel
 
28.04.13
03:08
(233) Еще раз, пожалуйста.
В твоем определнии написано, что я прав и (0) надо разбивать на 3 строки.

Умник, ты сам себя опускаешь. И с каждым твоим пуокм -- все ниже и ниже
237 Steel_Wheel
 
28.04.13
03:09
NS, ты пукай, не стесняйся...

Но о тебе уже есть четкое представление: ты никогда не пойдешь на публичное обсуждение этого вопроса. Потому что ты тупо боишься, что твое решение сравняют с копрокодом (ты правильно боишься, хочу я тебе сказать -- это копрокод и есть)
238 NS
 
28.04.13
03:11
(236) Читай определение оракла - statement заканчивается точкой с запятой, и может в себя включать вызовы методов.
Одна точка с запятой - один statement.
return object.metod().metod().metod(); - это один оператор, один statement.
239 Steel_Wheel
 
28.04.13
03:11
Кстати, ты можешь иметь какие угодно "награды", если они уровня "Нограда града Забдыщинска в ....", то можешь ими просто подтереться. Котируются награды от MS, Oracle... что у тебя есть из них?
Ничего?
Вали лесом, стажер-копрокодер.
Изучи уже что-нибудь сложнее опы-Одина
240 Steel_Wheel
 
28.04.13
03:12
(238) Увы и ах. Ты не прав. И ты трус. Что мне тебе объяснять, стажер?
241 NS
 
28.04.13
03:13
(237) Любого, за один такой вопрос заминусуют по полной программе. Потому что видимо ты едиснтвенный в мире кто не отличает оператор от операции, и считаешь каждый вызов метода в выражении отдельным оператором. Главное даже читать не умеешь. Ссылку дали. На русскую википедию, на оракл - всё-равно не въезжаешь.
242 Steel_Wheel
 
28.04.13
03:13
NS, ты тут как "знотог" уже оборсался пятикратно. Может, стоит не вонять, или принять мое предложение о дуэли с арбитражем?
243 NS
 
28.04.13
03:14
(239) Придурок, читай внимательно - я в олимпиадах и чемпионатах участвую не на 1С.
244 Steel_Wheel
 
28.04.13
03:15
NS, я третий и последний раз бросаю тебе вызов: умолкни или пусть сообщество нас рассудит!
245 NS
 
28.04.13
03:16
(242) Ладно, с тобой всё понятно. Упорот в хлам, читать не умеешь. В ссылку с сайта оракла въехать не можешь, оператор от операции и метода тоже отличить не можешь. Если честно, я вообще не верю что ты что-либо в жизни на жаве написал.
246 Steel_Wheel
 
28.04.13
03:16
(248) Ну, что сказать NS.
Участие в 4 на школьных олимпиадах -- это круто и показатель какчества
247 NS
 
28.04.13
03:16
(244) Делай ветку под своим ником. Кто-же тебе запрещает? И дай на неё сюда ссылку.
248 Steel_Wheel
 
28.04.13
03:16
(245) NS, Извини ты нуб и опозорился
249 Steel_Wheel
 
28.04.13
03:17
Ты гуманитарий, скорее всего.
250 NS
 
28.04.13
03:17
(246) Чемпионат мира, Голландии, России - это не школьные олимпиады.
251 Steel_Wheel
 
28.04.13
03:17
(250) В чем? В зафейливании? Я верю. Охотно
252 Steel_Wheel
 
28.04.13
03:18
(250) Ну или в 1-це. Тоже верю. Там любое решение катит -- родных нет
253 NS
 
28.04.13
03:18
Интересно, когда и насколько тебя забанят?
254 NS
 
28.04.13
03:19
Чемпионат Голландии по 1С - звучит. :)
Пить меньше надо.
255 Steel_Wheel
 
28.04.13
03:20
(253) Если ты модератор, то это у тебя спрашивать надо. Судя по твоему ЧСВ лет на 10 бан будет
(254) Согласен, не пей столько. А "Чемпионат Голландии по 1с" -- это звучит
256 NS
 
28.04.13
03:20
Statements

Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution. The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).
•Assignment expressions
•Any use of ++ or --
•Method invocations
•Object creation expressions
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html
Повторю ссылку с сайта оракла.
(255) обгадился неуч? Не знаешь что такое оператор? Как тебя на работу взяли?
257 Steel_Wheel
 
28.04.13
03:24
NS, я тебе скронейше напомню, что ты перешел на личности 100 постов назад....

Ты не смог ничего ответить по существу насчет различий operators и statements.

Ты говоришь, что ты велик, и что ты призер черт-знает-чего....

Короче, ты страдаешь дизлексией в самой острой форме. Ты шизофреник -- твоих лже-наград нет либо они не котируются

Ты не обучаем, ибо не приемлешь критику. Даже конструктивную


В общем, мой прогноз: дорабатывай на своем заводике спецом по учету, а потом иди на пенсию. Чтобы твой код никто не видел
258 NS
 
28.04.13
03:25
statement - переводится русским словом Оператор.
operator - переводится русским словом операция.
Тебе ссылку на википедию дали, неуч.
259 Steel_Wheel
 
28.04.13
03:25
(256) Кстати, своей ссылкой ты сам себя "обгадил" =)
260 NS
 
28.04.13
03:28
wiki:Операция_(программирование)
Английское слово operator, соответствующее термину «операция», иногда ошибочно переводят как «оператор». На самом деле (по историческим причинам) русский термин «оператор» обозначает то же, что и «инструкция», которой соответствует английское statement[1]. Путаница усугубилась тем, что в C присваивание и инкремент/декремент являются и операторами, и операциями.
(259) В смысле? Там прямым английским языком сказано что statement - это полное выражение, до точки с запятой. Ты же утверждал, что несколько методов в выражении, это отдельные statement. А я кончено обгадился, тем что с таким неучем как ты общаться в принципе начал.
261 Steel_Wheel
 
28.04.13
03:28
1) The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).

   Assignment expressions
   Any use of ++ or --
   Method invocations
   Object creation expressions
2) 7.1 Simple Statements

Each line should contain at most one statement.

Ты умеешь читать: в твоей ссылке statement -- это любое обращение к методу. В (0) их аж 3. А по Соглашению, их надо делить на строки
262 Steel_Wheel
 
28.04.13
03:29
В общем NS нуб и опозорился )))))
263 Steel_Wheel
 
28.04.13
03:30
(260) Вот, ты нек учишь английский, и из правильных текстов делаешь фиг знает пойми какие выводы. А я с этим 10 лет работаю
264 NS
 
28.04.13
03:31
(261) Ты идиот? В моей ссылке написано что statement это аналог предложения, и продолжается до ";"
И может включать в себе кучу всего, в том числе и вызовы методов. Ты по-английски вообще читать умеешь?
265 NS
 
28.04.13
03:32
Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution. The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).
266 Steel_Wheel
 
28.04.13
03:33
(264) Пожалуйста, переведи фразу
Method invocations
Это фраза про то, где заканчивается ОДИН STATEMENT

Я не буду тебе помогать, найми уже репетитора,о Вилихий
267 Steel_Wheel
 
28.04.13
03:33
в (0) 3 Method Invocation...

NS, ты нуб и опозорился уже в 8-ой раз
268 Steel_Wheel
 
28.04.13
03:34
Из-за уважения к твоим седым патлам, я бы предпочел не разивать тему до абсурда
269 NS
 
28.04.13
03:34
Вызовы методов это переводится. И это перечисление того, что может в себя включать statement.
270 Steel_Wheel
 
28.04.13
03:35
А еще, есть соглашение "трех точек"......
271 Steel_Wheel
 
28.04.13
03:35
(269) Замечательно!!!!!!
Что такое метод?
272 Steel_Wheel
 
28.04.13
03:35
Запрос.Выполнить() -- это метод
273 Steel_Wheel
 
28.04.13
03:36
РезультатЗапроса.Выгрузить() -- это тоже метод
274 NS
 
28.04.13
03:36
(271) Ты больной? В этой фразе написано что stement включается в себя ваыражение, которое заканчивается точкой с запятой, которое может включать в себя вызовы методов.
Вызовы, сколько угодно вызовов до точки с запятой - это один оператор.
275 Steel_Wheel
 
28.04.13
03:37
РезультатЗапрос[0].СуммаДолга -- уже не метод
276 NS
 
28.04.13
03:37
(272) Поздравляю! Ты наконец понял что это метод! А не оператор.
277 NS
 
28.04.13
03:38
Всё что идет до точки с запятой в выражении - это один оператор. Одно предложение, один statement.
278 Steel_Wheel
 
28.04.13
03:38
(277) Epic Fail
279 Steel_Wheel
 
28.04.13
03:39
Когда ты уже прочитаешь Code Conventions?
280 NS
 
28.04.13
03:40
(279) Я то давно прочел. Ты прочитать не в состоянии, так как у тебя даже унарные операции превратились в оператор, и должны выводиться каждая в отдельной строке.
281 Steel_Wheel
 
28.04.13
03:41
(276) Я уже 150 постов  тебе толкую, но до тебя не доходит.. Ты не в области Искуственного Интеллекта имеешь награды?
(274) Это все твоя больная фантазия.
282 NS
 
28.04.13
03:41
Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution. The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).
Это цитата с сайта оракла.
283 NS
 
28.04.13
03:42
Операторы примерно эквивалентны предложениям на естественных языках. Оператор формирует полную единицу выполнения. Следующие типы выражений могут быть превращены в оператор, заканчивая выражение с точкой с запятой (;).
284 Steel_Wheel
 
28.04.13
03:43
(282) Еще раз (261) прочти.
Ты противоречишь сам себе
285 NS
 
28.04.13
03:44
оператор - естественно в оригинале statement.
Любое выражение ты можешь превратить в оператор, завершив его точкой с запятой.
выражение может включать в себе вызовы методов.
286 Steel_Wheel
 
28.04.13
03:44
(283) Ну, ты же понел: могут быть, а могут и не быть. Второй случай -- это твой..

Какой же ты деревяннй
287 NS
 
28.04.13
03:45
(284) Дальше перечисляется что может входить в выражение. Как я могу противоречить сам себе - просто скопировав законченный текст с сайта оракла?
288 Steel_Wheel
 
28.04.13
03:45
(285) Это косяк перевода ))))))))))))))))))))
289 Steel_Wheel
 
28.04.13
03:45
гугл тебе это не переведет ))
290 NS
 
28.04.13
03:45
(286) Да, в опреторе может и не быть вызовов методов.
Но пока нет точки с запятой - оператор не закончился. Это один оператор. На чистом английском языке вроде написано.
291 Steel_Wheel
 
28.04.13
03:46
там не "может", а "есть" -- разницу видишь, ленхфист?
292 NS
 
28.04.13
03:47
(288) Объясни, каким образом ты умудрился десять лет числиться программистом, не зная что такое statement?
293 Steel_Wheel
 
28.04.13
03:47
(290) оператор -- вызов метода. По твоим же данным. Все.
294 Steel_Wheel
 
28.04.13
03:48
(292) Да просто ты живешьв своем мирке, копрокодер. Делаешь никому не нужные вещи. Участвуешь в ничего не значащих конкурсах
295 NS
 
28.04.13
03:48
Путая операцию с оператором, и считаю что каждая операция должна писаться на отдельной строке? Это ведь просто анекдот. Тебя на баш нужно, а не банить. Где Семен Семеныч?
296 NS
 
28.04.13
03:49
(293) Клиника. До свидания, а то я наберусь от тебя опилок в голову, и таким-же как ты стану.
297 Steel_Wheel
 
28.04.13
03:52
(295) (296) Ты слился 200 постов назад.
Кстати, я тебя поздравляю: я озвучу твое мнение под твоим ником на форуме нормальных специалисов, а потом просто буду копировать твои реплики отсюда. Я пропиарю тебя и ты станешь УЗНАВАЕМЫМ


А если серьезно, то ты НИКТО c завышенным ЧСВ.

Вот, скажи, например: что ты делал серьезнее закрытия месяца? Ничего? Я так и думал
298 NS
 
28.04.13
04:12
(297) Закрытие месяца на Java? Круто.
Вообще-то я написал одну из сильнейших в мире шашечных программ
http://tinyurl.com/WorldChessChampionship4AI-2008
Где-то третью по силе в России на момент написания шахматную программу.
http://chessprogramming.wikispaces.com/search/view/Nefedov
Был на первом месте среди тысяч участников в Russian AI code cup, отыграл на первом месте несколько первых этапов codecup.nl - открытый чемпионат Голландии по AI программированию.
http://www.codecup.nl/competitionlist.php

А ты путаешь оператор с операцией, и считаешь что каждую операцию следует писать в отдельной строке :)
299 NS
 
28.04.13
04:19
http://chessprogramming.wikispaces.com/CCCCISC+2008
Занял седьмое место своей шахматной программой в чемпионате СНГ.
Выиграл чемпионат Ленинграда по программированию среди школьников 89/90-го учебного года.
300 NS
 
28.04.13
04:22
(297) А ты всё продолжаешь путать операцию с оператором, и даже не в состоянии прочитать соглашение оракла, ибо считаешь метод - оператором. Как последний нуб :)
301 Туц
 
28.04.13
08:37
Палка о двух концах. Где-то хорошо, где-то плохо.

Мне пох
302 tararam
 
28.04.13
09:32
(224) в яве try используется где надо, и где не надо (в вашем примере не хватает еще нескольких). Ваш пример какой-то студенческий. кому вы собираетесь делать систем.аут.принтлн? консольке? волшебник вообще с попыткой отмочил (может с бодуна): в 1С попытки не работают, это проверено уже миллирад раз.
303 Бывший адинэсник
 
28.04.13
09:36
(231) я сказал в общем случае а не в частности.
304 tararam
 
28.04.13
09:43
(0) а вообше код имеет право на жизнь. как правило, ядро прогаммы пишется под конкретую СУБД с конкретными таблицами. т.е. дефакто, данные поля существуют. поэтому не парься.
305 YV
 
28.04.13
10:20
(0) Считаю что пойдет, но только в том случае, если в результате запроса гарантированно будет минимум одна строка. Иначе это просто быдлокод.

Пойдет
306 Hans
 
28.04.13
10:52
Код из нуля считаю нормальным.

А вот пример того кода который мне не нравится:
Попытка
  Возврат Запрос.Выполнить().Выгрузить()[0].СуммаДолга;
Исключение
  Возврат 0;
КонецПопытки

Не люблю когда много выходов из функции.

Пойдет
307 Wern
 
28.04.13
10:59
(302) Интересно это где попытка не работает? Сколько пользовался всегда и везде отрабатывала как положено.
308 tararam
 
28.04.13
11:14
(307) мдяяяя... No comments.
309 SoulPower
 
28.04.13
11:32
Из результатов голосовалки мне наконец стало понятно откуда такое нехорошее мнение об одинэсниках в сфере программистов.

Отлично
310 vde69
 
28.04.13
11:36
как вариант

Результат = Запрос.Выполнить().Выгрузить().Итог("СуммаДолга");
Возврат Результат;
311 vde69
 
28.04.13
11:40
вообще считаю хорошим тоном для функций должно соблюдатся 2 правила

1. Возврат всегда один и всегда самым последним оператором
2. возвращаемый результат лежит в отдельной переменной
312 tararam
 
28.04.13
11:48
(311) ну наконец-то нрамотный пост. меня, допустим, вырубают возвраты прямо из тела цикла (типовые, кстати, этим очень грешат. ну сделай ты переменную с флагом успешного прохождения цикла, собери все ошибки и выдай. так нет же, глНеПроводитьДокумент под каждым кустом. Руки повыдергивать за такое)
313 pavig
 
28.04.13
12:10
(92) тоже так делаю.
(0) - плохо.

Плохо
314 pavig
 
28.04.13
12:12
(312) если нет никаких сложностей в функции, то почему бы не воспользоваться Возвратом хоть откуда? ускоряет разработку, не усложняет чтение кода...
согласен конечно если функция сложная и возвраты не читаются - тогда - Да, согласен полностью.
315 _Atilla
 
30.04.13
23:02
(300) Тот, кто дает упрямцу совет, сам нуждается в совете. :-)
316 Джордж Вашингтон
 
01.05.13
02:20
Когда-то писал софт, где одной из главных переменных было "подлетное время"... Здесь же: работает или нет...

Отлично