La leggibilità conta

Principi di Ingegneria del Software in Python

Adam Spannbauer

Machine Learning Engineer

Lo Zen di Python

import this
Lo Zen di Python, di Tim Peters (abbreviato)

Bello è meglio di brutto.
Esplicito è meglio di implicito.
Semplice è meglio di complesso.
Il complesso è meglio di complicato.
La leggibilità conta.
Se l'implementazione è difficile da spiegare, è una cattiva idea.
Se l'implementazione è facile da spiegare, potrebbe essere una buona idea.
Principi di Ingegneria del Software in Python

Nomi descrittivi

Nomi poco chiari

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

Nomi descrittivi

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

Eccesso di zelo

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principi di Ingegneria del Software in Python

Mantienilo semplice

Lo Zen di Python, di Tim Peters (abbreviato)

Semplice è meglio di complesso.
Complesso è meglio di complicato.

  Fetta di pizza

Principi di Ingegneria del Software in Python

Fare una pizza - complesso

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

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

    # Prepara la salsa
    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)
    ...
Principi di Ingegneria del Software in Python

Fare una pizza - semplice

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

    return bake(assembled_pizza)
Principi di Ingegneria del Software in Python

Quando rifattorizzare

Nomi poco chiari

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

Nomi descrittivi

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

Eccesso di zelo

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principi di Ingegneria del Software in Python

Facciamo pratica

Principi di Ingegneria del Software in Python

Preparing Video For Download...