Найти - Пользователи
Полная версия: Антипаттерны
Начало » Флейм » Антипаттерны
1 2
j2a
Никогда, никогда не пишите так.
PooH
j2a
Никогда, никогда не пишите так.
ээээ… а по-развернутее? Именование и форматирование конечно ужасны, но больше ничего страшного не вижу…
j2a
из 44 строк там лишних 35.

первые 20 – это s.replace('*', ‘%’).replace('?', ‘_’), с 22 по 33 – это if pattern is None
PooH
j2a
из 44 строк там лишних 35.

первые 20 – это s.replace('*', ‘%’).replace('?', ‘_’), с 22 по 33 – это if pattern is None
Ну да :) я первый раз невнимательно посмотрел. возможно там предполагались более навороченные обработки в методах, хотя метод LikeSyntaxPrepare конечно все равно полный абырваг. Ну и вообще - в воздухе густо пахло Java ;)
j2a
да я уже запарился рефакторить типа такого (код 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
Ferroman
Да, многие еще не дочитали до библиотеки logging, и не совсем понимают как использовать и для чего нужны исключения.
ZAN
Само существование функции здорово угнетает:
    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
Ferroman
Знакомо, к моему стыду :). Я вот никак себя приучить не могу к assert'ам. А надо бы.
j2a
ну положим, там где ошибка значений – в тему 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) в интерактивной сессии не получится ;)
crchemist
лінк до теми http://stackoverflow.com/questions/576988/python-specific-antipatterns
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB