La lisibilité compte

Principes d’ingénierie logicielle en Python

Adam Spannbauer

Machine Learning Engineer

Le Zen de Python

import this
Le Zen de Python, par Tim Peters (abrégé)

Le beau est mieux que le laid.
L'explicite est mieux que l'implicite.
Le simple est mieux que le complexe.
Le complexe est mieux que le compliqué.
La lisibilité compte.
Si l'implémentation est difficile à expliquer, c'est une mauvaise idée.
Si l'implémentation est facile à expliquer, cela peut être une bonne idée.
Principes d’ingénierie logicielle en Python

Dénomination descriptive

Mauvaise dénomination

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

Dénomination descriptive

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

Exagération

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principes d’ingénierie logicielle en Python

Restez simple

Le Zen de Python, par Tim Peters (abrégé)

Le simple est mieux que le complexe.
Le complexe est mieux que le compliqué.

  Tranche de pizza

Principes d’ingénierie logicielle en Python

Faire une pizza - complexe

def make_pizza(ingredients):
    # Préparer la pâte
    dough = mix(ingredients['yeast'],
                ingredients['flour'],
                ingredients['water'],
                ingredients['salt'],
                ingredients['shortening'])

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

    # Préparer la 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)
    ...
Principes d’ingénierie logicielle en Python

Faire une pizza - simple

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

    return bake(assembled_pizza)
Principes d’ingénierie logicielle en Python

Quand refactoriser

Mauvaise dénomination

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

Dénomination descriptive

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

Exagération

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principes d’ingénierie logicielle en Python

Passons à la pratique !

Principes d’ingénierie logicielle en Python

Preparing Video For Download...