Про простой и понятный код

03.12.21

Разработка - Рефакторинг и качество кода

Внимание! Данная публикация с большой долей вероятности не добавит ничего нового к Вашим знаниям и Вашему опыту, поэтому если Вы читаете Инфостарт исключительно для целей "прокачки" своих навыков, не тратьте на её чтение своё время и перейдите сразу к следующей!

Пятница, вечер. Сегодня провёл полдня в путешествии отладчиком по коду одной из типовых конфигураций, чтобы найти тот самый крошечный кусочек, который заставляет программу работать "именно вот так", в то время, как хотелось бы чтобы она в этом случае сработала по-другому. Крошечный кусочек кода, малюсенькая правка в нём - и ура, теперь работает как мне нужно! Но потратить полдня на эту задачу?..

Кстати, а как мы вообще тут оказались? Не в смысле как мы оказались на этой планете, а в таких вот обстоятельствах?

Давайте возьмём, например, такую, казалось бы, тривиальную операцию, как инкремент значения переменной. 

Когда-то давным-давно мастера "старой школы" писали код вроде этого:

А = А + 1;

Сейчас, конечно же, кроме "фу, цэ мерзость!" ничего про такой код и сказать нельзя. Но программисты в те далёкие времена не были ещё избалованы многочисленными фреймворками и БСП, поэтому писали как Кнут на душу положит.

Шло время, виски программистов старой школы седели, страницы книжки Макконнелла "Совершенный код" безвозвратно желтели, а прогресс не стоял на месте.
И вот в наши замечательные времена, чтобы выполнить инкремент, уже имеет смысл написать хотя бы что-то вроде этого:

А = ОбщегоНазначения.Инкремент(А);

В общем модуле ОбщегоНазначения разместить функцию:

Функция Инкремент(ИнкрементируемоеЗначение) Экспорт 
	
	Возврат МатематическиеФункцииКлиентСервер.ВыполнитьАрифметическуюОперацию(
				ИнкрементируемоеЗначение,
				1,
				МатематическиеФункцииКлиентСервер.ИдентификаторОперацииСложение()
				);
	
КонецФункции

И, соответственно, в общем модуле МатематическиеФункцииКлиентСервер следующие функции:

Функция ВыполнитьАрифметическуюОперацию(Операнд1, Операнд2, ИдентификаторОперации) Экспорт 
	
	Результат = Неопределено;
	
	Если ИдентификаторОперации = ИдентификаторОперацииСложение() Тогда
		Результат = Операнд1 + Операнд2;
	ИначеЕсли ИдентификаторОперации = ИдентификаторОперацииВычитание() Тогда
		Результат = Операнд1 - Операнд2;
	ИначеЕсли ИдентификаторОперации = ИдентификаторОперацииУмножение() Тогда
		Результат = Операнд1 * Операнд2;
	ИначеЕсли ИдентификаторОперации = ИдентификаторОперацииДеление() Тогда
		Результат = Операнд1 / Операнд2;
	Иначе 
		ВызватьИсключение "Неподдерживаемая операция " + ИдентификаторОперации;
	КонецЕсли; 
	
	Возврат Результат;
	
КонецФункции

Функция ИдентификаторОперацииСложение() Экспорт
	
	Возврат "Сумма";
	
КонецФункции

Функция ИдентификаторОперацииВычитание() Экспорт
	
	Возврат "Вычитание";
	
КонецФункции

Функция ИдентификаторОперацииУмножение() Экспорт
	
	Возврат "Умножение";
	
КонецФункции

Функция ИдентификаторОперацииДеление() Экспорт
	
	Возврат "Деление";
	
КонецФункции

Внимательный читатель может меня упрекнуть, что во-первых, по сравнению с передовыми методиками разработки, в данном примере слишком малое количество вложенных вызов процедур и функций (например, совершенно не используется потенциал общих модулей с суффиксами "Служебный", "ПовтИсп", "Переопределяемый" и т.п.), во-вторых, что параметры в вызываемые функции передаются как позиционные аргументы, хотя логично было бы упаковать их в структуру, преобразовать в строку таблицы значений, поместить во временное хранилище и потом хотя бы пару раз сериализовать-десериализовать из/в xml или json. Ну и наконец, самый очевидный минус - это то, что вызов идёт не через ДлительныеОперации.ВыполнитьВФоне(...)! Ведь пока "хрустит" весь этот код, пользователь должен иметь возможность насладиться анимацией с котиками! Абсолютно с этим согласен. Просто хочу заметить, что это не готовая разработка, а всего лишь иллюстрация идеи, так сказать концепт, сильно упрощённый учебный пример для демонстрации современных тенденций в 1С-программировании. И при этом, хочу заметить, что несмотря на все описанные недостатки, пример всё же вполне рабочий и инкрементирует исправно!

Что нас ждёт в будущем? Скажу честно, я не футуролог. Но судя по общим тенденциям, открывая Конфигуратор (да-да, его родимый, а не эту вечную бету буржуйской EDT) мы скоро увидим что-то вроде:

 

 

P.S. На всякий случай, если вдруг найдутся такие, кто не поймёт: это был САРКАЗМ!

 

См. также

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    1761    1CUnlimited    15    

22

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 2

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Коротко о том, как я перестал быть создателем макаронного кода и непроходимых джунглей методов и модулей. Расскажу о том, что реально применяю на практике с примерами при разработке (а в основном доработке) в типовых конфигурациях 1С. Комментарии очень приветствуются.

27.09.2023    6607    Lemmonbri    136    

34

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 1

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Коротко о том, как я перестал быть создателем макаронного кода и непроходимых джунглей методов и модулей. Расскажу о том, что реально применяю на практике с примерами при разработке (а в основном доработке) в типовых конфигурациях 1С. Комментарии очень приветствуются.

19.09.2023    4046    Lemmonbri    16    

31

5 подходов при доработке конфигурации 1С, чтобы в будущем не было мучительно больно её обновлять

Архитектура Рефакторинг и качество кода Обновление 1С Платформа 1С v8.3 Бесплатно (free)

Нашей компании часто приходится сталкиваться с обновлением конфигураций разной степени переписанности. Какие-то из них обновляются легко, какие-то — не очень. Расскажем о некоторых принципах модификации программы, которые помогут сделать последующий процесс обновления легче. Или тяжелее, если стараться их не соблюдать.

10.08.2023    9283    0    1c-izhtc    37    

22

Задача на ошибки и неоптимальности при проведении приходной накладной

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Задачу эту дают на собеседованиях, видимо, те франчи, которые не в состоянии оценить человека по резюме и в ходе беседы. По идее задачи, подобные этой, должны давать начинающим студентам. Но дают всем подряд. Итак: мои 5 копеек. Критика приветствуется.

11.07.2023    2101    magic1s    32    

10

Тормозит на ровном месте, или на чем может споткнуться PostgreSQL

HighLoad оптимизация Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Прилетела интересная задача с примером, когда одно и то же действие выполняется на MS SQL за 1 минуту и около часа на Postgre SQL 14. Вот и решил поделиться занимательным опытом расследования причин вышеупомянутой проблемы. Ну и посмотреть вскользь на модуль ERP "1С:Хлебобулочное и кондитерское производство".

30.06.2023    3167    zeltyr    15    

14

Нестандартные приемы безопасной разработки и эксплуатации ПО на платформе 1С, категория "18+"

HighLoad оптимизация Рефакторинг и качество кода Администрирование СУБД Бесплатно (free)

Готовы погрузиться в недетское программирование и шКОДИТЬ по-взрослому? О том, как повысить безопасность разработки и эксплуатации ПО через изощренные способы подключения к платформе 1С, на конференции Infostart Event 2022 Saint Petersburg рассказал Юрий Лазаренко.

19.06.2023    2688    TitanLuchs    15    

21
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. reset2 17 03.12.21 17:33 Сейчас в теме
Не ной. Запутанность кода в типовых конфигурациях - увеличивает ценник на программистов.
P.S. На всякий случай, если вдруг найдутся такие, кто не поймёт: это был САРКАЗМ!
silly; Maneki; serejkin; teyana; MaxTolya; oleg-m; sergant500; DrAku1a; FesenkoA; kirabr; programmarket; ~Ponk@~; +12 5 Ответить
2. Leon75 03.12.21 22:10 Сейчас в теме
(1)А содержание десятков пустых функций и процедур в БСП просто написано шрифтом белого цвета.
serejkin; torbeev; sergant500; DrAku1a; Award; ice-net; FesenkoA; San4eZ1C; maxim_1c; ipoloskov; awk; t278; +12 Ответить
8. muskul 06.12.21 09:29 Сейчас в теме
(1)Скоро ценник и сложность повысится настолько что за исправление простой вещи (например что бы упд помещалась на одну страницу надо убрать разделитель строк) будут брать по 10 тысяч, а заказчики крутить у виска и слать куда подальше
Romkin25; sergant500; DrAku1a; ASKiselev; ice-net; Revachol; rusmil; +7 Ответить
20. RustIG 996 06.12.21 11:18 Сейчас в теме
(8) почему "скоро"? - это уже наступило сейчас...
об этом как раз статья, имхо
Romkin25; AlexandrN; sergant500; DrAku1a; ASKiselev; ice-net; +6 Ответить
23. muskul 06.12.21 11:26 Сейчас в теме
(20)Вот и непонятно зачем. Неужели те кто "руководит" не понимают что это не нужно, зато пилят непонятных котиков.
25. RustIG 996 06.12.21 11:32 Сейчас в теме
(23) в части усложнения архитектуры и логики программ спорный вопрос - я бы разделил алгоритмы и методики программирования для конфигураций - для файловых режимов, для клиент-серверных режимов и для веб-клиентов....
сейчас разработчики стараются вместить в одну конфу все технологии, чтобы можно было одну конфу использовать в любом режиме... отсюда и усложнение ...
159. serejkin 29.12.21 21:45 Сейчас в теме
(25) ИМХО сейчас разработчики бесятся с жиру... ибо "горе от ума" проглядывается с каждой новой рев. БСП
после крайнего обновления вообще ошалел от количества "закладок" при этом тайминг выполнения кода увеличилась, а утилизация ресурса сервера просто лишает слов и приличных выражений...
потратили 2 недели и это еще не все чтоб оптимизировать исполняемый код
160. RustIG 996 29.12.21 22:24 Сейчас в теме
(159) все верно, только сегодня запускал оценку производительности при запуске КА 2.4 - нашел все "кислые" алгоритмы - на которые тратится много времени и ресурсов только для того, чтобы открыть конфу (!)
для тестирования своего расширения я 50 раз запустил открытие КА 2.4 повторюсь - для тестирования печатной формы в расширении... и каждый раз у них выполняется ненужный кусок кода по 5 минут
3. 7OH 69 03.12.21 23:28 Сейчас в теме
За ЕДТ отдельный плюс бы поставил.
А так да - всё по сути: чтобы передать соседу по столу соль - надо обязательно выехать из города и уже оттуда вернуться по точному указателю - где, кому, что и когда передать.
silly; Albert_2008; Romkin25; user747979; sergant500; JohnyDeath; DrAku1a; METAL; dabu-dabu; korppinen; Revachol; Areal; Dem1urg; frkbvfnjh; Трактор; mrChOP93; t278; Batman; provadyuga; +19 Ответить
4. cdiamond 233 06.12.21 08:23 Сейчас в теме
Понятно что примеры упрощенные, но пропускать СКД непростительно. Функция ВыполнитьАрифметическуюОперацию должна была выполнятся на SQL сервере с помощью СКД и механизма представлений, что-то вроде ВЫБРАТЬ Результат Из Представление_Операция ГДЕ "Операция" = ИСТИНА
silly; Albert_2008; Romkin25; sergant500; JohnyDeath; frkbvfnjh; tindir; Dementor; ixijixi; itoptimum; +10 Ответить
5. ipoloskov 162 06.12.21 08:47 Сейчас в теме
Сарказм понятен, но когда же в 1С будет оператор А+=1? Чай, не в каменном веке живем. Каждый раз матерюсь, когда приходится писать что-то вроде
ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­ = ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­ + 1;
Да и типизация не помешала бы. Хотя бы опционально (хочешь - указывай, хочешь - нет)
tdml; Feelthis; Артано; unknown181538; korppinen; ice-net; Cерый; Areal; shard; Dementor; itoptimum; +11 Ответить
9. dehro 5 06.12.21 09:36 Сейчас в теме
(5)Длина имени переменной тоже минус. Конечно нужно называть переменные так, чтобы было понятно следующему программисту, но не перегибать палку.
11. portwein 06.12.21 09:48 Сейчас в теме
(9)
но не перегибать палку
разработчики Spring Framework на Java с Вами бы не согласились. Уж они то умеют назвать классы и интерфейсы в 50 - 70 символов.
12. dehro 5 06.12.21 09:54 Сейчас в теме
(11) И что?
Преимущества какие? Код становится трудночитаемым. А иногда даже неверно читаемым.

А так ограничений нет, можно и 150 символов в идентификаторе забодяжить.
Olenevod; Areal; +2 Ответить
111. portwein 07.12.21 18:54 Сейчас в теме
(12)
Преимущества какие?
Это не преимущество. Просто у них выхода нет. В моем понимании 20 - 30 символов, это самый максимум, иначе строка разрастается и взглядом понять ее сложно (а в строке может быть пара переменных и вызов метода).
13. ipoloskov 162 06.12.21 10:13 Сейчас в теме
(9) тут дело даже не в длине переменной, а в потенциальной возможности ошибки. Всегда можно ошибиться и написать
ЗеленыйЧайСМолоком = ЗеленыйЧайБезМолока + 1
Если используется конструкция ЗеленыйЧайСМолоком += 1, то такая ошибка исключена.
15. dehro 5 06.12.21 10:20 Сейчас в теме
(13) Конечно, конечно. Про длинные имена переменных я писал же:
...иногда даже неверно читаемым...


Только вот с инкрементом это никак не связано.
Если боитесь запутаться в именах переменных: напишите функцию в глобальном модуле Инкремент(аЗначение, аДельта=1)

Лёгкий бред, конечно. Но переубедить называть переменные так, чтобы не путаться не получится((
Darklight; +1 Ответить
18. Sashares 34 06.12.21 10:33 Сейчас в теме
(13)
Если используется конструкция ЗеленыйЧайСМолоком += 1, то такая ошибка исключена.

Да бросьте, с чего вдруг ошибка будет исключена? Вы больше эту переменную не используете в коде?
Если не используете, зачем тогда инкремент?
А если используете, то на одно использование меньше, это вообще ни о чем.
Используйте Ctrl+пробел, если у вас есть опасения в потенциальной возможности такой ошибки.
19. ipoloskov 162 06.12.21 11:17 Сейчас в теме
(18) скажем так - ошибка исключена в этой строке
21. Aftee 06.12.21 11:21 Сейчас в теме
(13) Следуя вашей логике, будет такая ошибка:
ЗеленыйЧайБезМолока += 1
Darklight; +1 Ответить
129. oleg-m 10.12.21 07:27 Сейчас в теме
(13) Для этого есть подсветка текущего идентификатора в редакторе кода.
Olenevod; pavlov_dv; +2 Ответить
49. panvartan 06.12.21 16:03 Сейчас в теме
(9) какой смысл, если ПеречислимыеСвойстваОбъектовМетаданных.РежимИспользованияСинхронныхВызововРасширенийПлатформыИВнешн­ихКомпонент
16. 7OH 69 06.12.21 10:29 Сейчас в теме
(5)
ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­

ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­­ = ? + 1;
salt7; user_Andryushka; Dementor; ipoloskov; +4 Ответить
81. mrChOP93 96 07.12.21 05:41 Сейчас в теме
(16) это же подтвержденный баг платформы и в будущих релизах от него должны избавиться, если не ошибаюсь.
90. 7OH 69 07.12.21 10:36 Сейчас в теме
(81) Ой, я вас умоляю )
Паузу допроситься не можем 10-й год.
А тут "баг", который не выложен на трекере.
Плюс, уверен, там на этот "баг" внутри завязаны фундаментальные вычисления (отсыл к острову с вентиляторами).
danjer74; +1 Ответить
93. 7OH 69 07.12.21 10:53 Сейчас в теме
(91) Ааа.
А я ищу на публичном - там этого бага нет.
Зато есть "Зарегистрирована: 20.11.2014" ;)
Ну и хорошо, если не переедет в раздел "не является багом" - они его очень любят
158. serejkin 29.12.21 21:37 Сейчас в теме
(90) какой 10й? мы еще в бородатом 2001 просили Сергея Нуралиева добавить... на что тогда получили ответ "мы подумаем".
как то говориться: "а воз и ныне там"
73. shard 277 06.12.21 21:55 Сейчас в теме
(5)еще по непонятной причине в запросах 1с отсутствуют функции abs и sign... сколько раз уже в типовых куски кода вида
ВЫБОР КОГДА Расчеты.Долг < 0
					ТОГДА -Расчеты.Долг
				ИНАЧЕ Расчеты.Долг
			КОНЕЦ
