Как правильно писать функции?

1,00
р.
Сейчас читаю книгу "Чистый код" и вот решил уточнить у разработчиков с большим опытом, чем у меня.
Тут написано, что следует стремиться к написанию унарных функций (которые содержат один аргумент), а лучше чтоб и вовсе ничего не принимала, чтоб было просто красивое имя функции, прочитав которое можно интуитивно понять, что она делает.
Но, если я не ошибаюсь, это же противоречит правилам инкапсуляции. Я так понимаю, что можно все переменные, которые использует функция определить как глобальные переменные, но тогда эта функция будет жестко зависеть от класса, в котором находится. И в случае чего перенести ее в другой класс будет намного сложнее.
стр.65 "Аргументы функций" В идеальном случае количество аргументов функции равно нулю (нуль-арная функция). Далее следуют функции с одним аргументом (унарные) и с двумя аргументами (бинарные). Функций с тремя аргументами (тернарных) следует по возможности избегать. Необходимость функций с большим количеством аргументов (полиарных) должна быть подкреплена очень высокими доводами - и все равно такие функции лучше не использовать.
И дальше, если пару страниц прочитать, там более глубоко это описывается и все сводится к сути, что функции должны быть в идеале без аргументов.
Или не так я рассуждаю?

Ответ
Я соглашусь с автором книги - чем меньше аргументов тем лучше. Во-первых легче читать код, нету путаницы какая переменная что означает, во-вторых легче писать тесты так как количество тестов чтобы покрыть все возможные комбинации входных данных зависит от количества последних. Я думаю это очевидно. Еще один довод в пользу сокращения количества аргументов это передназначение функции. Если у вас много входных данных, это значит, что скорее всего ваша функция делает слишком много и ее нужно разделить на несколько более простых функций. Здесь я также соглашусь с @cpp_user что красивый код может быть не настолько быстрым на сколько красивым. В книге сказано что в идеальном случае функция должна быть нулярная(не иметь аргументов) но это больше теория. Автор признает что вы всегда будете вынуждены писать унарные или бинарные функции. Вам почти всегда нужно что передать в функцию чтобы получить результат который является 'функцией' исходных данных.
Так что функции с входными параметрами это не плохо, но следует аккуратнее подходить к проектированию кода и минимизировать количество аргументов.
Не помню если это отражено в книге или нет но избегайте случаев когда все (несколько) аргументов функции имеют один и тот же тип. Это часто приводит к ошибкам.
И еще, глобальные переменные - это зло, об этом написано миллион книжек.