Czytelność ma znaczenie

Zasady inżynierii oprogramowania w Pythonie

Adam Spannbauer

Machine Learning Engineer

Zen Pythona

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.
Zasady inżynierii oprogramowania w Pythonie

Opisowe nazewnictwo

Złe nazewnictwo

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

Opisowe nazewnictwo

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

Przesada

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Zasady inżynierii oprogramowania w Pythonie

Zachowaj prostotę

The Zen of Python, by Tim Peters (abridged)

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

  Kawałek pizzy

Zasady inżynierii oprogramowania w Pythonie

Robienie pizzy – złożone

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)
    ...
Zasady inżynierii oprogramowania w Pythonie

Robienie pizzy – proste

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

    return bake(assembled_pizza)
Zasady inżynierii oprogramowania w Pythonie

Kiedy refaktoryzować

Złe nazewnictwo

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

Opisowe nazewnictwo

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

Przesada

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Zasady inżynierii oprogramowania w Pythonie

Czas na ćwiczenia!

Zasady inżynierii oprogramowania w Pythonie

Preparing Video For Download...