Каталог решений - Про простой и понятный код

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

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

В наличии

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

Категория:

Описание

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

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

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

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

  А = А + 1;

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

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

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

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

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

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

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

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

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

 

 

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

 

has been added to your cart:
Оформление заказа