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

Ссылка: @Portal_v_IT

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

РКН: clck.ru/3Ht6ch
加入频道
🧑‍💻 Функции, поддерживающие только именованные аргументы (kwargs)

...Это может быть полезно для того, чтобы улучшить понятность кода. Как видите, наша задача легко решается при помощи использования аргумента * перед списком именованных аргументов. Здесь, что вполне очевидно, можно использовать и позиционные аргументы — в том случае, если поместить их до аргумента *.

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Создание объектов, поддерживающих выражение with

...Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов enter и exit.

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Создание объектов, поддерживающих выражение with

...Код 1 — наиболее распространённый способ реализации возможностей менеджера контекста в Python, но то же самое можно сделать и проще: см. код 2.

Здесь протокол управления контекстом реализован с использованием декоратора contextmanager. Первая часть функции tag (до yield) выполняется при входе в блок with. Затем выполняется сам этот блок, а после этого выполняется оставшаяся часть функции tag.

Продолжение следует...

Clean Code #совет #Python #cleancode
🧑‍💻 Экономия памяти с помощью __slots__

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

Продолжение следует...

Clean Code #совет #Python #cleancode
🧑‍💻 Экономия памяти с помощью __slots__

...Здесь, когда мы объявляем атрибут __slots__, Python использует для хранения атрибутов не словарь, а маленький массив фиксированного размера. Это серьёзно сокращает объём памяти, необходимый для каждого из экземпляров класса. У применения атрибута __slots__ есть и некоторые недостатки. Так, пользуясь им, мы не можем объявлять новые атрибуты, мы ограничены только теми, которые имеются в __slots__. Кроме того, классы c атрибутом __slots__ не могут использовать множественное наследование.

Продолжение следует...

Clean Code #совет #Python #cleancode
🧑‍💻 Ограничение использования процессора и памяти

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

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Ограничение использования процессора и памяти

...Тут показано ограничение процессорного времени и объёма памяти. Для того чтобы ограничить использование программой процессора, мы сначала получаем значения нежёсткого (soft) и жёсткого (hard) лимитов для конкретного ресурса (RLIMIT_CPU). Затем мы устанавливаем лимит, используя некое число секунд, задаваемое аргументом seconds, и ранее полученное значение жёсткого лимита. После этого мы регистрируем обработчик signal, который, при превышении выделенного программе процессорного времени, инициирует процедуру выхода. В случае с памятью, мы, опять же, получаем значения для нежёсткого и жёсткого лимитов, после чего устанавливаем ограничение с помощью метода setrlimit, которому передаём размер ограничения (size) и ранее полученное значение жёсткого лимита.

Clean Code #совет #cleancode
🧑‍💻 Управление тем, что может быть импортировано из модуля, а что — нет

В некоторых языках имеются предельно чёткие механизмы экспорта из модулей переменных, методов, интерфейсов. Например — в Golang экспортируются лишь сущности, имена которых начинаются с большой буквы. В Python же экспортируется всё. Но лишь до тех пор, пока не используется атрибут __all__.

Продолжение следует...

Clean Code #совет #Python #cleancode
🧑‍💻 Управление тем, что может быть импортировано из модуля, а что — нет

...В примере кода экспортирована будет лишь функция bar. А если оставить атрибут __all__ пустым, то из модуля не будет экспортироваться вообще ничего. При попытке импорта чего-либо из такого модуля будет выдана ошибка AttributeError.

Продолжение следует...

Clean Code #совет #Python #cleancode
🧑‍💻 Упрощение создания операторов сравнения

Существует немало операторов сравнения. Например — __lt__, __le__, __gt__, __ge__. Мало кому понравится перспектива их реализации для некоего класса. Можно ли как-то упростить эту скучную задачу? Да, можно — с помощь декоратора functools.total_ordering.

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Упрощение создания операторов сравнения

...Декоратор functools.total_ordering используется здесь для упрощения процесса реализации упорядочения экземпляров класса. Для обеспечения его работы нужно лишь чтобы были объявлены операторы сравнения lt и eq. Это — тот минимум, который нужен декоратору для конструирования остальных операторов сравнения.

Продолжение следует...

Clean Code #совет #cleancode #python
🧑‍💻 Комментируйте при необходимости, но не постоянно

...Примером служит комментарий (на картинке) из кодовой базы фреймворка Electron на GitHub.

Однако излишние комментарии могут усложнить код. Вот почему многие программисты, как правило, не пишут Javadoc.

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Используйте единые правила форматирования

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

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Используйте единые правила форматирования

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

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Написание чистого кода

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

Продолжение следует...

Clean Code #совет #cleancode
🧑‍💻 Написание чистого кода

...Крупные технологические компании создают собственные руководства по стилю, чтобы гарантировать качество баз кода:

руководство от Google для многих языков;
руководство от Airbnb для JavaScript.

Код будут читать компилятор и программисты. На компилятор стоит произвести впечатление оптимизированным кодом, а на других программистов — чистым.

Clean Code #совет #JavaScript #cleancode
🧑‍💻 По возможности применяйте метапрограммирование

...Предположим, что вам нужно сгенерировать SQL-запрос с объектом под названием person. Некоторые выбирают долгий путь, обращаясь к каждой базовой переменной по имени ключа:

person.name, person.age, person.country

Если вам нужно добавить еще одно поле SQL, придется изменить функцию генератора SQL-запросов. По мере увеличения количества полей может потребоваться много времени для явного ввода имен полей.

Продолжение следует...

Clean Code #совет #SQL #cleancode
🧑‍💻 По возможности применяйте метапрограммирование

...Но если относиться к person как к данным и извлекать всю информацию (поля и значения), необходимую для генерации SQL-запроса во время выполнения программы, можно быстро написать высокодинамичный код. Эта техника называется “метапрограммирование”, и при работе с большинством популярных языков вы можете применять ее с помощью Reflection API.

Продолжение следует...

Clean Code #совет #API #SQL #cleancode
🧑‍💻 Изучайте новейшие возможности языка, но используйте их с осторожностью

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

Продолжение следует...

Clean Code #совет #API #cleancode
🧑‍💻 Изучайте новейшие возможности языка, но используйте их с осторожностью

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

Продолжение следует...

Clean Code #совет #JavaScript #cleancode