Каталог решений - Чистый кот (Clean cat)

Чистый кот (Clean cat)

Чистый кот (Clean cat)

В наличии

От автора легендарного бестселлера «Совершенный кот».

Категория:

Описание

Вступление

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

Статья "Совершенный кот" делала упор на наглядность. Сначала хотел просто опубликовать картинки с котом. Поэтому содержательная часть была небольшая. Текущую статью писал к митапу, но чуть-чуть не успел.

Наш основной "манифест" — группа статей "Соглашения при написании кода" очевидно пересекается с классиками (Steve McConnell, Robert C.Martin) И дело не в общих идеях, а в мелочах: максимальная ширина строки, названия переменных, процедур, количество аргументов процедур и прочее. Уверен, что специалисты, которые ее писали, читали классиков гораздо внимательнее, чем мы. Итак, основной признак плохого кода — не использовать преимущества и тренды современного языка 1С. Что бы я еще хотел найти на ИТС ?

1. Большое расстояние между операторными скобками, большое число вложений.

Функция — КонецФункции, Процедура — КонецПроцедуры

По количеству строк функция должна помещаться на экран, чем меньше тем лучше. О том же пишет Robert C.Martin (Clean code) глава 3, Функции, компактность.

Попытка — КонецПопытки. Не каждый код может дать исключение — зачем помещать все в попытку ?

//Некрасиво
Попытка
	НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
	ЗаполнитьЗначенияСвойств(НовыйДокумент, Источник,"Дата,Номер");
	НовыйДокумент.Записать();
Исключение
	//ЗаписьЖурналаРегистрации(...);
КонецПопытки;	

//Красиво
НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
ЗаполнитьЗначенияСвойств(НовыйДокумент, Источник,"Дата,Номер");
Попытка
	НовыйДокумент.Записать();
Исключение
	//ЗаписьЖурналаРегистрации(...);
КонецПопытки;

Пока — КонецЦикла Меньше уровней вложенности.

//Некрасиво
Пока ВыборкаДетальная.Следующий() Цикл
	
	Если ПроверитьУсловие() Тогда
	
		//многабукв
	
	КонецЕсли; 
	
КонецЦикла;

//Красиво
Пока ВыборкаДетальная.Следующий() Цикл
	
	Если НЕ ПроверитьУсловие() Тогда	
		
		Продолжить;	
	КонецЕсли; 
	
	//многабукв
КонецЦикла;

Если многабукв — очень большой фрагмент кода, то его можно оформить отдельной процедурой

2. Недостаток абстрактного мышления.

Например, вместо функции ЗаполнитьЗначенияСвойств() используют присваивание.

На картинке обычные формы, но на управляемых я видел похожее решение.

Возможно, одинаковые поля лучше выводить в таблицу, как это сделано в настройках СКД ?

3. Памяти Рэя Бойса и Эдгара Кодда посвящается.

Если данные нужны для одного процента документов, то это точно не реквизит документа. Добавьте его в регистр "ЗначенияСвойствОбъектов", добавьте в табличную часть "ДополнительныеСвойства", сделайте отдельный регистр сведений, отдельную табличную часть, в котором будет значение реквизита и ссылка на документ, только не в сам документ и не в общие реквизиты! Особенность современных баз данных — они гораздо эффективнее, когда растут вниз, а не вправо. В СУБД такие горе-реквизиты выглядят так:

Нравится заполнять диск нулями ?

Вопросы из зала ZOOM (после продолжительных аплодисментов):

Вопрос: — Почему такой логотип ?

Ответ: — Кот на логотипе вымытый, то есть чистый.

Вопрос: — Есть код, которым Вы гордитесь ?

Ответ: — Да, есть такой код (десять строк) — парсинг технологического журнала. Описание проблемы можно найти ИТС, задача поставлена более 10 лет назад, а решить ее удалось только в этом году.

Вопрос: — Почему бы не упомянуть про особенные требования к коду в цикле, коду внутри транзакции ?

Ответ: — Это обычные случаи, как правило все знают.

Вопрос: — Что нужно, чтобы код наших программистов был идеальным ?

Ответ: — Прежде всего, нужно договориться внутри команды, "установить правила игры", одинаковые для всех. Что-то вроде устава, в котором прописать конкретные паттерны и антипаттерны ?

Вопрос: — Что главное для программиста ?

Ответ: — Каждая бочка меда должна содержать хотя бы ложку самоиронии. Может, это то что отличает умного человека от заумного ?

Вопрос:  — Ваш любимый мем ?

Ответ:  — Наверное, это "Гарольд сдерживает боль" с подписью "Когда увидел большой кусок квазикода…"

и маленькими буквами "…а потом понял, что ты его написал в прошлом году"

Вопрос: — Ваше любимое изречение Конфуция ?

Ответ: —

"Написать красивый код может каждый.

Настоящее искусство программирования

— развивать существующий квазикод,

чтобы он давал квазирезультаты на квазиданных,

и получать за это настоящую зарплату."

 

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