26 мар. 2012 г.

Перестать писать классы?

Jack Diederich на конференции PyCon US 2012 сделал замечательный доклад Stop Writing Classes и добрые люди даже перевели его на русский язык. Тема очень правильная, но к этому докладу (как, впрочем, и любым другим провокационным заявлениям) очень недостаёт эпиграфом известной японской поговорки:
If you believe everything you read, better not read.
Больше всего режет глаза отказ от собственных исключений. А ведь в этом случае нам при использовании придётся перехватывать стандартные generic исключения, для возникновения которых может быть куча причин. Если во всех случаях исключение означает нештатную ситуацию (не перехватывается), то всё нормально. А если нет? Тогда вполне вероятна ситуация, когда мы думаем, что обрабатываем ошибку времени выполнения, в то время как на самом деле где-то в коде затесалась ошибка в логике, проявляющаяся на определённых данных, и потратить время на разгадывание загадок при отладке.

Теперь посмотрим на пример с классом для API. Избавились от громоздоко класса — это хорошо. Но теперь конфигурационный параметр API_KEY стал глобальной переменной, неявно используемой в функции. Implicit is better than explicit? Если это всё находится в моём небольшом скрипте, то всё замечательно. А если код запроса в сторонней библиотеке, а API_KEY нужно читать из конфигурационного файла?

И так можно продолжать со всеми остальными примерами. Урощение, в том числе и избавление от ненужных классов — это хорошо, но только нужно смотреть, насколько оно применимо в каждом конкретном случае.

2 комментария:

Ivan Sagalaev комментирует...

Спасибо за ссылку. Ещё не посмотрел, но одержимость классами — одна из моих любимых больных тем, интересно, что про это на PyCon говорят.

Alexander Solovyov комментирует...

Ну, фанатизм вреден в любом случае, но как показывает (моя) практика, классы полезны реже, чем обычно их используют. Иначе говоря, я последнее время считаю, что стоит пару раз подумать, прежде чем писать новый класс.