И еще о поддерживаемости кода
Mar. 4th, 2009 05:36 pmВдогонку к этой
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
no subject
Date: 2009-03-04 11:54 pm (UTC)Вот тебе и пример того, что "очевидное" для разных людей тоже разное бывает.
no subject
Date: 2009-03-05 06:22 am (UTC)Менее очевидный случай - таки добавление дополнительных действий.
no subject
Date: 2009-03-06 04:44 pm (UTC)Добавление действий - это уже изменение логики. Оно может потребовать изменение конструкции. В том числе на if-else. Скажем, если из одной из ветвей захочется после дополнительной проверки швырнуть исключение - в тренарном виде это может смотреться плохо. Но тут уже не однотипные действия "взять b или взять c", а нечто сложнее. Хотя вариант (пример перловый) "a? b : с? d : die 'message'" может быть вполне преемлем.
Общий смысл: не заставлять читающего программу слишком сложно думать о простых действиях.
"Присвоить переменной A значение B или C в зависимости от условия X" - это, по-моему, куда легче и стройнее, чем "Если X истинно, то присваиваем переменной A значение B, иначе присваиваем переменной A значение X".
no subject
Date: 2009-03-06 07:10 pm (UTC)Приведенный тобой вариант удобнее, если эта конструкция с гарантией не подлежит смене. Да, бывает.
no subject
Date: 2009-03-06 07:18 pm (UTC)Но это всё выводит данный пример из разряда "зубодробительного кода", пригодного лишь для конкурса obfuscater'ов.
Это я просто к тому, что не стоит смешивать понятия "мне это невкусно" и "это несъедобно и вредно". ;)
no subject
Date: 2009-03-06 08:20 pm (UTC)Пример такой конструкции в Perl - цепочка из 3+ map/grep.