gornal: (фото)
[personal profile] gornal
Любимое разработчиками слово "костыль" означает ровно необходимость применения оператора if. "Избавление от костылей" - если не упрощение функционала, то добавление уровня абстракции, избавляющего от использования if через, например, виртуальные функции.

Date: 2014-12-17 12:03 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Мой опыт - каждый if это полбага в трекере (и виртуальной функции это тоже касается).

Костыль - это не совсем if. Костыль - это причина потери времени разработчика на одновременно неинтересную и ненужную работу.

Костыли есть двух видов: внутренние внутри сервиса/программы (это не особо страшно, можно взять и поправить когда надо), и в интерфейсах/внешнем поведении. Вторые - страшное зло, так как их нельзя взять и поправить, тут же прибегут пользователи у которых что-то сломалось.

Date: 2014-12-17 02:38 pm (UTC)
From: [identity profile] gornal.livejournal.com
Я бы поправил так:
... и ненужную _с точки зрения разработчика_ ...

Date: 2014-12-17 12:15 pm (UTC)
From: [identity profile] vanderdecken-lj.livejournal.com
Костыль - это не лишний if, а слишком широкий интерфейс между частями программы. Как правило, это лишняя переменная

Date: 2014-12-17 12:19 pm (UTC)
From: [personal profile] alll
> добавление уровня абстракции, избавляющего от использования if через, например, виртуальные функции

Использование виртуальных функций вовсе не избавляет от "if", оно просто уменьшает их количество/дублирование. Потому как один раз тип объекта всё-равно придётся назначить "вручную", пусть даже и упрятав этот выбор где-нибудь в xml-клоаке. :)

Date: 2014-12-17 12:39 pm (UTC)
From: [identity profile] gornal.livejournal.com
В xml-клоаке if'ов не будет ;-)

Date: 2014-12-17 12:44 pm (UTC)
From: [personal profile] alll
Там обычно наихудший из всех возможных ифов - тот, который существует исключительно в голове одного конкретного разработчика. :) Недокументированый и немотивированый.

Date: 2014-12-17 01:08 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Оно позволяет if реализовать :)))

Это как и в функциональном программировании быстро оказывается, что спагетти-код с кучей goto напрямую транслируется в группу взаимно-рекурсивных функций с хвостовыми вызовами (естественно от такой трансляции не становясь ни на йоту читабельнее - скорее наоборот - потому что goto по крайней мере точно goto - а там еще понять надо что это был goto)

Date: 2014-12-17 01:05 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Напомню только что if элементарно реализуется через виртуальные функции: в Smalltalk он именно так и реализован:

Там есть класс bool с методами ifTrue и ifFalse, которые вычисляют значение своего параметра. И наследники этого класса с инстансами true и false с соответствующей реализацией этих методов :)))
Edited Date: 2014-12-17 01:10 pm (UTC)

Date: 2014-12-18 01:18 am (UTC)
From: [identity profile] oboguev.livejournal.com
"Но под одеждой-то они все равно голые".
То есть в ассмблере там все равно появляется condition branch.
Не уверен, в чем состоит смысл его тщательно прятать.
(Я-то конечно вообще нос чайником: например не испытываю терзаний по поводу оператора goto и употребляю его когда уместно.)

Date: 2014-12-17 02:28 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Не совсем. Костыль - это оператор if с одним и тем же условием во многих местах.

Date: 2014-12-17 02:37 pm (UTC)
From: [identity profile] gornal.livejournal.com
Показываем 5 индикаторов за выбранное число.
Если выбранное число сегодня, а часть индикаторов не успели подсчитаться, показываем эту часть за вчера.

Это костыль? Многие скажут "да", хотя условие уникально.

Date: 2014-12-17 02:41 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Это не костыль, это бизнес-логика. Зверь отдельный, хотя повадки похожи.

Date: 2014-12-17 02:47 pm (UTC)
From: [identity profile] gornal.livejournal.com
Формулировки "не хочу это делать, это бизнес-логика" я пока не слышал :-)

Date: 2014-12-17 02:49 pm (UTC)
From: [identity profile] beldmit.livejournal.com
А "Есть логика, есть женская логика, есть бизнес-логика".

Date: 2014-12-17 02:50 pm (UTC)
From: [identity profile] gornal.livejournal.com
Тоже нет, но мне понравилось.

Date: 2014-12-17 02:54 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Собственно, костыли, которые я видел, чаще всего порождены двумя сценариями из жизни.

1. Было только A. Потом добавилось Б. Пример - алгоритмы ЭЦП и код openssl до версии 1.0, где у тебя куча мест, которые имеют вид case RSA: case DSA: case EC:

2. Был нормальный процесс обработки, и к нему захотелось присобачить маркетинговую акцию. И ползет, значит, программист по потрохам кода с верёвкой в зубах.

Случаи первой природы лечатся уровнем абстракции. Случаи второго лечатся выкидыванием.

Date: 2014-12-17 03:20 pm (UTC)
From: [identity profile] dmih.livejournal.com
Я про второй случай что-то не понял. Выкидыванием чего?

Date: 2014-12-17 05:46 pm (UTC)
From: [identity profile] beldmit.livejournal.com
"А эта хрень у нас с тех пор, когда маркетоид Вася (как, ты не помнишь? А, он до тебя уволился) протолкнул акцию. 5 лет назад. Да, наверное, лучше выкинуть тихо, пока начальство не видит. Акции уже три года нет, а ключевые блоки переписал Саша, с которым ты пересёкся на испытательном."
Edited Date: 2014-12-17 06:04 pm (UTC)

Date: 2014-12-17 06:10 pm (UTC)
From: [identity profile] dmih.livejournal.com
Мне кажется, не стоит путать написание OpenSSL-я и бизнес-приложения всё-таки :)

Date: 2014-12-17 06:13 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Оно конечно. Но кейсы первого типа бывают и в бизнес-приложениях, и в системных. А кейсы второго - только в бизнесе.

В OpenSSL есть свои артефакты - типа совместимости с компилятором gcc 2.95 на платформе, которую живьём никто уже не видел, но бОльшая часть их должна в скором времени нас покинуть.

Впрочем, если в системе совсем нет костылей, то она скорее всего достаточно маленькая.

Date: 2014-12-17 08:05 pm (UTC)
From: [identity profile] green-shaman.livejournal.com
...выливающееся впоследствии в переписывание всего и вся если с абстракцией не угадали.

А вообще, конечно, надо конкретный случай разбирать. Может, там if-ов уже столько, что без нового уровня абстракции совсем плохо. С другой стороны, если горит и уже вчера надо, то красоту на потом.

April 2017

S M T W T F S
       1
2 3 4 5 6 7 8
9 10 1112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 20th, 2025 04:47 am
Powered by Dreamwidth Studios