tdml; ELInfinito; sergant500; 7OH; bilex; +5 Ответить
84. Darklight 32 07.12.21 10:08 Сейчас в теме
(5)Следуя статье автора - я бы просто ввёл функцию, о боже, глобального модуля, о чёрт, с коротким именем "Инк" (зато давно устоявшимся, хотя уже и подзабытым), и инкрементировал ей так как это было ещё до Си - Инк(А); Инк(ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­­);
Например у меня давно есть такие глобальные функции как ЗЗ(Значение,ИгнорироватьПримитивные=Ложь,РежимПустого=0), НЗ(Значение), ЗН(Значение, ЗначениеПоУмолчанию=неопределено,ИгнорироватьПримитивные=Ложь,РежимПустого=0), Лог(Текст, Статус=неопределено, Приоритет=неопределено, Режим=неопределено, Данные=неопределено, Метаданные=неопределено), ОТ(ТипИлиИмяТипа,Длина=неопределено,ТочностьИлиРежим=неопределено,Знак=неопределено) - да читающему может быть поначалу не понятно, но таких функций не много, и они очень сильно ускоряют ввод кода - а с быстрым привыканием и его анализ.
Есть ещё подобны не глобальные, но давно думаю сделать их таковыми
Массив1(ЕдЗначение=неопределено), Свойство(Коллекция, ИмяСвойства, ЗначениеПоУмолчанию=неопределено, РежимПоУмолчанию=0, ДобавлятьВСлучаеОтсутсвия=Ложь), Скопировать(Коллекция, Рекурсивно=Истина), Кешировать(Ключ, ВычислениеЗначенияСтрока), ДополнительныйПараметр(Имя, ЗначениеПоУмолчанию=неопределено, Дата=неопределено, Организация=неопределено, Пользователь=неопределено, Узел=неопределено)
И некоторые другие....
Потому что, очень часто они используются!
Будь язык посовременнее - я бы из забацал как хэлперы/расширители для соответствующих типов, или даже инъекцировал бы в базовые прототипы этих типов!

