Антидот

22.01.19

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

Необходимое лекарство для тех, кто случайно передозировал чтение статей о хорошем-плохом программировании на 1С.

Предисловие

Скажу сразу. Всех авторов Инфостарта я люблю и уважаю. Написать статью - это большой труд. И я обычно "плюсую" прочитанные мною статьи, даже если не согласен с автором. Я решил написать этот материал не для того, чтобы кого-то уязвить. Я забочусь о наших коллегах, только начинающих свою карьеру. Прочитав очередной труд и увидев много звездочек, они могут подумать, что мысли автора это что-то записанное на изумрудных скрижалях, не меньше. Автор, рассказывающий о том, что программы следует писать слева направо и сверху вниз, кажется им настоящим гуру. Они и не догадываются о том, что статьи подобного рода чаше всего написаны почти такими же начинающими, как и они. Потому что человека с опытом вряд ли может удивить и, тем более, возмутить что-либо в чужом коде.

Я как-то не задумывался об этом, пока не попробовал пошутить с одним из авторов, у которого "накипело". Я выразился примерно в следующем смысле:

"Вот вы обличаете нехорошие практики, а какая у вас самого практика в нехороших практиках? Сами-то этим занимались когда-нибудь?"

Вы не представляете - как он обиделся! И я подозреваю, не потому, что у него нет чувства юмора.

Или вот совсем свежий пример от другого автора. Он рассказывает нам, как некие нехорошие люди пишут программы тяп-ляп и абы как. Его благородная ярость все вскипает и вскипает. И наконец достигает чуть ли не высшей своей точки, когда он сообщает нам, что вот, дескать, горе-разработчики знать ничего не знают про ФИФО, просто списывают самую старую партию. И в качестве подтверждения своих слов приводит текст запроса... Вы писали когда-нибудь запрос для ФИФО? Если да, то вы будете смеяться вместе со мной. Это был тот самый запрос. Я этому автору говорю: "вы нам код после запроса покажите, там должно быть самое интересное". Думал, он сам посмотрит и скажет: извините, погорячился... Нет. Взял и поправил свою публикацию. Выложил код. Правда обрезал его посередине. Так и оставил в непонятках. То ли совсем ничего про ФИФО не знает, то ли стесняется. 

Не будем, впрочем, затягивать вступление и перейдем к антидоту.

Антидот

Для надежности я решил сделать антидот двухкомпонентным. Я возьму два простых утверждения, которые кажутся очевидными. И продемонстрирую, что получится, если подумать над ними, как следует.

Часть 1. Имена переменных должны быть осмысленными и понятными.

В этом месте я всегда предлагаю подумать на тему, что лучше:

СуммаПервогоИВторого=Первое*Второе;

или 

х=Первое*Второе;

Тут обычно начинают задавать вопрос по поводу первого варианта: что это вообще такое и зачем я так написал. Зачем, зачем... Пишу я так. На тысячу строк кода два-три раза нечто подобное и напишу. Но это потому, что я опытный. У других может и все 20 или 30 раз получиться. Мы все делаем ошибки. Нет ничего удивительного в том, чтобы написать "*" вместо "+". Лично я не перестаю удивляться другому. А именно тому, что можно часами сидеть, смотреть на первый вариант и не видеть проблемы. Здесь может спасти только "взгляд со стороны", когда ваш коллега сдвигает вас с мертвой точки. Но вся проблема в том, что вы можете зависнуть не на:

СуммаПервогоИВторого=Первое*Второе;

а на чем-то другом, типа:

Периметр=СуммаПервогоИВторого+СуммаПервогоИВторого;

И тут вам коллега уже ничем не поможет.

Мне как-то привели вот такой пример:

Если ((ПН И ПНП) И (РН И РНП)) ИЛИ 
    (( ПН = Ложь ) И (РН И РНП)) ИЛИ 
    ((ПН И ПНП) И (РН = Ложь)) Тогда 
    Док.Обработан = Истина;
    Док.ДанныеОбработан = ТекущаяДата();
    Док.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;

И спросили: "Ну и как? Это хороший код по-твоему?"

Нет. Это - плохой код. Вместо трех строчек условий следует оставить одну с одним "ИЛИ".

(* Внимательные читатели заметили, что здесь я был не прав. Это выражение на самом деле не сокращается)

А насчет имен переменных... Ну, допустим, они будут понятными. Что вам это даст? Если человек путается в условиях, то где гарантия, что он ничего не напутал ранее с установкой значений?

Но самый главный аргумент против моих рассуждений следующий:

"Зачем спецом портить программу? Ведь тогда все станет непонятным." 

И вот здесь надо разобраться как следует. Во-первых, непонятным станет не все. У нас с вами есть имена справочников, документов, регистров. Есть имена их реквизитов. А также имена модулей и методов. Переменные - это далеко не все, что есть в нашем коде.

Взгляните на картинку, которую я взял отсюда: https://ru.wikipedia.org/w/index.php?curid=6775969

Представьте себе, что точки - это имена предметных сущностей, а линии - это переменные.

Теперь посмотрите на вторую картинку:

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

Что из всего этого следует. Имена переменных должны быть хорошо различимы в своем локальном контексте. Будут они осмысленными или нет - дело вкуса. Более того, начинающим было бы разумно рекомендовать использовать только абстрактные имена. Это будет естественным образом подталкивать их к созданию более совершенного кода. 

 

