Читабельність має значення

Принципи Software Engineering у Python

Adam Spannbauer

Machine Learning Engineer

Дзен Python

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

Гарне краще за потворне.
Явне краще за неявне.
Просте краще за складне.
Складне краще за заплутане.
Читабельність має значення.
Якщо реалізацію важко пояснити — це погана ідея.
Якщо реалізацію легко пояснити — це може бути хороша ідея.
Принципи Software Engineering у 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
Принципи Software Engineering у Python

Тримайте простоту

The Zen of Python, by Tim Peters (abridged)

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

  Кусок піци

Принципи Software Engineering у 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)
    ...
Принципи Software Engineering у Python

Приготування піци — просто

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

    return bake(assembled_pizza)
Принципи Software Engineering у 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
Принципи Software Engineering у Python

Давайте потренуємось

Принципи Software Engineering у Python

Preparing Video For Download...