Ну а хотя бы опциональная типизация да - не помешала бы - но это уже стопудово совсем другой язык выходит - 1С Исполнитель
ipoloskov; +1 Ответить
156. sashocq 193 23.12.21 16:38 Сейчас в теме
(5) Я для себя держу в арсенале набор глобальных функций для более-менее крупных проектов. В том числе глУвеличить(Число, НаСколько = 1). В результате код у меня выглядит так:
глУвеличить(ГармоничнаяПеременнаяСохраненияСостоянияПроцессаПользователя­);
ipoloskov; +1 Ответить
6. Yashazz 4689 06.12.21 08:49 Сейчас в теме
Чтобы понять, какой будет 1С 9.Х, достаточно присмотреться к языку Исполнителя и глянуть вот это https://wonderland.v8.1c.ru/blog/novaya-tekhnologiya-razrabotki-prilozheniy/.
И конфигуратор будет выглядеть примерно так: https://wonderland.v8.1c.ru/upload/medialibrary/637/6378e3412d39efef3a5a6a1d073a8ad5.png
CratosX; RustIG; zqzq; ipoloskov; +4 Ответить
31. ixijixi 1746 06.12.21 12:35 Сейчас в теме
(6) Опять переучиваться =((
Четвертый раз на моей памяти: 7.7 - 8.0 - 8.3, теперь вот это вот всё.
85. Darklight 32 07.12.21 10:10 Сейчас в теме
(31)кто-то ещё припомнить 6.0 и 7.0
vadeem_13; +1 Ответить
154. Поручик 4667 23.12.21 09:46 Сейчас в теме
(85) Я помню не только 6.0, но и один из первых ДОСовских вариантов и даже ТурбоБухгалтер. Макроязык, просто чудо. В последний раз с 6.0 сталкивался в 2006 году, когда поправлял счёт-фактуру у заказчика. Это магазин музыкальных инструментов. Благополучно работает много лет, ни один кризис и пандемия не свалили.
155. Darklight 32 23.12.21 10:25 Сейчас в теме
(154)До 6.0 разве были существенные изменения в ЯП 1С Предприятие - про которую тут речь?
По-моему 6.0 была первой вехой в серии - и вообще первой платформой, получившей название 1С Предприятие. Но допустим... раз сохранили нумерацию с предшествующими платформами с именами 1С Бухгалтерия - то были ли кардинальные изменения в системе "программирования" 1С Бухгалтерии 1.0 - 5.0 у кого-то сохранившиеся в памяти - навряд ли - потому что программирования так как такового то и не было вовсе! Первые зачатки только стали появляться с 1С Предприятие 6.0
7. Трактор 1246 06.12.21 09:06 Сейчас в теме
Разработчики из 1С читают Инфостарт. Минус поставили. Не любят они...
m_aster; sergant500; gucci76; FesenkoA; Lemmonbri; portwein; +6 Ответить
27. RustIG 996 06.12.21 11:36 Сейчас в теме
33. ixijixi 1746 06.12.21 12:37 Сейчас в теме
(27) Примерно так
Прикрепленные файлы:
teyana; m_aster; FesenkoA; Darklight; shard; +5 Ответить
35. capitan 2443 06.12.21 12:43 Сейчас в теме
(33)Может так ?
Romkin25; METAL; FesenkoA; +3 Ответить
37. ixijixi 1746 06.12.21 12:44 Сейчас в теме
(35) Я не смотрел Нашу Рашу (это же она?), так что не могу уловить юмор
38. пользователь 06.12.21 12:45
Сообщение было скрыто модератором.
...
39. пользователь 06.12.21 12:47
Сообщение было скрыто модератором.
...
10. dehro 5 06.12.21 09:43 Сейчас в теме
Почему сарказм? Чистая правда:
Прикрепленные файлы:
tdml; CratosX; Vinzor; ice-net; Romakon92; gucci76; mrChOP93; shard; frkbvfnjh; FesenkoA; Dementor; +11 1 Ответить
22. Aftee 06.12.21 11:23 Сейчас в теме
128. oleg-m 10.12.21 07:12 Сейчас в теме
(10) Функции-константы - популярный и полезный прием в программировании. Что смущает?
Артано; pavlov_dv; +2 Ответить
131. dehro 5 10.12.21 11:02 Сейчас в теме
(128) Динамически изменяемая константа (например, версия библиотеки) это нормально.
Даже можно понять дату изменения параметров учёта.

Функцию Отчет() которая всегда возвращает "Отчет" понять не могу.
135. oleg-m 11.12.21 14:29 Сейчас в теме
(131)
Функцию Отчет() которая всегда возвращает "Отчет" понять не могу.


Заменили литерал на ссылку. Что тут непонятного?
Артано; +1 Ответить
138. Darklight 32 13.12.21 13:57 Сейчас в теме
(135)На самом деле это интересный паттерн. Просто пока в 1С от него толку не много - как он используется. Но в целом - это очень даже мощная практика. Она позволяет как минимум две(три) вещи:
1. Произвести дополнительные операции при получении результата - от логирования и контроля доступа, до каких-то более хитрых операций ветвления. Кстати иногда может быть полезно и для отладки и отслеживания/поиска мест вызова.
2. Произвести подменю объекта - или даже просто произвести конструирование нового объекта, или произвести настройку типового.
То есть в первом случае это что-то типа эмуляции полиморфизма.
Во втором случае - эта фича перерастает в паттерн фабрик-классов.
Но да - без своих классов это дело трудное. Хотя - вот можно обработками, например, эмулировать.
Понятно - что такое вмешательство нужно не всегда и не всем - но когда это понадобится - то всё уже будет готово и не нужно будет перелопачивать весь кода - отсюда вытекает и:
3. Преемственность и прочность структуры кода - если в будущем возвращаемое значение изменится - не нужно будет (лукавлю конечно) переделывать все места применения, но получение нового значения - ведь функцию то они будут вызывать общую. При необходимости тут ветвление-версионирование организовать можно будет.
Причём (если совместимость конфигурации позволяет) - то эти функции можно менять не только напрямую, но в расширениях.
Но это всё в теории (и практике на других платформах программирования) - в 1С всё это далеко не так красиво работает. Но целом в таком подходе ничего плохого нет. Вот был бы ещё полноценный ООП.....
144. oleg-m 14.12.21 08:32 Сейчас в теме
(138) Очень сильно усложняете. Все же просто...

Ссылка вместо литерала полезна, например, при производстве кода:

- позволяет однозначно найти всех потребителей константы (например, командой "Найти использование", вместо глобального поиска по тексту) и, соответственно, найти потребителей текущей подсистемы (библиотеки)

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

- упрощает отладку

...и много чего еще

Этот прием не противоречит правилам текущей вычислительной абстракции (1с платформа), не противоречит промышленной практике использования данной вычислительной машины. На "акробатические номера" это не тянет, в отличии от решений, которые иногда встречаются на этом ресурсе))) Не говоря уже о том, что эта часть относится к стабильному участку программного кода, который практически не зависит от места его эксплуатации. Итого, проще этот участок кода запомнить в голове, чем обсуждать его и разводить демагогии.


Вот был бы ещё полноценный ООП.....


Это уже будет другой продукт, со своей историей (удачной или нет). Будет ли он с такой же рентабельностью для конечного потребителя приносить ему пользу - вопрос очень спорный.
Артано; +1 Ответить
145. Darklight 32 14.12.21 09:47 Сейчас в теме
(144)
Очень сильно усложняете. Все же просто

Всё что Вы написали укладывается в мои постулаты. Да может я их не просто изложил - уж простите - особо не старался, вернее пытался как можно более абстрагироваться от прикладного уровня - к обобщённому.

Это уже будет другой продукт

