|
Блочный оператор в одну строку | ☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
trad
15.07.20
✎
12:21
|
Как вы пишете блочные операторы Если, Пока, Для, Попытка и т.п. если в теле всего один исполняемый оператора?
Вариант А: Если А=Б Тогда Возврат; КонецЕсли; Вариант Б: Если А=Б Тогда Возврат; КонецЕсли; |
|||||||
200
Шоколадная страсть
17.07.20
✎
05:20
|
(199) Кроме входных параметров.
|
|||||||
201
Провинциальный 1сник
17.07.20
✎
05:57
|
(67) "не равно на 3 цикла дольше сравнения"
Непонял. И равенство и неравенство - это результат выполнения инструкции вычитания (в варианте cmp, без сохранения результата) и последующего условного перехода по флагу: нулевой или не нулевой результат (jz, jnz). Инструкции jz и jnz эквивалентны в плане быстродействия. |
|||||||
202
Пробел
17.07.20
✎
06:00
|
единообразие в приоритете
Вариант Б |
|||||||
203
rphosts
17.07.20
✎
06:28
|
1.Вариант Б!
Ибо другие варианты ересь! И за другие варианты гнать ссаными тряпками и сраной метлой в ассенизаторы из профессии. Вариант Б |
|||||||
204
vi0
17.07.20
✎
07:04
|
(194) Шоколад не виноват. Пацан к успеху шёл, не получилось, не фартануло
|
|||||||
205
Провинциальный 1сник
17.07.20
✎
07:45
|
(195) В идеале, никакая функция не должна ничего в базе изменять. Технически для этого перед выполнением должен создаваться снапшот базы и состояния сервера, доступный лишь для этой функции. А все изменения должны производиться лишь процедурами.
|
|||||||
206
Полован
17.07.20
✎
07:48
|
(205) А чем процедура отличается от функции, по-вашему?
|
|||||||
207
Провинциальный 1сник
17.07.20
✎
07:55
|
(206) Идеологически или технически? Идеологически очень многим. Функция - это значение. Процедура - это действие. Технически - зависит от языка и среды, в Си например всё функции, но Си это "переносимый ассемблер".
|
|||||||
208
Ненавижу 1С
гуру
17.07.20
✎
08:18
|
||||||||
209
tciban
17.07.20
✎
08:44
|
Нужно делать структурируемый, удобно читаемый код
Вариант Б |
|||||||
210
trad
17.07.20
✎
09:52
|
(207) не возражения ради. Просто уточнить.
Если Процедура - как действие, должна вернуть результат действия, она может же быть функцией? |
|||||||
211
olegves
17.07.20
✎
10:00
|
так нагляднее
Вариант Б |
|||||||
212
Eiffil123
17.07.20
✎
10:11
|
(163) >> 1. Возврат результата из функции должен быть один.
Этот стандарт нигде не соблюдается. Взять хотя бы код на java - там сплошь и рядом несколько возвратов из метода. |
|||||||
213
Eiffil123
17.07.20
✎
10:13
|
(174) ну так не используйте. отключите в своих браузерах запуск JavaScript в знак протеста против языка.
|
|||||||
214
ДенисЧ
17.07.20
✎
10:19
|
(212) Тут мои соседи сплошняком паркуются на газоне. Но это же не повод?
Запустил вчера проверку конфигурации (от 1с) на уг11.4 - 77 тысяч сообщений... И что теперь - писать неправильно? |
|||||||
215
Провинциальный 1сник
17.07.20
✎
10:20
|
(210) Пусть возвращает, через изменения параметров
|
|||||||
216
ДенисЧ
17.07.20
✎
10:20
|
||||||||
217
ДенисЧ
17.07.20
✎
10:22
|
Уг 11.4.8.92, если что
|
|||||||
218
trad
17.07.20
✎
10:31
|
(216) что за инструмент такой?
извините, я просто вчера с дерева слез ) |
|||||||
219
trad
17.07.20
✎
10:32
|
(215) это же чертовски неудобно (
|
|||||||
220
orefkov
17.07.20
✎
11:13
|
(219)
У людей каша в голове, говорят о процедурах-функциях, а на самом деле пытаются о "функциях с побочными эффектами" и "функциях без побочных эффектах". Почему они считают, что в этой парадигме функция с побочными эффектами должна называться "Процедура" и не должна иметь возвращаемого значения - хрен их поймешь. |
|||||||
221
vi0
17.07.20
✎
11:24
|
(207) "Функция - это значение" в математике?
Или откуда такие ограничения? |
|||||||
222
fisher
17.07.20
✎
11:29
|
(220) Вероятно, травматические последствия знакомства с функциональными языками.
|
|||||||
223
Ненавижу 1С
гуру
17.07.20
✎
11:29
|
(220) потому что есть такая парадигма (208)
|
|||||||
224
fisher
17.07.20
✎
11:36
|
Функции без побочных эффектов - это очень гуд и всячески приветствуются. Но очень далеки от догмы.
|
|||||||
225
fisher
17.07.20
✎
11:41
|
Я скорее за то, чтобы запретить процедурам возвращать значения, чем за то, чтобы запретить функциям менять состояние.
|
|||||||
226
Полован
17.07.20
✎
11:44
|
(218) АПК, вроде бы :)
|
|||||||
227
acht
17.07.20
✎
12:05
|
(220) Потому что там каша парадгим, смесь функциональщины, императивности и ООП, приправленные желанием иметь свое неоспоримое мнение. Представь, что будет, когда они услышат про методы объекта, которые возвращают, например, код результата, и при этом изменяют состояние объекта? =)
|
|||||||
228
Провинциальный 1сник
17.07.20
✎
12:49
|
(221) Математическое определение функции знаешь? А процедура - это просто именованная последовательность действий. Давайте не будем только упоминать язык Си и производные.
|
|||||||
229
Провинциальный 1сник
17.07.20
✎
12:51
|
(225) А меня реально бесят функции с императивным именованием типа ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент). К сожалению, такое даже в типовых постоянно встречается. Хотя в стандартах разработки от 1с это не приветствуется.
|
|||||||
230
Ненавижу 1С
гуру
17.07.20
✎
13:10
|
(229) в типовых таких дофига
|
|||||||
231
vde69
17.07.20
✎
13:58
|
По моему вполне нормальные названия:
ПолучитьСуммуЗадолженностиКлиента(Клиент) РасчитатьСуммуЗадолженностиКлиента(Клиент) а вот так уже не очень выглядит СуммаЗадолженностиКлиента() РасчитатьСуммуЗадолженностиКлиента(Клиент) Названия должны учитывать общую стилизацию а не только отражать прямой смысл. |
|||||||
232
Вафель
17.07.20
✎
14:00
|
(231) 1с уже не согласна с тобой
|
|||||||
233
Провинциальный 1сник
17.07.20
✎
14:18
|
(231) Вы не так понимаете. Я о том, когда пишут Задолженность=ПолучитьСуммуЗадолженностиКлиента(Клиент) - то есть именование функции, возвращающей значение, как действия. Если же пишут ПолучитьСуммуЗадолженностиКлиента(Клиент), имея в виду процедуру, которая куда-то там получает сумму задолженности - это нормально.
|
|||||||
234
fisher
17.07.20
✎
15:03
|
(229) Императивному коду - императивные наименования. Аналог Get. Как раз в качестве признака того, что это именно функция и скорее всего без побочных эффектов (ну, по основному ее назначению, по крайней мере). Если существительным, то в выражениях даже не сразу и поймешь, что это название метода а не переменной.
|
|||||||
235
acht
17.07.20
✎
15:05
|
(231) > учитывать общую стилизацию
РассчитатьСуммуЗадолжности(Клиент, СуммаЗадолжности); СуммаЗадолжности = СуммаЗадолженностиКлиента(Клиент); Вот тебе и стилизация |
|||||||
236
vi0
17.07.20
✎
15:16
|
(228) Так ты не ответил на мои вопросы
|
|||||||
237
vi0
17.07.20
✎
15:17
|
(229) а get.. set.. тебя тоже бесят?
|
|||||||
238
vi0
17.07.20
✎
15:32
|
(229) такие именования комфортно читаются, что немаловажно
например в тему из xUnitFor1C конструкция: Ожидаем.Что("Некая строка").ИмеетДлину(12); |
|||||||
239
fisher
17.07.20
✎
15:32
|
В функциональных языках, где функция является основной управляющей структурой и все функции при этом чистые - там да. Там обзывать функции как действия никакого смысла нет в принципе.
|
|||||||
240
Злопчинский
17.07.20
✎
16:06
|
(229) "ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент)."
это вообще бяка. д.б. типа КлиентСуммаЗадолженности(Клиент). . тупо хотя бы для того, чтобы все функции, имеющие отношение к клиенту, лежали "рядом" при выборке названий функций. потому что для нас важна не сумма задолженности вообще (чья?). а конкретная к конкретному объекту. рускавай езык велик и могуч, но лучше если придерживаться "подлежащее-сказуемоле) |
|||||||
241
novichok79
17.07.20
✎
16:44
|
(240) если это 8.3 там есть области для этого. в 7.7 наверное приходится извращаться.
|
|||||||
242
Конструктор1С
17.07.20
✎
16:56
|
(160) значение по-умолчанию можно присвоить и без операторов возврата. А одна точка останова ну такое себе преимущество, ведь большинство ошибок скрываются за логическими ветвлениями, и их нужно проверять в первую очередь, а не конечное значение
|
|||||||
243
Шоколадная страсть
17.07.20
✎
17:17
|
(229) >> А меня реально бесят функции с императивным именованием типа ПолучитьСуммуЗадолженностиКлиента(Клиент), вместо СуммаЗадолженностиКлиента(Клиент).
Я пока в этом сомневаюсь. И тот вариант кажется верным, и другой, в разных ситуациях. Например, если у тебя переменная называется СуммаЗадолженностиКлиента, то по логике функция должна называться ПолучитьСуммуЗадолженностиКлиента. Вот так: Перем СуммаЗадолженностиКлиента = ПолучитьСуммуЗадолженностиКлиента(Клиент); Выглядит логично. С другой стороны, функция с таким именем была бы удобна если забыть про промежуточную переменную: Возврат СуммаЗадолженностиКлиента(Клиент); Какой вариант не правильный, и почему? |
|||||||
244
Смотрящий
17.07.20
✎
17:20
|
(240) По идее вообще должно быть КлиентЗадолженностьСуммаПолучить(Клиент)
|
|||||||
245
vi0
17.07.20
✎
17:20
|
(240) чтобы они лежали рядом должно быть Клиент.СуммаЗадолженности()
|
|||||||
246
Шоколадная страсть
17.07.20
✎
17:29
|
Друзья, с функциями все понятно, чистые это бесспорно хорошо.
А как вы относитесь к условиям внутри чистых функций? А так же к переменным внутри чистых функций? Лично я от них полностью отказался, и увидел что это хорошо. В процедурах на этот принцип пофиг, их ничто не испортит, ибо они и так грязные. А функции стараюсь делать идеальными. |
|||||||
247
Шоколадная страсть
17.07.20
✎
19:26
|
Чотко
|
|||||||
248
Злопчинский
17.07.20
✎
19:46
|
(244)(245) угу, а не тот трэш что есть...
|
|||||||
249
vi0
18.07.20
✎
08:16
|
(246) мы во всем блюдём меру. в секту функциональщиков пока не планируем
|
|||||||
250
Ненавижу 1С
гуру
18.07.20
✎
11:34
|
(246) требуется написать функцию "модуль числа". Как раз ее нет во встроенных функциях. Напиши чтобы она была чистой и без условий
|
|||||||
251
Voronve
18.07.20
✎
14:35
|
(250) Мнэээ Макс(а,-а) не ?
|
|||||||
252
Ненавижу 1С
гуру
18.07.20
✎
15:20
|
(251) хорошо. Напиши тогда Максфй
|
|||||||
253
Злопчинский
18.07.20
✎
15:22
|
(250) Модуль = Число(СтрЗаменить(Строка(Число),"-",""));
- не прокатит? |
|||||||
254
vi0
18.07.20
✎
15:53
|
(253) часто так балуешься на проде?)
|
|||||||
255
1ctube
18.07.20
✎
16:29
|
Вариант Б конечно же. Так удобно, и тому кто пишет и тому кто читает
Вариант Б |
|||||||
256
Злопчинский
18.07.20
✎
16:38
|
(254) ну, модуль за кучу лет я давно не помню чтобы использовал ;-)
и чем тебе в принципе код не нравится? ;-) юзай (251) тогда |
|||||||
257
acht
18.07.20
✎
16:49
|
(250) Ох уж мне эти одинэсники...
Функция МодульЧисла(Число) Результат = Sqrt(Число * Число); Возврат Результат; КонецФункции Устроит |
|||||||
258
acht
18.07.20
✎
16:50
|
? =)
|
|||||||
259
acht
18.07.20
✎
17:05
|
(250) На тебе еще вариант, без возможной потери точности.
Функция МодульЧисла(Число) Тест = Новый Соответствие; Тест.Вставить(Число, Истина); Тест.Вставить(-Число, Ложь); Тест.Вставить(Истина, -Число); Тест.Вставить(Ложь, Число); Результат = Тест[Тест[Число]]; Возврат Результат; КонецФункции |
|||||||
260
Смотрящий
18.07.20
✎
17:09
|
извращенцы
|
|||||||
261
vi0
18.07.20
✎
17:10
|
(257) грубо, есть недостатки
|
|||||||
262
vi0
18.07.20
✎
17:17
|
(259) тестировал хоть? Ох уж мне эти одинэсники...
|
|||||||
263
Злопчинский
18.07.20
✎
18:01
|
(260) ну ты понял, кто пишет типовые на снеговике...
|
|||||||
264
acht
18.07.20
✎
18:35
|
(262) Да, чой-то я с переходом от hashmap загнался и накосячил. Ну, кто ж виноват, что у 1С структуры данных такие корявые? =)
|
|||||||
265
acht
18.07.20
✎
18:36
|
(263) ... написал автор рещения (253)
|
|||||||
266
vi0
18.07.20
✎
18:53
|
(264) вообще соответствие это индекс, а индекс это поиск, а поиск это условие
|
|||||||
267
vi0
18.07.20
✎
18:54
|
(264) ты накосячил, а виновата 1с
|
|||||||
268
acht
18.07.20
✎
19:00
|
(266) А крутится все на процессоре, а там jnz разные, поэтому...
|
|||||||
269
vi0
18.07.20
✎
19:09
|
(268) тут то абстракция самая верхняя, сама 1с
|
|||||||
270
acht
18.07.20
✎
19:14
|
(269) Ой, извини, пожалуйста, сейчас исправлюсь!
...а крутится все на байт-машине 1С, а там проверки разные, поэтому... |
|||||||
271
dot05
18.07.20
✎
20:48
|
Я смотрю некоторые не только Макконнелла не читали, но и стандарты разработки 1с тоже
Вариант Б |
|||||||
272
Злопчинский
18.07.20
✎
22:58
|
(271) если все читать - времени на продакшен не останется...
|
|||||||
273
Шоколадная страсть
19.07.20
✎
05:50
|
(250) Ну модуль числа и так никто не делает через условия. Есть много способов написать в функциональном стиле, тебе уже ответили. Можно даже чисто математически решить.
Придумай другую задачу |
|||||||
274
vi0
19.07.20
✎
10:05
|
(273) твоя ошибка в том, что вместо того чтобы предложить решение какой то насущной проблемы разработки, ты пытаешься протолкнуть просто решение
|
|||||||
275
acht
19.07.20
✎
16:12
|
О, вот отличная иллюстрация использования паттерна "А" из опроса. А так же паттерна отрицания условия при сравнении.
Проверка заполнения реквизитов Чувствуете запах? |
|||||||
276
vi0
19.07.20
✎
19:28
|
(275) запах свежей полиграфии?
|
|||||||
277
Злопчинский
19.07.20
✎
20:13
|
(275) а что не так? просто интересно.
чисто по логике - вроде норм, возвращает Ложь/Истина |
|||||||
278
Cyberhawk
19.07.20
✎
21:52
|
.
Вариант Б |
|||||||
280
Злопчинский
20.07.20
✎
12:20
|
(279) трэш какой-то
|
|||||||
281
fisher
20.07.20
✎
12:41
|
(277) Если не обращать внимание на вероятные ошибки, то как минимум было бы лучше так, ИМХО:
Процедура СообщитьОбОшибке(ТекстОшибки, ПроверяемоеПоле = Неопределено) Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстОшибки; Если ПроверяемоеПоле <> Неопределено Тогда Сообщение.Поле = ПроверяемоеПоле; КонецЕсли; Сообщение.Сообщить(); КонецФункции Функция ПроверкаЗаполнения () ПроверкаПройденаУспешно = Истина; // проверка суммы Если Сумма <= 99999 Тогда ПроверкаПройденаУспешно = Ложь; СообщитьОбОшибке("Неправильно заполнено", Сумма); КонецЕсли; // проверка периода Если ЗначениеЗаполнено(Период) Тогда ПроверкаПройденаУспешно = Ложь; СообщитьОбОшибке("Неправильно заполнено", Период); КонецЕсли; Возврат ПроверкаПройденаУспешно; КонецФункции |
|||||||
282
fisher
20.07.20
✎
12:45
|
Блин. У него вероятно еще и проверка инверсная. Вероятно, правильнее так:
Функция ПроверкаЗаполненияПройдена() ПроверкаПройденаУспешно = Истина; // проверка суммы Если Сумма > 99999 Тогда ПроверкаПройденаУспешно = Ложь; СообщитьОбОшибке("Неправильно заполнено", Сумма); КонецЕсли; // проверка периода Если НЕ ЗначениеЗаполнено(Период) Тогда ПроверкаПройденаУспешно = Ложь; СообщитьОбОшибке("Неправильно заполнено", Период); КонецЕсли; Возврат ПроверкаПройденаУспешно; КонецФункции |
|||||||
283
Конструктор1С
20.07.20
✎
12:59
|
(279) это уже усложнение кода получается. Отказ от условных операторов не должен быть самоцелью
(281) есть же библиотечные функции. Например, ОбщегоНазначенияКлиентСервер.СообщитьПользователю(); |
|||||||
284
hi1C
20.07.20
✎
13:07
|
(275) И где там паттерн А?
|
|||||||
285
fisher
20.07.20
✎
13:46
|
(283) Решил что так нагляднее плюс не факт, что у автора кода БСП стоит.
|
|||||||
286
trad
20.07.20
✎
14:51
|
(284) Иначе Возврат Истина;
|
|||||||
287
TStan
20.07.20
✎
14:53
|
Только Б. А в этом частном случае, думаю, лучше через тернарный ?(,,)
Вариант Б |
|||||||
288
hi1C
20.07.20
✎
16:00
|
(286) и, конечно, использование этого паттерна сломало функцию?
|
|||||||
289
trad
20.07.20
✎
16:59
|
(288) нет, не сломало
|
|||||||
290
acht
20.07.20
✎
17:57
|
(288) Сделало невозможным отладку. Внутрь этой ветки нельзя поставить брекпоийт.
|
|||||||
291
acht
20.07.20
✎
18:04
|
(282) > У него вероятно еще и проверка инверсная
Вооот. Понимание кода с первой попытки не проходит, приходится мучительно и неоднократно перечитывать. Паттерн отрицания условия во всей красе. |
|||||||
292
patria0muerte
20.07.20
✎
18:07
|
Естественно
Вариант Б |
|||||||
293
acht
20.07.20
✎
18:12
|
(291)+
Это на самом деле из той же серии, что и использование отрицания в идентификаторах. Если Не ТоварНеПродан(Номенклатура) Тогда // Успешного чтения |
|||||||
294
Djelf
20.07.20
✎
18:33
|
В 99.99% случаях вариант Б.
Без однострочных конструкций код понимается значительно быстрее. Код после обускаторов тоже читается, но зачем делать обфускакию с своем коде? Вариант Б |
|||||||
295
H A D G E H O G s
20.07.20
✎
18:35
|
Кто пользует вариант А - кхаб.
Пользователям ?() уже разогрели отдельный котел... Вариант Б |
|||||||
296
acht
20.07.20
✎
18:37
|
(295) > котел
В аду для интровертов нет отдельного котла (: |
|||||||
297
H A D G E H O G s
20.07.20
✎
18:39
|
(296) это для хакатона..
|
|||||||
298
Злопчинский
20.07.20
✎
18:54
|
(293) в клюшках есть типовой обфускаторный хрень... я специально пишу в каких-нить хитрых разработках нетповых неочевидных чтоб враги после меня мозг сломали
Если ПустаяСтрока(ЧтотоСтрока)<>0 Тогда //тырыпыры |
|||||||
299
vi0
20.07.20
✎
19:35
|
(293) Если Не ТоварНеПродан(Номенклатура)<>Неопределено Тогда
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |