Читаемость имеет значение

Принципы разработки программного обеспечения на Python

Adam Spannbauer

Machine Learning Engineer

Дзен Python

import this
The Zen of Python, by Tim Peters (abridged)

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
The complex is better than complicated.
Readability counts.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Принципы разработки программного обеспечения на Python

Описательные имена

Неудачные имена

def check(x, y=100):
    return x >= y

Описательные имена

def is_boiling(temp, boiling_point=100):
    return temp >= boiling_point

Перегиб

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Принципы разработки программного обеспечения на Python

Простота — залог качества

The Zen of Python, by Tim Peters (abridged)

Simple is better than complex.
Complex is better than complicated.

  Кусок пиццы

Принципы разработки программного обеспечения на Python

Приготовление пиццы — сложный вариант

def make_pizza(ingredients):
    # Make dough
    dough = mix(ingredients['yeast'],
                ingredients['flour'],
                ingredients['water'],
                ingredients['salt'],
                ingredients['shortening'])

    kneaded_dough = knead(dough)
    risen_dough = prove(kneaded_dough)

    # Make sauce
    sauce_base = sautee(ingredients['onion'],
                                ingredients['garlic'],
                                ingredients['olive oil'])

    sauce_mixture = combine(sauce_base,
                            ingredients['tomato_paste'],
                            ingredients['water'],
                            ingredients['spices'])

    sauce = simmer(sauce_mixture)
    ...
Принципы разработки программного обеспечения на Python

Приготовление пиццы — простой вариант

def make_pizza(ingredients):
    dough = make_dough(ingredients)
    sauce = make_sauce(ingredients)
    assembled_pizza = assemble_pizza(dough, sauce, ingredients)

    return bake(assembled_pizza)
Принципы разработки программного обеспечения на Python

Когда стоит рефакторить

Неудачные имена

def check(x, y=100):
    return x >= y

Описательные имена

def is_boiling(temp, boiling_point=100):
    return temp >= boiling_point

Перегиб

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Принципы разработки программного обеспечения на Python

Давайте потренируемся!

Принципы разработки программного обеспечения на Python

Preparing Video For Download...