- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
public static ListBox GetListBox()
{
var list = _customList as ListBox;
if (list != null)
{
return list;
}
return null;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+137
public static ListBox GetListBox()
{
var list = _customList as ListBox;
if (list != null)
{
return list;
}
return null;
}
Наверное это бояный пример говнокода, но все же я скопировал его собственными руками
Lure Of Chaos 28.09.2013 22:09 # 0
bormand 28.09.2013 22:36 # 0
WGH 28.09.2013 22:44 # 0
bormand 28.09.2013 22:55 # 0
neeedle 29.09.2013 12:54 # 0
Ваш капитан.
bormand 29.09.2013 13:10 # +1
neeedle 29.09.2013 13:12 # 0
это проверка типа, если у _customList тип ListBox, то вернется ссылка на объект _customList иначе вернется null.
Зачем это было сделано хз. Видимо может быть само поле помечено типом object.
И типа супер-пупер полиморфно.
bormand 29.09.2013 13:20 # 0
Адекватная причина только одна - там может быть не только листбокс.
> супер-пупер полиморфно
Ага, настолько полиморфно, что пришлось корячить неполиморфный геттер под конкретный тип ;)
neeedle 29.09.2013 13:23 # 0
bormand 29.09.2013 13:28 # 0
Lure Of Chaos 29.09.2013 13:31 # +1
если перегибать - то по интерфейсу с полями на метод. ну вы поняли.
bormand 29.09.2013 13:35 # 0
ООП превращает людей в похуистов.
> по интерфейсу на метод
Ну это уже точно перегиб. Все-таки связанные друг с другом методы должны быть в одном интерфейсе.
Lure Of Chaos 29.09.2013 13:47 # 0
bormand 29.09.2013 13:39 # 0
Lure Of Chaos 29.09.2013 13:48 # 0
bormand 29.09.2013 14:04 # 0
Страшно, имхо, только тогда, когда и частное и общее суют в одно поле. После чего с частными случаями работают каким-то особым способом, а с общим - другим, обобщенным. И везде ифы, касты, свичи... и в else вызовы обобщенных методов :)
bormand 29.09.2013 14:09 # 0
P.S. Я не отрицаю, что для производительности это может оказаться полезным.
Lure Of Chaos 29.09.2013 14:27 # 0
врядли. для производительности хорошо правило без исключений, исключения слишком дороги. да и будить лишние сущности дороговато в плане ресурсов. (если у нас 1е6 посетителей в секунду)
bormand 29.09.2013 14:54 # 0
Ну вот взглянем на тот же RandomAccess и сортировку. Здесь разделение на два случая только ускоряет работу :)
Примеров, когда какое-то дополнительное знание может сделать код более быстрым, довольно много.
P.S. Хотя, может быть, более правильным было бы вообще не смешивать интерфейсы с последовательным и произвольным доступом... В том же линуксе не зря блочные и символьные устройства разделены...
Lure Of Chaos 29.09.2013 15:05 # 0
например, вместо if(a)o[a] else o.[b] просто o.a или что-то вроде на всю логику - которая условна, но в данный момент естественна и линейна. потом будет другая, но не менее линейная
Lure Of Chaos 29.09.2013 15:07 # 0
neeedle 29.09.2013 13:46 # 0
Но вообще, если копать глубже, даже ваш код — излишество, так как у листов должен быть минимальный общий интерфейс, и он, в принципе, есть.
bormand 29.09.2013 13:53 # 0
Так это верхний код, где нам похуй ;) Где же в нем излишество?
Нижний код это скорее фоллбек, на случай если очень хочется вызвать что-то специализированное, а архитектуру менять не хочется. И в нем излишества не больше, чем в коде ОП'а.
neeedle 29.09.2013 14:08 # 0
Я про нижний конечно же.
PS
Код опа нельзя принимать за эталон. :)
Lure Of Chaos 29.09.2013 13:23 # +1
guest 01.10.2013 07:35 # +1
С другой стороны, по коду после вызова этого метода будут разбросаны проверки на нулл. Так что это была полумера.
guest 01.10.2013 12:43 # 0
>Так что это была полумера.
+1.
Имхо удобнее получить ClassCastException, чем потом везде проверять. Или не проверять и получить NPE.
>_customList as ListBox
Сахар, который особо не спасает.
guest 04.10.2013 07:46 # 0
Или можно остановиться на локализации взаимодействия с этим типа-ListBox'ом до нескольких методов чтения/записи, каждый из которых вначале содержит граничное условие "если не ListBox вернуть пустую коллекцию или никуда ничего не писать".
Но в любом случае, проверки и взаимодействие с необязательным элементом беспощадно выделить.
guest 24.02.2017 19:59 # 0
guest8 06.04.2019 11:30 # −999
guest8 06.04.2019 11:37 # −999
guest8 06.04.2019 11:38 # −999
guest8 06.04.2019 11:39 # −999
guest8 06.04.2019 11:45 # −999
guest8 06.04.2019 11:45 # −999
guest8 06.04.2019 11:45 # −999
guest8 06.04.2019 11:45 # −999
guest8 06.04.2019 11:47 # −999
guest8 06.04.2019 11:47 # −999
guest8 06.04.2019 11:47 # −999