Clean Code
13.3K subscribers
2.32K photos
5 videos
2.97K links
Советы по написанию кода, обзоры распространенных ошибок и многое другое.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

РКН: clck.ru/3Ht6ch
加入频道
Compact Functions

Компактные функции.
Есть всего два привила. Первое: функции должны быть компатными. Второе: функции должны быть еще компактнее.

Лучше 10 функций по 20 строк, чем один монстр на 200 строк. Чем компактнее вы будете писать свои функции, тем более примитивными и очевидными они будут казаться для читающего.

#functions
if - else - while

Блоки в командах if, else, while и т.д. должны состоять из одной строки, в которой обычно содержиться вызов функции. Это не только делает вмещающую функцию более компактной, но и способствует документированию кода, поскольку вызываемой в блоке функции можно присвоить удобное содержательное имя.

#functions
Functions Should Do One Thing

Функция должна решать одну задачу.
Это, безусловно, самое важное правило в разработке программного обеспечения. Когда функции решают более одной задачи, их труднее сочетать, тестировать и понимать. Как только вы сможете свести каждую функцию к выполнению только одного действия, их станет значительно проще рефакторить, а ваш код станет гораздо более читаемым. Даже если приведенное правило будет единственным вынесенным вами из этого руководства, вы все равно будете круче многих разработчиков.

#functions
Do not pass null

Не посылайте null.
Возвращать null из методов плохо, но передавать null при вызове еще хуже. По возможности избегайте передачи null в своем коде. Исключение составляют разве что методы сторонних API, при вызове которых без нее не обойтись.
В большинстве языков программирования не существует хорошего способа справиться со случайной передачей null с вызывающей стороны. А раз уж так, разумно запретить передачу null по умолчанию.

#functions #arguments
Unambiguous Names

Недвусмысленные имена. Выбирайте имена, которые максимально недвусмысленно передают назначение функции или переменной. В примере ниже имя метода получилось слишком общим и расплывчатым; оно ничего не говорит о том, что делает функция.
Фунцию было бы правильнее назвать вторым вариантом. На первый взляд имя кажется слишком длинным, но функция вызывается только из одной точки модуля, поэтому ее документирующая ценность перевышает длину.

#naming #functions
Flags in Arguments

Флаги в аргументах. Логические аргументы явно указывают на то, что функция выполняет более одной операции. Они сильно запутывают код. Исключите их из своих функций.

#functions #arguments
Inappropriate static methods

Отдавайте предпочтение нестатическим функциям перед статическими. Если Ваша функция работает только с теми данными, которые получает из своих аргументов, то удостоверьтесь, что в будующем вам не потребуется от нее полиморфное поведение, прежде чем сделать ее статической.

#functions
Аргументы функции (в идеале 2 или меньше)

Ограничение количества параметров функции невероятно важно, потому как это облегчает тестирование вашей функции. Наличие более трех параметров приводит к комбинаторному взрыву, когда вам приходится тестировать огромное количество случаев с каждым отдельным аргументом.
Отсутствие аргументов - идеальный случай. Один или два аргумента — еще в порядке, а вот три или более следует избегать. В большинстве случаев все это множество аргументов можно заменить каким-либо одним объектом.

#functions #python
Forwarded from Clean Code
Favor functional programming over imperative programming

Отдавайте предпочтение функциональному программированию над императивным.
Функциональные языки программирования могут быть чище и проще для тестирования. Используйте этот стиль, когда сможете. Однако нужно быть предельно осторожным и хорошо понимать, что делает функция и как именно она выполняется, иначе это может привести к накладным расходам.

#functions
Functional Envy

Функциональная зависть - один из «запахов кода». Для методов класса должны быть важны переменные и функции того класса, которому они пренадлежат, а не переменные и функции других классов. Когда метод использует методы доступа другого объекта для манипуляций с его данными, то он завидует области видимости класса этого объекта. Он словно мечнает находиться в другом классе, чтобы иметь прямой доступ к переменным, с которыми он работает.

Метод calculateWeeklyPay обращается к объекту HourlyEmployee за данными для обработки, он завидует области видимости HourlyEmployee и «желает» получить доступ к внутренней реализации HourlyEmployee. Впрочем, иногда функциональная зависть оказывается неизбежным злом.

#cleancode #functions
Have no side effects

Бывает, что результат работы функции оказывается совсем не таким, как планировалось. И здесь стоит вспомнить о таком неприятном явлении, как побочные эффекты в функциях. Проблема эта очень коварная.

Побочным эффектом в коде ниже является вызов Session.initialize(). Функция checkPassword может вызываться только в определенные моменты времени, когда инициализация сеанса может быть произведена безопасно. Если же нарушить такую временную привязку, сеансовые данные могут быть безвозвратно потеряны.

Возьмите себе за правило писать функции без побочных эффектов. Удачного дня!

#cleancode #functions
Forwarded from Clean Code
if - else - while

Блоки в командах if, else, while и т.д. должны состоять из одной строки, в которой обычно содержиться вызов функции. Это не только делает вмещающую функцию более компактной, но и способствует документированию кода, поскольку вызываемой в блоке функции можно присвоить удобное содержательное имя.

#functions
Functions instead of comments

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

И запомните: хороший код не требует комментариев.

#comments #functions
Forwarded from Clean Code
Functions instead of comments

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

И запомните: хороший код не требует комментариев.

#comments #functions