Часть 2. Копирование кусков кода - зло.

 

		если зеленый тогда

            ///////////////////////////////////////////////
			новкоординаты=новыекоординаты(текузелрез);
			нсрез=текузелрез.строки.добавить();
			нсрез.ид=Новый УникальныйИдентификатор;
			нсрез.тип="ГРУППА";
			нсрез.имя=текузел.имя;
			нсрез.РПШирина=19;
			нсрез.РПВысота=12;
			нсрез.РПВерх=новкоординаты.верх;
			нсрез.РПЛево=новкоординаты.лево;
  			нкорсв=своуз.строки.добавить();
			нкорсв.узел=нсрез.ид;
			стузелрез=текузелрез;
			текузелрез=нсрез;
            //////////////////////////////////////////////

			связь="";
			подключение="";
			для каждого св из мсв цикл
				если врег(сокрлп(св.свойство))="СКРЫТЬ" тогда
					нсрез.тип="СКРЫТАЯГРУППА";
				иначеесли врег(сокрлп(св.свойство))="УСЛОВИЕ" тогда
					продолжить;
				иначеесли врег(сокрлп(св.свойство))="ИСКЛЮЧИТЕЛЬНОЕ_УСЛОВИЕ" тогда
					продолжить;
				иначеесли врег(сокрлп(св.значение))="ЗАПИСАТЬ" тогда
					ВыполнитьКоманду(св.свойство,врег(сокрлп(св.значение)));
				иначеесли врег(сокрлп(св.значение))="УДАЛИТЬ" тогда
					ВыполнитьКоманду(св.свойство,врег(сокрлп(св.значение)));
				иначеесли врег(лев(сокрлп(св.значение),6))="НОВЫЙ " тогда
					метаимя=врег(сокрлп(сред(сокрлп(св.значение),6)));
					если лев(метаимя,8)="ДОКУМЕНТ" тогда
						новзн=документы[сокрлп(сред(метаимя,10))].создатьдокумент();
						новзн.дата=текущаядата();
					иначеесли лев(метаимя,10)="СПРАВОЧНИК" тогда
						новзн=справочники[сокрлп(сред(метаимя,12))].создатьэлемент();
					конецесли;	
					записатьвпамять(св.свойство,новзн);
					нсв=нкорсв.строки.добавить();
					нсв.свойство=св.свойство;
					нсв.значение=новзн.ссылка;
					нреф=рефс.добавить();
					нреф.имя=св.свойство;
					нреф.строкасвойств=нсв;
				иначеесли врег(лев(сокрлп(св.значение),5))="НОВАЯ" тогда
					стрзнач=сокрлп(стрзаменить(св.значение,"НОВАЯ",""));
					стрзнач=сокрлп(стрзаменить(стрзнач,"новая",""));
					поз=стрнайти(стрзнач,".");
					если поз>0 тогда
						имяобъекта=лев(стрзнач,поз-1);
						имятаблицы=сред(стрзнач,поз+1);
					иначе
						имяобъекта=стрзнач;
						имятаблицы=неопределено;
					конецесли;
					нс=память.найти(имяобъекта,"имя");
					если нс<>неопределено тогда
						новзн=нс.значение[имятаблицы].добавить();
						записатьвпамять(св.свойство,новзн);
					конецесли;
				иначе
					новзн=ВычислитьЗначение(св.значение);
					записатьвпамять(св.свойство,новзн);
					нсв=нкорсв.строки.добавить();
					нсв.свойство=св.свойство;
					попытка
						нсв.значение=новзн.ссылка;
					исключение
						нсв.значение=новзн;
					конецпопытки;
					если врег(сокрлп(св.свойство))="СВЯЗЬ" тогда
						связь=сокрлп(св.значение);
					иначеесли врег(сокрлп(св.свойство))="ПОДКЛЮЧЕНИЕ" тогда
						подключение=сокрлп(св.значение);
					конецесли;	
				конецесли;
			конеццикла;
			если не пустаястрока(связь) тогда
				нс=списокбаз.найти(текузел.имя,"имя");
				если нс=неопределено тогда
					новб=списокбаз.добавить();
					новб.имя=текузел.имя;
					новб.подключение=подключение;
					новб.связь=связь;
					новб.база=неопределено;
				конецесли;
			конецесли;
			для каждого уз из текузел.строки цикл
				ОбработатьУзел(уз,текузелрез);
			конеццикла;
			текузелрез=стузелрез;
		конецесли;
	иначеесли текузел.тип="ЦИКЛ" тогда

        //////////////////////////////////////////////////
		новкоординаты=новыекоординаты(текузелрез);
		нсрез=текузелрез.строки.добавить();
		нсрез.ид=Новый УникальныйИдентификатор;
		нсрез.тип="ГРУППА";
		нсрез.имя=текузел.имя;
		нсрез.РПШирина=19;
		нсрез.РПВысота=12;
		нсрез.РПВерх=новкоординаты.верх;
		нсрез.РПЛево=новкоординаты.лево;
		нкорсв=своуз.строки.добавить();
		нкорсв.узел=нсрез.ид;
  		стузелрез=текузелрез;
		текузелрез=нсрез;
        /////////////////////////////////////////////////

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

Кто-то скажет, что я тут плохому учу. Ведь есть серьезные проекты. Ты не можешь думать только о себе. Ты должен думать и о тех, кто будет поддерживать твой код.

Хорошо. Давайте подумаем.

Допустим, у нас очень серьезный проект. Сотни тысяч будут пользоваться нашей конфигурацией. Тысячи специалистов будут заниматься ее поддержкой и кастомизацией. Тысячи глаз специалистов будут каждый день смотреть в наш код, и это налагает на нас особую ответственность.

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

//Получение данных из документа

//Формирование движений по регистру

//Блокировка

//Запись движений по регистру 

//Контроль отрицательных остатков

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

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

То есть, мы, выходит, вовсе не подумали об удобстве для тысячи специалистов. А о чем мы тогда думали? Об удобстве для нескольких наших разработчиков в ущерб удобству тысячи специалистов поддержки? Или просто о том, что копировать код это "фу!"?

Делайте со мной что хотите, но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил... СКОПИРОВАТЬ КОД.

Что из этого следует. Если вы разработчик-одиночка, перечитывайте почаще Маяковского

умри, мой стих,

                            умри, как рядовой

и старайтесь не преувеличивать значение вашей разработки.

Если же вы отвечаете за разработку массового продукта, то думайте не о каких-то там шаблонах, а о том, что вы хотите получить в результате.

См. также

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

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

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

18.03.2024    1162    ZhokhovM    2    

4

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

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

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

18.03.2024    2697    ZhokhovM    4    

9

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

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

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