С Этим не спорю - ООП - никогда не будет в типовой 1С Предприятие 8. Я просто сказал - что ООП XXI века вместе с данным подходом открыл бы поистине колоссальные возможности!

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

ОПП всегда был спорной парадигмой. Но сейчас ООП + функциональное программирование - это основа современного программирования. Фактически наступило перемирие между двумя самыми рьяными противниками - теперь у них симбиоз! Да и тот, не особо "красивый" ООП от Smaltalk до C++ уже почти канул в лету - сейчас в ООП наступила гармониям высокоуровневое упорядочивание.

Да и не стоит говорить, что ООП вообще нет в 1С - он есть ещё с 1С 7.0 - поросто его почти нельзя кастомно расширять - а от этого теряется бОльшая часть всех преимуществ его наличия. Сейчас в других платформах программирования ООП в тренде (как и функциональные аспекты) - было бы опрометчиво не включить его полноценную современную поддержку в новые продукты 1С с ЯП - так эти продукты были бы более понятны и более привлекательны новой волне современных программистов, которые уже со школы изучают ООП, и очень расстраиваются - когда нет его поддержки - к хорошему привыкаешь быстро!

А ещё на ООП базируется АОП (хотя частично можно и без него - и это делается уже в 1С хотя бы на примере Расширений конфигурации) - полноценного аспектного программирования очень нехватает в 1С Предприятие - это сильно упростило интеграционные моменты, модификацию и сопровождение модифицированного "типового" программного кода и метаданных.

Но ООП, конечно, не панацея - нужно и сами типовые конфигурации и библиотеки грамотно выстраивать с его применением. И на курсах прививать преимущества его использования - нужно перестраивать менталитет существующего 1С сообщества - а вот это куда сложнее. Когда человек привыкает ходить на карачках - неимоверно трудно приучить его ходить прямо, и обосновать что так гораздо удобнее и надёжнее!
Ну и ООП - это лишь некоторое удобство по выстраиванию алгоритмов. Само по себе оно 1С Предприятие не превратит в революционную новую платформу (в отличии, например, от параллельного и тем более распределённого программирования например на промисах/тасках).
Тут нужны более кардинальные изменения в принципах построения и интеграции и метаданных, и программного кода, и пользовательского интерфейса.
Поэтому я ратую не за расширение ЯП 1С8 - а за полный переход на новые ЯП, принципиально отличные от нынешнего. Тоже и с метаданными и способом их интеграции друг с другом - но этот будет уже совсем другая платформа!
14. Hans 2 06.12.21 10:18 Сейчас в теме
Программисты горе от ума.
17. capitan 2443 06.12.21 10:31 Сейчас в теме
Вспоминается...
В деревне программистом называют того кто умеет включать компьютер.
Полностью согласен с автором. В принципе лучший стиль программирования это А = А + ААВ + ААБ
Кто вообще использует осмысленные имена переменных, тех надо гнать из программистов.
А взамен набирать водителей автобусов.
У них будут переменные У002УО77 + Х003УМ78
Главное чтобы в глухом далеком селе программисты 1С не грустили, что им логика непонятна из-за большого количества буков.
Кстати с точки зрения не умеющего читать эта статья вообще полная фигня.
Отсюда мораль - надо не буквы писать а смайлики
За это автору и минус
Надо было написать 1С гы гы гы лол и все бы все поняли
Да и компьютеры это бесовское наваждение
Всю бухгалтерию можно спокойно вести на счетах и с налоговой проверкой проблем не будет.
Артано; m_aster; Поручик; tindir; +4 14 Ответить
24. пользователь 06.12.21 11:27
Сообщение было скрыто модератором.
...
26. Hans 2 06.12.21 11:35 Сейчас в теме
(17) Тут вроде посыл об усложнении на ровном месте?
30. capitan 2443 06.12.21 12:09 Сейчас в теме
(26)Не все то, что вы не понимаете, является усложнением.
Кто то не может понять логику андронного коллайдера, а кто то десятичных дробей.
У каждого свой порог вхождения
При этом на ИС есть раздел Курилка, где можно вполне запостить такую статью и собрать бурю оваций
Но никак не Приемы и методы разработки - Практика программирования
И да. Мастера старой школы НИКОГДА не писали А = А + 1
По той простой причине что
1. переменные шли нижним регистром
2. а надо было предварительно объявить и типизировать
3. односимвольные переменные рекомендовались ТОЛЬКО КАК счетчики циклов и для этого были общепринятые буквы, какие попробуйте ответить за х мин
4. было ++а, зачем оно было нужно попробуйте ответить за х мин
это вам потом пригодится чтобы понять почему ТекстЗапроса = ТекстЗапроса + ... это нехорошо даже в мире 1С

А = А + 1 можно было встретить в лабораторных студентов 1 курса идущих в армию

И я не считаю ровным местом проект на котором работает 100+ программистов
Артано; m_aster; Yashazz; +3 1 Ответить
32. Hans 2 06.12.21 12:35 Сейчас в теме
(30) спрошу более прямо. Зачем из а = а + 1 делать Общиймодуль.Инкремент(а).
34. capitan 2443 06.12.21 12:39 Сейчас в теме
(32)Спрошу еще прямее.
Слышали про ООП ?
Что то вроде
public final class Integer
extends Number
implements Comparable<Integer> ?
Кто вам сказал что а это не Справочник.Контрагенты например ?
Поручик; +1 1 Ответить
40. Hans 2 06.12.21 12:51 Сейчас в теме
Ничего об этом не знаю.
45. capitan 2443 06.12.21 13:54 Сейчас в теме
(40)Тогда у вас есть два пути
1. Узнать
2. Примкнуть к автору публикации и до старости бегать накатывать обновления на 1С и костерить программистов 1С
68. Hans 2 06.12.21 17:08 Сейчас в теме
(45)
1. Узнать


