Le principe de programmation KISS

Image by Tiny Tribes from Pixabay

Afin de garder un code de qualité, il y a certains principes à appliquer. Par qualité, j’entends intelligible, donc simple à comprendre et maintenable. Car c’est bien connu: on n’écrit pas un code pour soi, mais pour les petits copains développeurs qui vont repasser derrière.

KISS est l’acronyme anglais pour Keep It Small and Simple (ou « Gardes ça petit et simple » en français).

Cela peut se résumer à :

  • une fonction ou une classe n’a qu’un seul but (principe Single Responsibility Principe , le « S » de SOLID)
  • éviter le superflu (commentaires)
  • utiliser des noms explicites (pour les variables, fonctions ou classes)
  • plus le code est court, plus c’est facile à maintenir

Illustrons ça avec un exemple en PHP :

/**
 * Return the total amount of items with discount applied
 *
 * @param array $items - list of all items
 * @param int $discount - discount in percentage 
 */ 
function getTotalForItemsWithDiscount($items, $d)
{
    // total amount
    $r = 0;

    foreach ($items as $item)
    {
        $p = $item['price'];
        if ($d > 0) {
            // final price with discount
            $fp = $p - $p * ($d / 100);
        } else {
        	// final price without discount
            $fp = $p;
        }
        $r += $fp;
    }

    return $r;
}

J’ai un peu grossi le trait :), commençons déjà par renommer les variables. C’est toujours plus simple avec les commentaires. Si un nom de variable a besoin d’un commentaire, c’est que son nom n’est pas explicite. Idem pour le nom de la fonction. D’ailleurs, il faut éviter les noms de fonctions qui commencent par « get » ou « set » (hors getter et setter bien sûr). On préférera un nom de fonction qui commence par un verbe à l’infinitif.

function calculateTotalPrice($items, $discount)
{
    $totalAmount = 0;

    foreach ($items as $item)
    {
        $price = $item['price'];
        if ($discount > 0) {
            $finalPrice = $price - $price * ($discount / 100);
        } else {
            $finalPrice = $price;
        }
        $totalAmount += $finalPrice;
    }

    return $totalAmount;
}

On y voit déjà un peu plus clair ! Pour aller un peu plus loin, on voit qu’il y a quelque chose à faire dans le calcul de $finalPrice. On peut factoriser avec un expression qui fonctionne si $discount == 0.

function calculateTotalPrice($items, $discount)
{
    $totalAmount = 0;

    foreach ($items as $item)
    {
        $totalAmount += $item['price'] * ( 1 - $discount / 100);
    }

    return $totalAmount;
}

Dans cet exemple, je me suis permis de supprimer le PHP Doc de début de fonction qui n’apporte rien. Pour pallier cela, on peut typer les arguments et le retour de la fonction ( ⚠ à la condition que PHP ait une version supérieure à 7.4).

function calculateTotalPrice(array $items, int $discount): float
{
    $totalAmount = 0;

    foreach ($items as $item)
    {
        $totalAmount += $item['price'] * ( 1 - $discount / 100);
    }

    return $totalAmount;
}

Et voilà, c’est quand même mieux !

Kevin
Développeur fullstack depuis 16 ans, j'aime résoudre des problèmes complexes et me lancer dans des projets stimulants. J'ai développé de nombreux produits : progiciels, site e-commerce, web services, API ou encore plateforme Saas. J'aime l'accessibilité, le clean code, l'automatisation et améliorer l'Expérience Utilisateur.