29.09.2023    1910    1CUnlimited    15    

22

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

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

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

27.09.2023    6973    Lemmonbri    136    

36

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

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

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

19.09.2023    4355    Lemmonbri    16    

31

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

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

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

10.08.2023    9593    0    1c-izhtc    37    

21

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

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

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

11.07.2023    2217    magic1s    32    

11
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. strrike 22.01.19 12:00 Сейчас в теме
первонакх ))
Интересно, в эту статью понабегут?)
2. genayo 22.01.19 12:13 Сейчас в теме
Про имена переменных - вы приводите слишком примитивный пример, и на нём основываете дальнейшее рассуждения. В чём разница, по вашему, между X = НайтиОбъектПоКоду("12345") И ЭлементСправочникаНоменклатура = НайтиОбъектПоКоду("12345")?
Про копипаст - я даже не знаю, вы это серьёзно?
klinval; sergelemon; MCV; unichkin; spezc; YLioY; awk; for_sale; Andreeei; Yakud3a; +10 Ответить
5. dachnik 26 22.01.19 12:50 Сейчас в теме
(2)копипаст - очень неудачный пример.
действительно, использование одного и того же обработчика из общего модуля для проведения разных документов существенно усложняет изменение без нарушения работы всех механизмов проведения, ссылающихся на общую процедуру. Поэтому разработчик должен хорошо подумать над тем, как должна выглядеть эта глобальная процедура, какой массив параметров передается на входе и выходе. В большинстве случаев проблема не в общей процедуре как таковой, а в логике ее работы. очень часто вижу говнокод от самой 1С, где в общих процедурах массив переменных обрабатывается в контексте данных документа или еще хуже, формы.
YLioY; for_sale; sergathome; +3 Ответить
8. mkalimulin 1153 22.01.19 13:39 Сейчас в теме
(2) Дело вкуса. Но начинающему все-таки лучше использовать X.
9. genayo 22.01.19 13:48 Сейчас в теме
(8) А, понял, вы считаете, что начинающему полезно держать весь контекст в своей голове. Так он разовьёт свою память, и станет очень умным программистом.
rpgshnik; pavlov_dv; for_sale; +3 Ответить
11. mkalimulin 1153 22.01.19 13:50 Сейчас в теме
(9) Так он научится сокращать контекст до тех размеров, которые помещаются в голове.
12. genayo 22.01.19 13:58 Сейчас в теме
(11) Всё-же, у вас очень неортодоксальные подходы к программированию. Код, написанный таким начинающим программистом, будет легко читаем только программисту, обученному по такой-же системе.
14. ADirks 186 22.01.19 14:08 Сейчас в теме
(11) Так он учится раздувать контекст до размеров, которые не помещаются ни в чьей голове, кроме его собственной.

Да он же реально крут!


P.S. оч. понравилась зелёненькая надпись внизу
27. dachnik 26 22.01.19 15:52 Сейчас в теме
(8) Буквенные переменные использую только очень локально, в основном как счетчики в циклах, либо вспомогательные переменные при расчетах, о которых можно забыть сразу же при переходе к следующему логическому куску процедуры/функции.
59. user623969_dusa 23.01.19 10:31 Сейчас в теме
(8) никогда Х не используется. полностью обезличенные переменные только для итераторов циклов. в остальных переменная должна содержать свой тип.. изучите программирование на java или c очень полезно для разнообразия
3. Vladimir Litvinenko 2869 22.01.19 12:27 Сейчас в теме
Делайте со мной что хотите, но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил... СКОПИРОВАТЬ КОД.

Не покидает ощущение, что это троллинг, а не всерьёз, так как примеры из разряда крайностей.
Если это троллинг, то не хватает предложения вообще отказаться от общих модулей. И ссылки на партнёрский форум, где Вы предлагаете это сделать разработчикам типовых конфигураций, а они записывают Ваше пожелание ))
klinval; sergelemon; pavlov_dv; qazaz2; mpeg1989; ixijixi; for_sale; bulpi; Andreeei; +9 Ответить
7. mkalimulin 1153 22.01.19 13:37 Сейчас в теме
(3) От общих модулей не надо отказываться. Все дело в том, что туда писать. Я думаю, что в общие модули должно попадать только то, насчет чего есть 99% уверенности, что это будет общим для 99% пользователей.
15. Vladimir Litvinenko 2869 22.01.19 14:12 Сейчас в теме
(7) Причём здесь пользователи? Мы говорим об информационной системе и ориентироваться нужно на количество объектов в информационной системе. Для пользователя мы создаём UI.

И откуда взялась цифра 99%? Почему не 91%?

Возьмём ваш же пример. В типовых конфигурациях, по крайней мере семейства ERP, контроль остатков построен очень хорошо. Метод ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения - это ядро. Модификация, как правило, делается в одном месте конфигурации. По каким регистрам выполнять контроль при проведении конкретного документа определяется в методе СформироватьСписокРегистровДляКонтроля() модуля документа.

По поводу наименования переменных есть соглашение https://its.1c.ru/db/v8std#content:2149184103:hdoc и если не включать дурачка, приводя в качестве примера тавтологию, то его следует придерживаться. Тавтология также не рекомендуется в соседнем разделе. Поэтому приводить тавтологию в качестве примера того, к чему может привести разработка по стандартам, также некорректно.

Немного жаль, что это не троллинг. Было бы забавно )) Но своего читателя Вы найдёте конечно )
trumanl; klinval; sergelemon; extrim-style; MCV; nbeliaev; pavlov_dv; for_sale; alexander-pro; ben19791010; Dem1urg; bulpi; sergathome; itriot11; +14 Ответить
25. sergathome 4 22.01.19 15:18 Сейчас в теме
(15) и это ещё, скажИте, не троллинг:
//Получение данных из документа

//Формирование движений по регистру

//Блокировка

//Запись движений по регистру

//Контроль отрицательных остатков

