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

03.12.21

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

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

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

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

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

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

А = А + 1;

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

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

 

См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

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

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    8278    artbear    84    

89

Ниндзя-код

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

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    2566    DrAku1a    15    

35

Практическое программирование: когда скорость важнее совершенства

Рефакторинг и качество кода Бесплатно (free)

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

01.04.2024    685    Prepod2003    6    

2

Когда понадобился новый оператор

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

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

18.03.2024    1416    ZhokhovM    4    

4

Когда разработчик платформы не добавил проверку препроцессоров

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

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

18.03.2024    3107    ZhokhovM    4    

9

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

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

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

29.09.2023    2173    1CUnlimited    15    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1629 06.12.21 11:18 Сейчас в теме
(8) почему "скоро"? - это уже наступило сейчас...
об этом как раз статья, имхо
Romkin25; AlexandrN; sergant500; DrAku1a; ASKiselev; ice-net; +6 Ответить
23. muskul 06.12.21 11:26 Сейчас в теме
(20)Вот и непонятно зачем. Неужели те кто "руководит" не понимают что это не нужно, зато пилят непонятных котиков.
25. RustIG 1629 06.12.21 11:32 Сейчас в теме
(23) в части усложнения архитектуры и логики программ спорный вопрос - я бы разделил алгоритмы и методики программирования для конфигураций - для файловых режимов, для клиент-серверных режимов и для веб-клиентов....
сейчас разработчики стараются вместить в одну конфу все технологии, чтобы можно было одну конфу использовать в любом режиме... отсюда и усложнение ...
159. serejkin 29.12.21 21:45 Сейчас в теме
(25) ИМХО сейчас разработчики бесятся с жиру... ибо "горе от ума" проглядывается с каждой новой рев. БСП
после крайнего обновления вообще ошалел от количества "закладок" при этом тайминг выполнения кода увеличилась, а утилизация ресурса сервера просто лишает слов и приличных выражений...
потратили 2 недели и это еще не все чтоб оптимизировать исполняемый код
160. RustIG 1629 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 163 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 163 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 163 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 279 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 4730 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 1805 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. Поручик 4675 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. Трактор 1248 06.12.21 09:06 Сейчас в теме
Разработчики из 1С читают Инфостарт. Минус поставили. Не любят они...
m_aster; sergant500; gucci76; FesenkoA; Lemmonbri; portwein; +6 Ответить
27. RustIG 1629 06.12.21 11:36 Сейчас в теме
33. ixijixi 1805 06.12.21 12:37 Сейчас в теме
(27) Примерно так
Прикрепленные файлы:
teyana; m_aster; FesenkoA; Darklight; shard; +5 Ответить
35. capitan 2484 06.12.21 12:43 Сейчас в теме
(33)Может так ?
Romkin25; METAL; FesenkoA; +3 Ответить
37. ixijixi 1805 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 2484 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 2484 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 2484 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 2484 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 2484 06.12.21 17:30 Сейчас в теме
(68)Ну вот вы ответили на вопрос о выборе пути
95. Трактор 1248 07.12.21 12:01 Сейчас в теме
(69) классный ответ. Тут собрались 1Сники. Это их путь.
Остальным - в горы!
Прикрепленные файлы:
98. capitan 2484 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 1629 06.12.21 11:39 Сейчас в теме
(17) у вас тонкий юмор... не все поймут ваш сарказм...
29. capitan 2484 06.12.21 12:02 Сейчас в теме
(28)Вспоминается...
В кинотеатре. — Врач! В зале есть врач? — Я врач! — Что за фигню нам показывают, коллега?
Мне и не надо чтобы все поняли.
Мне надо чтобы поняли врачи )

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

В принципе это видно и по комментарующим
6 лет на ИС - 0 плюсов
12 лет на ИС - 1 плюс
Поручик; +1 Ответить
44. reset2 17 06.12.21 13:15 Сейчас в теме
(29) самый интересное, что так считают эти самые иксперты, которые наплыли
163. o.nikolaev 213 24.02.23 14:06 Сейчас в теме
(29) А потом начинаешь задавать вопросы "категоричным экспертам с Хабра" и выясняется, внезапно, что кроме понтов никакой экспертностью и не пахнет. Но, экспертно рассуждают про "деревни" и "водителей автобусов". Пусть им в конце-то концов. Всевышний любит разнообразие.
53. dehro 5 06.12.21 16:21 Сейчас в теме
(17)Чё сказать-то хотел?
Что куча вложенных вызовов подпрограмм удел программистов из глухого дальнего села?
54. Yashazz 4730 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 4730 06.12.21 16:33 Сейчас в теме
(36) Я вообще не понимаю, почему люди продолжают писать операторы арифметических операций, когда с 8.3.10 есть нормальные побитовые сдвиги и все бинарные действия! Ну что за пионерство колхозное, аж прям стыдоба.
CratosX; Slava.62.ru; FesenkoA; +3 Ответить
105. Alxby 1148 07.12.21 18:06 Сейчас в теме
(55)Не претензии ради, а в качестве разминки для ума: как реализовать сложение побитовыми сдвигами и бинарными операциями? и как работать с отрицательными числами (тут вспоминаем про дополнительные и обратные коды)?
41. capitan 2484 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 2484 06.12.21 16:48 Сейчас в теме
(57)Видимо для вас надо обязательно писать САРКАЗМ
64. WorkerPavel 06.12.21 16:53 Сейчас в теме
(41) А как же ваше же
это вам потом пригодится чтобы понять почему ТекстЗапроса = ТекстЗапроса + ... это нехорошо даже в мире 1С
106. Alxby 1148 07.12.21 18:24 Сейчас в теме
(41)нет, это не так интересно), гораздо интереснее i+ = i++ + ++i;
Но причем здесь 1С?
ведь можно вспомнить и
(* 2 2),
и int 20h,
и даже DAD D,
но зачем?
Со статьей, кстати, согласен. Хорошо бы авторам таких "шедевров кода" посчитать трудозатраты на создание и поддержку такого кода, желательно в рублях.
frkbvfnjh; +1 Ответить
108. capitan 2484 07.12.21 18:40 Сейчас в теме
(106)Интереснее

Как тебе такое Илон Маск ?
109. Alxby 1148 07.12.21 18:42 Сейчас в теме
(108)Ну, это больше на внимательность.
110. capitan 2484 07.12.21 18:45 Сейчас в теме
(109)Почему же на внимательность ? Как раз на знания )
112. Alxby 1148 07.12.21 18:55 Сейчас в теме
(110)Ну, тогда можно сказать что и 20 - 10*0.5 = 5!!
113. capitan 2484 07.12.21 18:57 Сейчас в теме
(112)
20 - 10*0.5 = 5!!

5!! ?
Взлетит?
114. Alxby 1148 07.12.21 18:58 Сейчас в теме
(113)Почему нет? Взлетит конечно. 5!! <> (5!)!
116. Alxby 1148 07.12.21 19:05 Сейчас в теме
117. Alxby 1148 07.12.21 19:13 Сейчас в теме
Какая-то ссылка незаметная получилась. Дублирую: https://ru.wikipedia.org/wiki/Двойной_факториал
118. Alxby 1148 07.12.21 19:21 Сейчас в теме
(110)Если интересны задачки для 1С с применением математических знаний, то, в качестве рекламы: https://infostart.ru/1c/articles/1175267/, задачи №4 и №6
119. capitan 2484 07.12.21 20:40 Сейчас в теме
120. Alxby 1148 07.12.21 20:48 Сейчас в теме
(119)Да, спасибо, я видел) Мой комментарий был не только для Вас.
121. tindir 08.12.21 05:02 Сейчас в теме
(110)Вот любите вы, математики, все переусложнить! НАм с 4 классами церковно-приходской это сложна!
starik-2005; +1 Ответить
Оставьте свое сообщение