Библиотека knigago >> Компьютеры и Интернет >> Учебники и самоучители по компьютеру >> Типизированный Python для профессиональной разработки


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1546, книга: Сказка на ночь
автор: Нея Соулу

Ребятки, залипла на этой книжке - "Сказка на ночь", автор Нея Соулу, попала она ко мне явно не случайно ) Любителям славянского фэнтези однозначно рекомендую. Главная героиня - добрая ведьмочка Алёнка. Живёт себе спокойно в своём сказочном лесу, варит зелья, лечит зверюшек. Но всё когда-нибудь заканчивается. Особенно покой ) Врывается в жизнь нашей ведьмочки принц. Ну как врывается - сначала конь его врывается, и прям в избушку. Дальше - больше: злой колдун, проклятия, неразделённая...

Алексей Голобурдин - Типизированный Python для профессиональной разработки

СИ Типизированный Python для профессиональной разработки
Книга - Типизированный Python для профессиональной разработки.  Алексей Голобурдин  - прочитать полностью в библиотеке КнигаГо
Название:
Типизированный Python для профессиональной разработки
Алексей Голобурдин

Жанр:

Программы, Самиздат, сетевая литература, Учебники и самоучители по компьютеру, Программирование: прочее, Python

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Типизированный Python для профессиональной разработки"

Цель этой книги — помочь тебе научиться писать более красивые, надёжные и легко сопровождаемые программы на Python. То, о чём мы здесь будем говорить, это не начальный уровень владения языком, предполагается, что ты уже минимально умеешь программировать, но хочешь научиться делать это лучше.

Читаем онлайн "Типизированный Python для профессиональной разработки". [Страница - 3]

Компилятор об этом скажет и вам придется
сделать всё красиво, обработать все такие моменты и они не дойдут до рантайма.
Штука в том, что в случае с динамически типизированными языками вроде Python,
очень сложно написать инструментарий, который бы выполнял проверки по типам,
потому что в каждый конкретный момент времени непонятно какой тип в
переменной. И для того, чтобы этому инструментарию помогать, вводят подсказки
типов в Python, PHP или типизацию в JavaScript в виде отдельного языка TypeScript,
компилирующегося в JavaScript. Это то, что помогает выявлять ошибки на этапе до
runtime. Либо на этапе подготовки сборки программы, либо даже на этапе написания
программы непосредственно в редакторе кода.
Инструмент видит, что вот здесь такой-то тип данных, и если он используется
некорректно, то инструмент покажет ошибку и эта ошибка не уйдёт в рантайм и
пользователи не словят эту ошибку, а мы как разработчик не схлопочем по макушке
от руководства. Прекрасно? Прекрасно!
То есть, ещё раз, первое, для чего вводят подсказки типов — как можно более ранее
выявление ошибок, в идеале в редакторе кода в вашей IDE, либо хотя бы на этапе
проверки программы перед её сборкой и публикацией на сервер.
На википедии есть прекрасная страница про системы типов, Type system:
Wikipedia
The main purpose of a type system is to reduce possibilities for bugs in computer
programs by defining interfaces between different parts of a computer program, and
then checking that the parts have been connected in a consistent way.

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

Допустим, у нас есть вот такая функция:

def validate_user(user):
"""Проверяет юзера, райзит исключение, если с ним что-то не так"""
validate_user_on_server(user)
check_username(user)
check_birthday(user)

Под user тут подразумевается объект юзера, например, ORM объект, то есть запись
из базы данных, преобразованная в специальный Python объект. Человек,
написавший код, это знает. В момент написания кода знает. Через месяц он об этом
совершенно точно забудет, а человек, не писавший этот код, об этом знать вовсе не
может. По сигнатуре функции def validate_user(user) нельзя понять, какой тип
данных ожидается в user, но при этом очень легко сделать предположение об этом
типе — и ошибиться.
Спустя пол года дописывается какой-то новый код и функция validate_user в нём
внезапно начинает вызываться с аргументом user, который равен не ORM объекту, а
числу — просто потому что совсем неочевидно, что в user на самом деле
подразумевается не число:

user_id = 123
validate_user(user_id)

Этот код упадёт только в рантайме. Потому что IDE или статический анализатор кода
не смогут понять, что тут есть какая-то ошибка.
Как сделать так, чтобы мы узнали об ошибке до этапа рантайма? Явным образом
указать тип для атрибута user, например, если это экземпляр датакласса User, то так
(о датаклассах мы поговорим подробнее дальше):

from dataclasses import dataclass
import datetime
@dataclass
class User:
username: str
created_at: datetime.datetime
birthday: datetime.datetime | None
def validate_user(user: User):

"""Проверяет юзера, райзит исключение, если с ним что-то не так"""
validate_user_on_server(user)
check_username(user)
check_birthday(user)

Датакласс определяет просто структуру данных с полями username, created_at и
birthday, причём тип поля username — строка, тип created_at — datetime, а birthday
хранит None или значение типа datetime.
И теперь такой код:

user_id = 123
validate_user(user_id)

подкрасится ошибкой уже в IDE на этапе написания кода (например, в PyCharm или
настроенном VS Code или nvim), а также код упадёт с ошибкой в статическом
анализаторе кода, который запустится при сборке проекта перед его публикацией на
сервер.

Получается, что наша программа стала надёжнее, так как пользователи не увидят
многие ошибки, они будут выявлены и исправлены на ранних этапах. Да, при этом
надо писать типы, вводить их, думать, но кому сейчас легко:). Нам платят деньги за
качественный софт, а качественный софт это в первую очередь надёжный софт, то

есть софт, который не падает в рантайме с непонятными пользователю ошибками
вроде AttributeError.
Важно
Цена исправления ошибки в программе тем меньше, чем раньше этап, на
котором эта ошибка выявлена. --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.