Ну не может эта кость просто так выпасть.
124. MCV 24.01.19 14:18 Сейчас в теме
(15)
По поводу наименования переменных есть соглашение https://its.1c.ru/db/v8std#content:2149184103:hdoc и если не включать дурачка, приводя в качестве примера тавтологию, то его следует придерживаться.


+1, Именно так.
126. starik-2005 3033 24.01.19 17:20 Сейчас в теме
(124)
...приводя в качестве примера тавтологию, то его следует придерживаться.

Вот по приведенной ссылке сказано, что имена переменных нужно образовывать от предметной области, чтобы было понятно, на кой черт она нужна.
Это, однозначно, не плохо. Но если предметной области нет? Вот у меня есть запрос, который возвращает кучу интересного. И нет там предметной области - там совокупность предметов, явлений и прочего. Почему бы мне не назвать выборку "Выборка", а выборку второго уровня - "Выборка2"?
Или, например, у меня есть универсальная процедура для работы с деревом. Она рекурсивна, в нее передается произвольное дерево. Почему я не могу итератор назвать "ст"? Для меня это очень хорошо и предметно говорит о строке дерева, но при этом мне не нужно писать длинные слова "СтрокаДерева", т.к. внутри у меня есть много всего интересного с этой строкой.

Притягивать имя переменной за уши к предметной области иногда разумно, особенно начинающим программистам. Но далеко не всегда это оправдано, т.к. в большом и сложном коде мне куда проще разобраться при наличии в итераторах вложенных циклов индекса вложенности (например "ст3"), чем в случае, если итератор будет называться по предметной области (СтрокаДерева -> ПодстрокаСтрокиДереваПервогоУровня -> ПодстрокаПодстрокиДереваВторойУровень - разработчик пока читать эту муть будет - помрет сто раз).

НО! Всегда плохой код можно прикрыть высокими стандартами разработки. К сожалению не нашел примера кода, чтобы посмотреть, на сколько он хорош по существу, а не по стандарту )))
128. ADirks 186 24.01.19 17:38 Сейчас в теме
(126) Когда пишешь универсальный алгоритм для работы с деревом, то термины Дерево и СтрокаДерева (ст - вполне понятно, и даже предпочтительно) являются терминами предметной области. Так что, всё по стандарту.
for_sale; klinval; Octopus; itriot11; +4 Ответить
130. herfis 498 24.01.19 18:14 Сейчас в теме
Лично я не люблю использовать сокращения в именах переменных и методов. Да и в коде типовых конфигураций "резкие" сокращения обычно не используются - в итоге код органичнее выглядит.
Мне не лень писать слова полностью - слепой десятипальцевый и автодополнения рулят. Мое мнение - что переменные и методы с полными именами (но максимально короткими, исходя из контекста) читаются как раз легче и быстрее, чем с сокращениями. При "тяжелом" контексте "вживаться" в кучу сокращений сложно. Особенно если эти сокращения придумывал не ты :) Мозгу приходится делать маппинг имен переменных на реальные сущности. А я люблю, чтобы код читался как проза и даже комментариев не требовалось. Комментарии в основном для описания работы блоков использую, чтобы навигацию по бизнес-логике можно было делать быстро, даже не вчитываясь в код.
Я вообще считаю, что выбор имен - это своего рода искусство :) Потому что в идеале имя переменной должно быть без сокращений, но при этом не слишком длинное. А для этого нужно изящно учитывать контекст и постоянно контролировать читабельность. С именами методов легче - им можно и подлиннее/пополнее имена давать. Ессно, общепринятые сокращения или принятые в контексте кодируемой бизнес-логики использовать можно. Читабельность - главный критерий. Что такое читабельность? Читабельность - это насколько мало придется морщить мозг вашему коллеге (не вам!), разбирая ваш код.
Да, важное дополнение - все вышесказанное касается кодирования бизнес-логики. На математические и системные алгоритмы это ессно нет смысла натягивать. Но мы же про 1С говорим. А 99,99% кода 1с-программиста - это чистая бизнес-логика.
Артано; Olenevod; Octopus; json; +4 Ответить
131. starik-2005 3033 24.01.19 18:28 Сейчас в теме
(130)
Лично я не люблю использовать сокращения в именах переменных и методов.
Лично я "люблю" использовать сокращения в итераторах и временных переменных. Какие-то относительно стабильные переменные внутри кода "люблю" называть "лапидарно".

ЗЫ: да, а еще я не люблю называть результат результатом, а люблю называть рез'ом, то же самое с "ДополнительныеПараметры" - слишком длинно. Достаточно "доп". Если кому-то такие сокращения непонятны, то я просто снимаю шляпу перед интеллектуальной нищетой этих товарищей.
132. herfis 498 24.01.19 18:35 Сейчас в теме
(131)
Лично я "люблю" использовать сокращения в итераторах и временных переменных.

