gornalЛюбимое разработчиками слово "костыль" означает ровно необходимость применения оператора if. "Избавление от костылей" - если не упрощение функционала, то добавление уровня абстракции, избавляющего от использования if через, например, виртуальные функции.
no subject
Date: 2014-12-17 12:03 pm (UTC)Костыль - это не совсем if. Костыль - это причина потери времени разработчика на одновременно неинтересную и ненужную работу.
Костыли есть двух видов: внутренние внутри сервиса/программы (это не особо страшно, можно взять и поправить когда надо), и в интерфейсах/внешнем поведении. Вторые - страшное зло, так как их нельзя взять и поправить, тут же прибегут пользователи у которых что-то сломалось.
no subject
Date: 2014-12-17 02:38 pm (UTC)... и ненужную _с точки зрения разработчика_ ...
no subject
Date: 2014-12-17 12:15 pm (UTC)no subject
Date: 2014-12-17 12:19 pm (UTC)Использование виртуальных функций вовсе не избавляет от "if", оно просто уменьшает их количество/дублирование. Потому как один раз тип объекта всё-равно придётся назначить "вручную", пусть даже и упрятав этот выбор где-нибудь в xml-клоаке. :)
no subject
Date: 2014-12-17 12:39 pm (UTC)no subject
Date: 2014-12-17 12:44 pm (UTC)no subject
Date: 2014-12-17 01:08 pm (UTC)Это как и в функциональном программировании быстро оказывается, что спагетти-код с кучей goto напрямую транслируется в группу взаимно-рекурсивных функций с хвостовыми вызовами (естественно от такой трансляции не становясь ни на йоту читабельнее - скорее наоборот - потому что goto по крайней мере точно goto - а там еще понять надо что это был goto)
no subject
Date: 2014-12-17 01:05 pm (UTC)Там есть класс bool с методами ifTrue и ifFalse, которые вычисляют значение своего параметра. И наследники этого класса с инстансами true и false с соответствующей реализацией этих методов :)))
no subject
Date: 2014-12-18 01:18 am (UTC)То есть в ассмблере там все равно появляется condition branch.
Не уверен, в чем состоит смысл его тщательно прятать.
(Я-то конечно вообще нос чайником: например не испытываю терзаний по поводу оператора goto и употребляю его когда уместно.)
no subject
Date: 2014-12-17 02:28 pm (UTC)no subject
Date: 2014-12-17 02:37 pm (UTC)Если выбранное число сегодня, а часть индикаторов не успели подсчитаться, показываем эту часть за вчера.
Это костыль? Многие скажут "да", хотя условие уникально.
no subject
Date: 2014-12-17 02:41 pm (UTC)no subject
Date: 2014-12-17 02:47 pm (UTC)no subject
Date: 2014-12-17 02:49 pm (UTC)no subject
Date: 2014-12-17 02:50 pm (UTC)no subject
Date: 2014-12-17 02:54 pm (UTC)1. Было только A. Потом добавилось Б. Пример - алгоритмы ЭЦП и код openssl до версии 1.0, где у тебя куча мест, которые имеют вид case RSA: case DSA: case EC:
2. Был нормальный процесс обработки, и к нему захотелось присобачить маркетинговую акцию. И ползет, значит, программист по потрохам кода с верёвкой в зубах.
Случаи первой природы лечатся уровнем абстракции. Случаи второго лечатся выкидыванием.
no subject
Date: 2014-12-17 03:20 pm (UTC)no subject
Date: 2014-12-17 05:46 pm (UTC)no subject
Date: 2014-12-17 06:10 pm (UTC)no subject
Date: 2014-12-17 06:13 pm (UTC)В OpenSSL есть свои артефакты - типа совместимости с компилятором gcc 2.95 на платформе, которую живьём никто уже не видел, но бОльшая часть их должна в скором времени нас покинуть.
Впрочем, если в системе совсем нет костылей, то она скорее всего достаточно маленькая.
no subject
Date: 2014-12-17 08:05 pm (UTC)А вообще, конечно, надо конкретный случай разбирать. Может, там if-ов уже столько, что без нового уровня абстракции совсем плохо. С другой стороны, если горит и уже вчера надо, то красоту на потом.