Идем дальше, обсудим главу про функции, она крайне потешная. В начале книги Боб приходит цитаты знаменитых крутых разрабов, которые акцентируют на том, чтобы в коде было меньше лишних сущностей в виде классов и функций. Ведь если их слишком много, можно просто запутаться. Не хватает Леонида Каневского, с фразой: избегать кучи лишних функций в книге, никто не собирался.
К сожалению формат телеграмма не позволяет прикладывать фото, поэтому если вам хочется посмотреть как это выглядит, то смотрите в книге сами.
Глава про функции начинается с примера плохо написанной функции. Затем он предлагает исправленный пример, правда с выходными аргументами на которые дальше сам же и набрасывает, но да ладно. Затем начинается веселье, он демонстрирует пример класса, в котором почти все функции однострочные... ну это вообще нифига не читабельно, приходится же постоянно бегать по функциям, туда-сюда.
Далее четко утверждает что блоки if, while, try, catch, finally и т.д должны быть однострочными. Удачи сделать break в однострочном while.
Отчасти если выбирать м/у большой функцией и мелкой, то конечно мелкая лучше. Однако если выбирать м/у мелкой и читабельной функцией, очевидно лучше выбрать читабельную
После идет самая забавная часть книги. Автор пишет, что switch плохо использовать т.к он занимает много места и быстро разрастается запомните этот момент. И предлагает его заменить на абстрактную фабрику блять, где у тебя есть интерфейс, затем реализация и еще несколько классов возвращаемых объектов. Смотришь и в коде фабрики точно такой же сука switch, только теперь у нас фабрика и три отдельных класса, отлично сэкономили место.
Ну это же абсурд. Как это связано с чистотой? Мы тупо на ровном месте заменили простое, понятное решение, громоздим, сложным и менее читабельным. Мне кажется именно из-за этого и пошли шутки про enterprise hello world на 10 классов.
Далее он пишет про унарность функций. Идеальные это функции без аргументов. Совет конечно интересный, только потом он говорит, что плохо когда у функции есть side effect. Знатоки внимание вопрос: каким образом сделать так, чтобы у функции не было аргументов, и при этом она была чистой?
Аргументы флаги. Отчасти он прав, флаги в качестве аргументов такое себе, однако они точно не показываю, что функция делает сразу две вещи. Для примера есть функция
get(force:Boolen=false) которая по умолчанию выдает какие данные из кэша, а если передать true на вход попытается получить свежие данные. Можно ли сказать что функция делает две разные вещи? Вроде как нет, и, так и так мы просто получаем данные. С другой стороны можно было бы сделать две функции
getFromLocal() , getFromRemote() ну вот интуитивно, это кажется менее удобным, занимает больше места, так еще и клиенты начинают знать откуда мы тянем данные т.е в некотором смысле логика начинает зависеть от данных. Короче очень холиварный взброс, тут вообще мне кажется у каждого своя правда и спорит можно бесконечно...