Избегаю и там тоже. Если это временная переменная в текущем скоупе, добавляю впереди слово "Текущий"/"Текущая".
Если это итератор - стараюсь именовать так, чтобы можно было понять, что он итерирует.
ЗЫ. Всегда пишу полностью "Результат" и "ДополнительныеПараметры" :) Я снисходителен к чужим слабостям :)
133. starik-2005 3033 24.01.19 19:20 Сейчас в теме
(132) есть такой диагноз - маниакальный педантизм. Да и вообще фанатизм в любом деле несет больше вреда, чем пользы)))
Артано; ADirks; +2 Ответить
134. herfis 498 25.01.19 10:04 Сейчас в теме
(133) У программистов часто подобные профдеформации :) Но я тихий пациент, и снисходителен к не познавшим дзен. Какой от меня вред? Сплошная польза :)
itriot11; +1 Ответить
136. mkalimulin 1153 25.01.19 10:20 Сейчас в теме
(134) Ээээ... программирование эта такая штука...
Вот программист сел, полчаса посидел и избавил десять(сто,тысячу, сто тысяч) человек от необходимости выполнять тупую работу.
Но этот ножик заточен с двух сторон. Программист сел, полчаса посидел и создал для десяти(ста,тысячи, ста тысяч) человек необходимость выполнять тупую работу.
У каждого программиста свое сальдо. Оно может быть как дебетовым, так и кредитовым. Подумайте об этом.
137. herfis 498 25.01.19 10:23 Сейчас в теме
(136) Уже думал. Видимо слишком много и слишком долго. Ибо в итоге получилось то, что получилось :)
138. mkalimulin 1153 25.01.19 10:28 Сейчас в теме
(137) Программист сел, посидел, вынес в общий модуль алгоритмы проведения документов. И создал для десятков тысяч других пограммистов необходимость выполнять тупую работу.
Согласны?
139. herfis 498 25.01.19 10:31 Сейчас в теме
(138) Нет. И даже обсуждать эту тему с вами не хочу :) Я достаточно уже наблюдал подобных дискуссий с вашим участием.
Вы любитель натягивать сову на глобус (сводить все трейдоффы к крайним случаям). Только время потратим и все равно при своем останемся.
json; starik-2005; genayo; itriot11; Octopus; +5 Ответить
142. starik-2005 3033 25.01.19 10:49 Сейчас в теме
(139)
сводить все трейдоффы к крайним случаям
А вот это, кстати, очень верное замечание.
140. genayo 25.01.19 10:46 Сейчас в теме
(138) И дал возможность миллионам пользователей оперативно получать обновления конфигураций в соответствии с изменяющимся законодательством не прибегая к услугам программиста. Ну, это в теории. Реальность типовых от 1С не такова, к сожалению :)
144. mkalimulin 1153 25.01.19 11:02 Сейчас в теме
(140) Эта возможность и так и так есть. Что с алгоритмами в общем модуле, что с алгоритмами в модулях документов. Если пользователь не заказывал никаких изменений, то легко обновится в обоих случаях.
НО. Если пользователь заказал и ему сделали изменение типового документа, то в моем случае (когда алгоритмы дублируются) пользователь тоже может легко обновиться без программиста. Он просто снимет галочку с измененного документа и все.
Скажете, что обновление может потребовать внесение изменений в кастомизированный документ?
А вот сядьте и подсчитайте - как часто это происходит. У меня есть на поддержке одна КА. Там РТиУ изменен. Третий год снимаю галочку, и ничего. Работает, как работало.
145. genayo 25.01.19 11:44 Сейчас в теме
(144) С алгоритмами в общих модулях разработчики решения быстрее внесут изменения и выпустят работающий продукт. И вот такое дело - если кастомизировать документы нужно 1-2% пользователей, стоит ли с коммерческой точки зрения думать о них?
146. mkalimulin 1153 25.01.19 12:14 Сейчас в теме
(145) На очередном цикле обновления они съэкономят 10 человеко-часов, но их партнёры за этот же период потратят лишних 10 000 человеко-часов. Где здесь профит?
147. genayo 25.01.19 12:56 Сейчас в теме
(146) Какой профит, вы о чём? Партнёров никто не заставлял кастомизировать так, чтобы при обновлении были проблемы.
148. mkalimulin 1153 25.01.19 13:11 Сейчас в теме
(147) Вы теряете нить разговора. Затраты времени будут при кастомизации, а не при обновлении.
149. genayo 25.01.19 13:24 Сейчас в теме
(148) Значит, в (146) я вас не так понял. Хорошо, тогда другой вопрос - 10 000 часов вы откуда взяли? И сколько часов будет потрачено, если бы процедуры были в модулях проведения? Почему думаете, что при общих модулях в разы больше, собственный опыт или есть какая-то статистика?
150. mkalimulin 1153 25.01.19 14:39 Сейчас в теме
(149) Если процедуры продублированы, то времени будет потрачено МЕНЬШЕ. Тут даже не сильно важно насколько меньше. Разработчиков типовых, условно говоря, 10 человек. А внедренцев 10 000. Вот это соотношение важно. Если найдется какой-то способ съэкономить хотя бы две минуты рабочего времени внедренца, то уже имеет смысл потратить МЕСЯЦ работы одного разработчика 1С на реализацию этого способа. Экосистема 1С в целом от этого выиграет. Как вы думаете - дополнительного месяца работы разработчику 1С хватит на то чтобы внести изменения не в один модуль, а в пять-шесть?
154. genayo 25.01.19 15:20 Сейчас в теме
(150) Если разработчик партнёра не знаком с устройством проведения документов в типовой конфигурации - да, в первый раз им будет потрачено больше времени. Но во все последующие - столько-же. Развивают типовые решения на 1С не партнёры, а разработчики. 10 часов разработчика должны давать больше развитию решения, чем 10 000 часов партнёра. Еще раз оговорюсь, в типовых от 1С пока не так.
155. mkalimulin 1153 25.01.19 15:48 Сейчас в теме
(154) Этот спор можно продолжать бесконечно. Тут только надо понимать, что если доводить вашу позицию до логического конца, то мы получим закрытый код и бинарные файлы от разработчиков. Если цель - прийти сюда, тогда да, дублирование кода бессмысленно.
165. genayo 26.01.19 08:52 Сейчас в теме
(155) Как вам удаётся из таких посылок делать столь глобальные выводы - загадка...
166. mkalimulin 1153 26.01.19 10:01 Сейчас в теме
(165) А что тут сложного? Если вы говорите, что внедренцы не должны лезть в код, то логично же этот код закрыть.
167. genayo 26.01.19 10:56 Сейчас в теме
(166) Это где я такое говорил? Между строк читаете что-ли? "Лезть в код" можно по-разному, благо платформа теперь много вариантов позволяет...
168. mkalimulin 1153 26.01.19 11:01 Сейчас в теме
(167) Как только вы полезете в код. Неважно зачем. Вы начнете тратить рабочее время. Это неочевидно?
169. genayo 26.01.19 12:23 Сейчас в теме
(168) Я ННП о чём вы :( Но очень интересно.
172. mkalimulin 1153 26.01.19 12:43 Сейчас в теме
(169) Ничего сложного. Код открыт. Широкие народные массы лезут в код. Они при этом тратят свое время?
173. genayo 26.01.19 13:04 Сейчас в теме
(172) Я потерял нить разговора. Поэтому просто предлагаю вам переписать типовую УТ 11 без использования общих модулей. Когда закончите - продолжим.
170. TODD22 18 26.01.19 12:31 Сейчас в теме
(165)
Как вам удаётся из таких посылок делать столь глобальные выводы - загадка...

Он вроде обещал "поделится" в прошлой теме, так и не отсыпал?
171. mkalimulin 1153 26.01.19 12:41 Сейчас в теме
153. itriot11 94 25.01.19 15:15 Сейчас в теме
(149) Да оставьте автора в покое) Образ о себе он уже сформировал - специалист тех поддержки, который меняет пару символов в течении 10 000 человеко-часов, в чем виноваты разработчики преувеличивающие значение своего продукта. Предлагаю просто набраться терпения и подождать выхода следующей статьи от Максима.