Слышали про ООП ?
Что то вроде
public final class Integer
extends Number
implements Comparable<Integer> ?


ни на одних курсах Одинес этого ничего нет. Насколько это нужно? большой ли от этого выхлоп? И какому уровню прошраммиста 1С (Джун, мидл, синьер) эти знания соответствуют?
69. capitan 2443 06.12.21 17:30 Сейчас в теме
(68)Ну вот вы ответили на вопрос о выборе пути
95. Трактор 1246 07.12.21 12:01 Сейчас в теме
(69) классный ответ. Тут собрались 1Сники. Это их путь.
Остальным - в горы!
Прикрепленные файлы:
98. capitan 2443 07.12.21 12:24 Сейчас в теме
(95)Может вы и не обратили внимание, когда регистрировались, но ИС это в принципе ресурс для 1Сников.
140. Darklight 32 13.12.21 14:09 Сейчас в теме
(32)В таком виде смысла особого может и не быть. Хотя.... вы знаете точный тип значения в а? и точно знаете - что а + 1 отработает согласно заложенной логике данной операции?
Кстати, в функции Инкремент несть несменное преимущество - именно в том, что она ФУНКЦИЯ
функция Инк(Знч, Пред=Истина) экспорт
     предЗнч = Знч;
     Знч = Знч + 1;
     возврат ?(Пред<>Ложь,предЗнч,Знч);
КонецФункции
М = Массив(100);
А = ПолучитьСтартовуюПозицию();
Б = 0;
М[Инк(А)] = ПолучитьЗначение(Инк(Б));
М[Инк(А)] = ПолучитьЗначение(Инк(Б));
М[Инк(А)] = ПолучитьЗначение(Инк(Б));
М[Инк(А)] = ПолучитьЗначение(Инк(Б));
М[Инк(А)] = ПолучитьЗначение(Инк(Б));
М[Инк(А)] = ПолучитьЗначение(Инк(Б));

А = ПолучитьСтартовуюПозицию2();
Б = 0;
Пока М[А] = неопределено Цикл
     М[Инк(А)] = ПолучитьЗначение2(Инк(Б));
КонецЦикла;
Показать


Это надуманный пример - но тем не менее - мне кажется он достаточно хорошо отражает суть таких подмен
141. Hans 2 13.12.21 14:14 Сейчас в теме
(140) нельзя использовать выражения функций в параметрах.
142. Darklight 32 13.12.21 14:23 Сейчас в теме
28. RustIG 996 06.12.21 11:39 Сейчас в теме
(17) у вас тонкий юмор... не все поймут ваш сарказм...
29. capitan 2443 06.12.21 12:02 Сейчас в теме
(28)Вспоминается...
В кинотеатре. — Врач! В зале есть врач? — Я врач! — Что за фигню нам показывают, коллега?
Мне и не надо чтобы все поняли.
Мне надо чтобы поняли врачи )

На Хабре люди более категоричны в суждениях.
Там считают что массовый наплыв экспертов в области программирования связан с появлением широкополосного интернета в отдаленных деревнях страны.

В принципе это видно и по комментарующим
6 лет на ИС - 0 плюсов
12 лет на ИС - 1 плюс
Поручик; +1 Ответить
44. reset2 17 06.12.21 13:15 Сейчас в теме
(29) самый интересное, что так считают эти самые иксперты, которые наплыли
163. o.nikolaev 211 24.02.23 14:06 Сейчас в теме
(29) А потом начинаешь задавать вопросы "категоричным экспертам с Хабра" и выясняется, внезапно, что кроме понтов никакой экспертностью и не пахнет. Но, экспертно рассуждают про "деревни" и "водителей автобусов". Пусть им в конце-то концов. Всевышний любит разнообразие.
53. dehro 5 06.12.21 16:21 Сейчас в теме
(17)Чё сказать-то хотел?
Что куча вложенных вызовов подпрограмм удел программистов из глухого дальнего села?
54. Yashazz 4689 06.12.21 16:31 Сейчас в теме
(17) 1С и так в весьма изрядной степени "гы гы гы лол".
103. FesenkoA 57 07.12.21 15:28 Сейчас в теме
(17) Окей, УНФ, типовая, релиза где то начало 2020 года (это на случай если уже там все по-другоому)

ну во-первых 3 обработки подбора номенклатуры в документ (в реализацию, поступление, перемещение) а аткже отдельная (!) общая форма для списания. В этой общей форме список номенклатуры (динамический список), запрос которого переопределяется динамически кодом. В обработке поступления и реализации запрос не перопределяется, в перемещении - не помню.Но помню что после поиска (поле вверху) открывается ДРУГОЙ динамический список. И еще один динамический список с динамическим запросом для характеристик.

Зачем? Вот как без знаний конфы, не помня об этом быстро разобраться в таком коде? Когда работаешь на конечника - выучил и работаешь, а если франч? Сегодня дорабатываешь типовую УНФ, завтра доработанную 2016 года, послезавтра УТ на 8.1, потом КА... Или программист должен знать все версии БСП, и все конфы сделанные на ней?
104. Aftee 07.12.21 16:42 Сейчас в теме
(103)
Вот как без знаний конфы ... разобраться в таком коде?

