Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2009 07:50:01

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

Никогда, никогда не пишите так.



Офлайн

#2 Март 2, 2009 12:14:06

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Антипаттерны

j2a
Никогда, никогда не пишите так.
ээээ… а по-развернутее? Именование и форматирование конечно ужасны, но больше ничего страшного не вижу…



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Март 2, 2009 12:17:25

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

из 44 строк там лишних 35.

первые 20 – это s.replace('*', ‘%’).replace('?', ‘_’), с 22 по 33 – это if pattern is None



Офлайн

#4 Март 2, 2009 12:46:53

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Антипаттерны

j2a
из 44 строк там лишних 35.

первые 20 – это s.replace('*', ‘%’).replace('?', ‘_’), с 22 по 33 – это if pattern is None
Ну да :) я первый раз невнимательно посмотрел. возможно там предполагались более навороченные обработки в методах, хотя метод LikeSyntaxPrepare конечно все равно полный абырваг. Ну и вообще - в воздухе густо пахло Java ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Март 2, 2009 15:24:30

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

да я уже запарился рефакторить типа такого (код as is, орфография оригинала):

    def __call__(self,pattern):
#
Query=self.prepare_query(pattern)
print Query
try:
Result=self.do_query(Query)
except:
print "Error is wrong!"
raise
return True



Офлайн

#6 Март 2, 2009 15:39:31

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

Да, многие еще не дочитали до библиотеки logging, и не совсем понимают как использовать и для чего нужны исключения.

Офлайн

#7 Март 2, 2009 16:13:48

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Антипаттерны

Само существование функции здорово угнетает:

    def IsThisPolis(self,pattern=None):
if pattern==None:
return False
else:
return True
Но дальнешая проверка - вообще шедевр:
    def doQueryString(self,pattern=None):
if (self.CheckPolis(pattern)==False)or(pattern==None):
raise ValueError("I need not null object 'polis' !")
Хотя все это можно было свести к
assert pattern



Офлайн

#8 Март 2, 2009 16:29:45

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

Знакомо, к моему стыду :). Я вот никак себя приучить не могу к assert'ам. А надо бы.

Офлайн

#9 Март 2, 2009 17:24:13

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Антипаттерны

ну положим, там где ошибка значений – в тему ValueError/TypeError. AssertionError в этом случае не в кассу. И даже в этом случае у ассерта в предлагаемом варианте есть мега-плохая штука: он не объясняет причину. Т.е. сообщение об ошибке будет что-то типа AssertionError<пусто>. Если уж использовать ассерты (я их использую для логической проверки случаев которые в нормальном ходе выполнения программы не должны возникать), то

assert condition, description
плюс assert pattern сработает и на пустую строку/словарь/список, не уверен что это желаемое поведение. Так что если всё же ситуация складывается к ассерту, то
assert pattern is not None, "search pattern usually shouldn't be None"
но на самом деле, самый правильный вариант, это сделать pattern обязательным аргументом функции/метода, без начального значения в None

P.S. А еще ассерт коварная штука и посмотреть help(assert) в интерактивной сессии не получится ;)



Отредактировано (Март 2, 2009 17:33:40)

Офлайн

#10 Март 2, 2009 18:20:25

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Антипаттерны

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version