P.S. 10 000 и 10 - почему именно так и очень часто? Это какие-то сакральное числа?)
156. mkalimulin 1153 25.01.19 15:53 Сейчас в теме
(153) Они делятся на 10 без остатка )))
А кто такой Максим?
157. itriot11 94 25.01.19 16:03 Сейчас в теме
(156) Извините, Михаил. Меня проглючело к концу недели. Конечно Вас имел ввиду.
158. mkalimulin 1153 25.01.19 16:22 Сейчас в теме
(157) Следующая статья будет немного о другом. И не такая спорная. Но тему, конечно буду развивать в дальнейшем.
129. MCV 24.01.19 17:45 Сейчас в теме
(126)
Ключевое слово там было "придерживаться" ;-)
Если нет предметной области , то и флаг Вам в творческие руки для образования этих имен.
135. genayo 25.01.19 10:14 Сейчас в теме
(126) А если переменные выборки назвать X и Y, то как, нормально?
141. starik-2005 3033 25.01.19 10:48 Сейчас в теме
(135)
А если переменные выборки назвать X и Y, то как, нормально?
Если выбирать декартовы координаты, то даже очень нормально, но, боюсь, некоторые любители стандартов такое не смогут оценить )))
143. genayo 25.01.19 10:50 Сейчас в теме
(141) Ну не надо уподобляться автору, рассматривая только крайние случаи :)
10. nyam-nyam 22.01.19 13:48 Сейчас в теме
(3)Да троллинг и есть. Решил поддеть всех кто с его "СуммаПервогоИВторого=Первое*Второе;" не согласился в предыдущей статье. :)
Типа:
Все говорят, что "копипастить" нельзя,
Все говорят, что "копипастить" нельзя,
Все говорят, что "копипастить" нельзя,
А я говорю, что буду.
alalsl; pavlov_dv; for_sale; Plotks2017; Vladimir Litvinenko; +5 Ответить
4. itriot11 94 22.01.19 12:40 Сейчас в теме
надо внести какое-нибудь плевое изменение в модуль проведения одного из документов. Реквизит регистра заполнить по-своему или контроль подправить

На мой взгляд, пример не самый подходящий, не говорит о сложности доработки. Поправьте меня, если я ошибаюсь, но задачу в приведенную Вами можно решить подписками на события буквально за минуты.
Про обновление - тут все таки стоит указывать контекст...Например, раз разобравшись в параметрах формирования движений Учета затрат(УПП), потом совершенно не составит труда поддерживать этот функционал. Зато можем надеется, что после изучения механизма, наш специалист поддержки узнает, что есть что-то большее, чем примеры из методички, а далее сможет выработать навык работы со сложным кодом.
В целом, Ваш пример о частной, мелкой задаче. Давайте попробуем рассмотреть что-то покрупнее, что будет касаться не только одного реквизита одного из документов? Боюсь, вывод может оказаться не таким однозначным как сейчас Вы привели))
sergathome; Andreeei; acanta; +3 Ответить
51. user614213_vluminous 23.01.19 09:37 Сейчас в теме
(4) В общем случае, если пробовать использовать подписку для изменения пары символов в случае большой конфигурации, в которой все вынесено в общие модули - скорей всего не получится. А если получится, то буквально за минуты такое не сделаешь.
6. Evg-Lylyk 4580 22.01.19 13:11 Сейчас в теме
Не понял что хотел донести автор. Я художник я так вижу )
for_sale; +1 Ответить
13. acanta 22.01.19 14:04 Сейчас в теме
Это скорее квантование - определение минимального объема кода, допустимого для копипаста.
16. burmsergey 16 22.01.19 14:30 Сейчас в теме
Потому что человека с опытом вряд ли может удивить и, тем более, возмутить что-либо в чужом коде.

Насчёт удивить - согласен. А вот по поводу возмутить - скорее, наоборот.
pavlov_dv; bulpi; +2 Ответить
17. burmsergey 16 22.01.19 14:47 Сейчас в теме
// Идеальный код должен обладать таким свойством, что если взять и заменить в нем все имена переменных на случайно подобранные,
// то он нисколько не потеряет в читабельности.

В читабельности - может быть.
А вот в понимаемости - не думаю (мягко говоря)!