Легко!
Слышали про ООП ?
Что то вроде
public final class Integer
extends Number
implements Comparable ?

Ну там еще на самом деле куча всякого. В общем, идите накатывать обновления на 1С
122. FesenkoA 57 08.12.21 10:55 Сейчас в теме
(104) Отлично, вместо того чтобы запилить в 1С нормальный ООП, программное создание интерфейсов (метаданных) в том числе и на основании существующих и допилить нормальный полиморфизм - в процедурном языке изгаляются разными фантазиями на тему "а давайте создадим форму настройки полностью программно, вот все остальные конструктором, а одну - программно!" или "а давайте к каждой форме допилим модуль динамического изменения запроса, в 50 формах использовать не будем, а в одной будем, почему так - ну просто) ".
130. oleg-m 10.12.21 07:43 Сейчас в теме
(122) Т.е. ваш бурный полет фантазий на "нормальном ООП" будет проще разобрать?
143. FesenkoA 57 13.12.21 15:12 Сейчас в теме
(130) Можно ООП не использовать, а писать по старинке, но зачем натягивать сову на глобус?)
36. FesenkoA 57 06.12.21 12:44 Сейчас в теме
Вы что, используете математические операции в 1С??!!!!
Какой кошмар!
Мы пошли дальше, у нас есть тремерный массив, где певый массив [i]- это массив простых чисел, второй массив [j] - массив простых чисел, на пересечении [i] [j] третий массив, каждый элемент которого - это результат математических операций (сложение, вычитание, умножение, процент, степень, логарифмирование итд). Все значения проиндексивароны и записаны в регистр сведений, где измерение - хеш, а показатель - индекс операции. Нам достаточно обратиться к этой базе данных с указанными действиями, она найдет хеш такого же действия, и по индексу операции найдет [i] [j] [к] значения.
segatron; FuJluH; ipoloskov; EvgeniyOlxovskiy; pbabincev; tindir; +6 Ответить
55. Yashazz 4689 06.12.21 16:33 Сейчас в теме
(36) Я вообще не понимаю, почему люди продолжают писать операторы арифметических операций, когда с 8.3.10 есть нормальные побитовые сдвиги и все бинарные действия! Ну что за пионерство колхозное, аж прям стыдоба.
CratosX; Slava.62.ru; FesenkoA; +3 Ответить
105. Alxby 1127 07.12.21 18:06 Сейчас в теме
(55)Не претензии ради, а в качестве разминки для ума: как реализовать сложение побитовыми сдвигами и бинарными операциями? и как работать с отрицательными числами (тут вспоминаем про дополнительные и обратные коды)?
41. capitan 2443 06.12.21 12:56 Сейчас в теме
Вспомнилось...

Люди делятся на 8 типов:
1) ++i;
2) i++;
3) i+=1;
4) i=i+1;
5) i:=i+1;
6) inc(i);
7) add eax, 1
8) Что это?
CratosX; Darklight; +2 Ответить
57. dehro 5 06.12.21 16:37 Сейчас в теме
(41) И что тут правильного? Замаскированное нецензурное слово?
Детский сад, младшая группа.
mrChOP93; +1 Ответить
63. capitan 2443 06.12.21 16:48 Сейчас в теме
(57)Видимо для вас надо обязательно писать САРКАЗМ
64. WorkerPavel 06.12.21 16:53 Сейчас в теме
(41) А как же ваше же
это вам потом пригодится чтобы понять почему ТекстЗапроса = ТекстЗапроса + ... это нехорошо даже в мире 1С
106. Alxby 1127 07.12.21 18:24 Сейчас в теме
(41)нет, это не так интересно), гораздо интереснее i+ = i++ + ++i;
Но причем здесь 1С?
ведь можно вспомнить и
(* 2 2),
и int 20h,
и даже DAD D,
но зачем?
Со статьей, кстати, согласен. Хорошо бы авторам таких "шедевров кода" посчитать трудозатраты на создание и поддержку такого кода, желательно в рублях.
frkbvfnjh; +1 Ответить
108. capitan 2443 07.12.21 18:40 Сейчас в теме
(106)Интереснее

Как тебе такое Илон Маск ?
109. Alxby 1127 07.12.21 18:42 Сейчас в теме
(108)Ну, это больше на внимательность.
110. capitan 2443 07.12.21 18:45 Сейчас в теме
(109)Почему же на внимательность ? Как раз на знания )
112. Alxby 1127 07.12.21 18:55 Сейчас в теме
(110)Ну, тогда можно сказать что и 20 - 10*0.5 = 5!!
113. capitan 2443 07.12.21 18:57 Сейчас в теме
114. Alxby 1127 07.12.21 18:58 Сейчас в теме
(113)Почему нет? Взлетит конечно. 5!! <> (5!)!
116. Alxby 1127 07.12.21 19:05 Сейчас в теме
117. Alxby 1127 07.12.21 19:13 Сейчас в теме
Какая-то ссылка незаметная получилась. Дублирую: https://ru.wikipedia.org/wiki/Двойной_факториал
118. Alxby 1127 07.12.21 19:21 Сейчас в теме
(110)Если интересны задачки для 1С с применением математических знаний, то, в качестве рекламы: https://infostart.ru/1c/articles/1175267/, задачи №4 и №6
119. capitan 2443 07.12.21 20:40 Сейчас в теме
(118)Плюсовал уже)