P.S.
Это откуда такая мысль ?
for_sale; +1 Ответить
21. genayo 22.01.19 15:00 Сейчас в теме
(17) Источник - голова автора. Больше источников не обнаружено.
for_sale; +1 Ответить
23. Vovan1975 13 22.01.19 15:01 Сейчас в теме
(17) меня больше интересует вопрос что автор слышал про обфускаторы
for_sale; burmsergey; +2 Ответить
55. for_sale 971 23.01.19 10:15 Сейчас в теме
(23)
ему не нужно, он код пишет сразу обфусцированным)
pavlov_dv; +1 Ответить
18. profiprog1c 248 22.01.19 14:52 Сейчас в теме
Иногда человек пытается сказать что-то умное, чтобы казаться умным, но всем тут же становится понятно, что он глуп. Тут все также - очередной сферический конь в вакууме.
User_south; klinval; pavlov_dv; for_sale; bulpi; Vovan1975; +6 Ответить
20. genayo 22.01.19 14:59 Сейчас в теме
(18) Может ли хороший программист быть дураком?
22. Vovan1975 13 22.01.19 15:00 Сейчас в теме
(20) Специалист подобен флюсу - он односторонен. (с)К.Прутков
for_sale; acanta; +2 Ответить
19. acanta 22.01.19 14:57 Сейчас в теме
В конфигурации 1с все совпадения с реальностью случайны и непредумышлены.
alalsl; Aggressorak; dachnik; sergathome; +4 Ответить
24. brr 182 22.01.19 15:03 Сейчас в теме
А потом во всех местах копипасты нужно будет поменять одну строчку. Автор убейся об стену.
klinval; alalsl; pavlov_dv; litonchik; rintik; Plotks2017; bulpi; Jkero; +8 Ответить
26. Vovan1975 13 22.01.19 15:26 Сейчас в теме
(24) в тему призываются страдальцы по ндс 20%
neuromancer_aza; namazi74; alalsl; pavlov_dv; litonchik; Kirill_K; +6 Ответить
28. Jkero 22.01.19 16:02 Сейчас в теме
А теперь представим, приходит новый прогер с задачей разобраться, что с этим регистром не так. И ему надо, вместо одного общего модуля просмотреть все модули документов, которые являются регистратором. А они одинаковые, отличаются только на 5-10 строк, которые ему нужно найти. Думаю, он не будет рад такой схеме.
barneotec; +1 Ответить
29. Petr54-ru 90 22.01.19 16:57 Сейчас в теме
Я стараюсь пользоваться стандартами кодирования, описанные на ИТС (тут уже в каментах была туда ссылка) и внимать методическим рекомендациям с ИТС.

Еще я в комментариях в коду описываю бизнес-логику (что конкретно эта фигня должна делать и зачем это нужно). И не вычищаю рабочие комментарии описывающие поведение этого куска кода. Заглушки и служебные комментарии вычищаю.

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

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

Меня чужой говнокод не напрягает, и я своего тоже не стесняюсь. Работает - не трогай! Вот и все что могу сказать про эти "coding standards".
32. starik-2005 3033 22.01.19 18:22 Сейчас в теме
(29)
Меня чужой говнокод не напрягает, и я своего тоже не стесняюсь. Работает - не трогай! Вот и все что могу сказать про эти "coding standards".
Хорошее solution, как сказал бы какой-нибудь любитель best practice.

Вообще, стандарты, которых стоило бы придерживаться при программировании, достаточно просты и сформулированы уже не менее тысячи лет логиками древности:
1. Оккам - не стоит плодить сущности без необходимости. Если они есть - код, каким бы красивым ни был, - не так хорош, как без них. И чем больше бессмысленных сущностей - тем хуже код.
2. Вместе с тем лучшее - враг хорошего. Да, Шекспиры и Вольтеры жили чуть позднее, но первоисточник подобного подхода сокрыт временем куда более древним. Данный момент может вступать в противоречие с первым пунктом, но золотая середина всегда разумнее бесконечной замороченности на тему поисков лишнего. Сделай хорошо с может быть небольшим количеством лишнего - и это будет куда лучше бесконечного выкидывания лишнего из кода до передачи его в "продакшн".
3. Все гениальное - просто. Этак Геббельс перефразировал (упростил) фразу да Винчи, который тоже, предположу, не сам оное придумал. Отсюда как бы мораль: не усложняй простое, старайся упростить сложное.
4. Глаза боятся - руки делают. Главное - начать. Ну и сотня похожих фраз. Тут мораль проста - лучше начать делать что-то, чем год думать о том, как "упростить". Часто за год все сильно усложняется, т.е. если не делать - не перейдешь к отладке, которая и занимает основное время разработки. Все эти TDD и прочие тесты - это попытка вкорячить отладку в код, автоматизировать ее каким-то образом и потом передть обратно в виде многостраничных инцидентов. Тоже, конечно, вариант.
5... Могу много написать, но может быть потом статью накатаю.
TABEZI1234; Alex_E; pavlov_dv; alexander-pro; dachnik; Dem1urg; sergathome; acanta; +8 Ответить
52. Dem1urg 386 23.01.19 09:54 Сейчас в теме
69. starik-2005 3033 23.01.19 14:16 Сейчас в теме
(52) накатал. Думаю, сегодня ее отмодерируют )))
EVKash; Светлый ум; acanta; Octopus; +4 Ответить
70. starik-2005 3033 23.01.19 15:06 Сейчас в теме
127. Светлый ум 406 24.01.19 17:37 Сейчас в теме
30. herfis 498 22.01.19 17:10 Сейчас в теме
Что из этого следует.
Если вы разработчик-одиночка и не работаете дольше года на одном проекте, то вам сюда.
Vladimir Litvinenko; +1 Ответить
34. mkalimulin 1153 22.01.19 20:20 Сейчас в теме
(30) Спасибо, я уже видел эти джинсы. Рукава из карманов. Очень смешно. Просто обхохочешься.
78. for_sale 971 23.01.19 16:24 Сейчас в теме
(30)
Эту статью автор видел. Это от неё у него подгорело так, что уже третью пишет)
79. mkalimulin 1153 23.01.19 16:27 Сейчас в теме
(78) А вы чего не пишите? Смешную картинку не можете найти?
80. for_sale 971 23.01.19 16:34 Сейчас в теме
(79)
Боюсь!
Одна моя статья средней руки вон как вас покоробила. Боюсь дальше что-то писать, вдруг вы от злости или зависти (так и не понял, чему завидовать, но все симптомы на лицо) ещё что-то непоправимое с собой сделаете или, не дай Бог, ещё пачку статей с вашими недоценёнными для своего времени мыслями напишете! Да и зачем из пустого в порожнее переливать? Для этого у нас есть вы)) "Одну статью заминусовали - я ещё одну напишу, такого же содержания. Эта не вылезет - ещё одну. Буду писать, пока они от страха перед новыми моими статьями не будут старые бешено плюсовать!" А мы ведь будем! Не дай боже ваш код мне ночью приснится - да я для этого сколько скажете вам плюсов поставлю, только бы вы перестали))
82. mkalimulin 1153 23.01.19 16:38 Сейчас в теме
(80) Вы лучше ответьте на вопрос.
Один стартмани - это деньги или не деньги?
81. herfis 498 23.01.19 16:36 Сейчас в теме
(78) Неправда. Он давно уже "топит" в этом направлении. Что мол у правильного программиста должен быть особый мозг и правильный код должен быть заточен под этот особый мозг. Даже циркули какие-то выкладывал для отсеивания неправильных программистов. Шутка :)
Но пикантность в том, что частично постулаты с этой статьей пересекаются, поэтому я про нее и вспомнил :)
83. for_sale 971 23.01.19 16:42 Сейчас в теме
(81)
Вот циркуль мне понравился, там хотя бы смешно было :) А тут прям как фильм ужасов!
31. starik-2005 3033 22.01.19 17:58 Сейчас в теме
Предположу, что народ, который не совсем согласен со статьей, просто не смог преобразовать логическое выражение в "(ПН И ПНП) ИЛИ (РН И РНП)". Но религия - такая штука. Предположу, что автор, упомянув Дейкстру, сам является адептом религии "ГОТО - это плохо". Но, конечно, не факт.
33. mkalimulin 1153 22.01.19 20:18 Сейчас в теме
(31) Нет, конечно. Я адепт религии использовать текст для программирования - это плохо )))
50. pm74 199 23.01.19 08:17 Сейчас в теме
(31)
преобразовать логическое выражение в "(ПН И ПНП) ИЛИ (РН И РНП)

не равносильно исходному при

ПН = Истина; ПНП = Истина; РН = Истина; РНП = Ложь;
Шаблон = ((ПН И ПНП) И (РН И РНП)) ИЛИ (( ПН = Ложь ) И (РН И РНП)) ИЛИ ((ПН И ПНП) И (РН = Ложь));
Сообщить("Шаблон =  " + Шаблон);  // Ложь
Выражение1 = (ПН И ПНП) ИЛИ (РН И РНП); 
Сообщить("Выражение1 =  " + Выражение1); // Истина

//  как и  при  ПН = Истина; ПНП = Ложь;  РН = Истина; РНП = Истина;
 
Показать


з.ы. не особо силен в БА поэтому лучше чем (aa1bb1)+(!abb1)+(!baa1) => bb1(!a+a1) + !baa1 ничего в голову не пришло
или так (НЕ РН ИЛИ РНП) И (НЕ ПН ИЛИ ПНП) И (РН И РНП ИЛИ ПН И ПНП)
35. TODD22 18 22.01.19 21:01 Сейчас в теме
Этот типичный пример копирования кода я взял из одной своей работы.

Клавишу "шифт" так и не завезли?



"Сон разума рождает чудовищ"

но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил... СКОПИРОВАТЬ КОД.

По этому видимо и не светит.... стать руководителем такой ответственной конфигурации... тут бы шифт на клавиатуре освоить и имена переменных.
User_south; sergelemon; for_sale; +3 Ответить
36. mkalimulin 1153 22.01.19 21:06 Сейчас в теме
(35) Да не люблю я "КонецЕсли", вы же знаете. Выглядит уродливо )))
37. genayo 22.01.19 21:31 Сейчас в теме
(36) Э... Да вы эстет, однако.
38. bulpi 215 22.01.19 21:59 Сейчас в теме
1)Минусы принципиально не ставлю, а то бы поставил.
2)Автор поставляет материал для очередного продолжения "Ректального программирования". Спасибо ему!
3)
но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил... СКОПИРОВАТЬ КОД.

А я бы на йух послал немедленно и свалил.
barneotec; sergelemon; товарищ Ын; json; +4 Ответить
39. mkalimulin 1153 22.01.19 22:14 Сейчас в теме
(38) Это хорошо, что вы такой принципиальный.
А что по-вашему важнее? Сделать продукт, который будет удобен узкой группе разработчиков продукта или тем, кто его поддерживает?
40. itriot11 94 22.01.19 22:30 Сейчас в теме
(39) судя по обратной связи к публикации, похоже, что в узкой группе разработчиков находитесь Вы)
barneotec; sergelemon; Reaper_1C; for_sale; +4 Ответить
41. mkalimulin 1153 22.01.19 22:58 Сейчас в теме
(40) На вопрос есть что ответить?
42. itriot11 94 22.01.19 23:31 Сейчас в теме
(41) Я Ваш вопрос воспринимаю как - "что по-вашему важнее? Сделать продукт, который будет удобен разработчикам придерживающихся общих стандартов или тем, кто солидарен с подходом приведенным в публикации?" Иначе, увы, не выходит. Так вот при такой трактовке, вынужден выбрать первый вариант. Я б не прочь изменить мнение, и даже отчасти понимаю ход мысли, да только аргументы, на мой взгляд, у Вас слабоваты.
sergelemon; +1 Ответить
43. mkalimulin 1153 22.01.19 23:42 Сейчас в теме
(42) То, что с высокой вероятностью кастомизируется, то копируется. То, что с высокой вероятностью не кастомизируется, то выносится в общий модуль. Вы можете сказать - чем плох такой подход?
Aggressorak; +1 5 Ответить
44. itriot11 94 23.01.19 00:02 Сейчас в теме
(43) Сперва, я Вас попрошу развернуть понятие "вероятность кастомизации" и каким образом ее можно вычислить. Желательно на конкретных примерах типовых конфигуаций, поскольку признаюсь, у меня плохо с абстракцией(ну да, имею грешок именовать переменные характерно принимаемым ими значениям).
sergelemon; +1 Ответить
75. bulpi 215 23.01.19 15:54 Сейчас в теме
(39)
ТОЛКОВО написанная конфигурация удобна для всех :
1)разработчиков
2)поддержки
3)главное - пользователей.
Ни одной типовой конфигурации, толково написанной, я не видел. Думаю, там задачи другие - не сделать толковое ПО, а срубить бабла.
Оставьте свое сообщение