L'objectif de la programmation n'est pas seulement de faire des programmes qui marchent.
En réalité un programme n'est jamais terminé. Vous réaliserez avec le temps qu'il y a toujours des améliorations à apporter. Il faut donc pouvoir le modifier facilement, sachant que le développeur qui sera chargé de la mise à jour de votre programme ne sera pas forcément vous même. Cela a deux conséquences:
Dans cette partie du cours, je vous donne à travers un exemple quelques conseils permettant de rendre un programme plus lisible et plus facile à modifier.
Mise à part la lisibilité et la facilité de modification, il existe d'autres critères en programmation que nous n'aborderons pas ici:
Nous allons donner ici quelques conseils de programmation, à travers un exemple de projet (si vous avez téléchargé les exemples de ce cours, cet exemple se trouve dans le fichier Exemple-Python-Premieres-Notions\Peinture.py).
La réalisation d'un projet informatique démarre en général avec un cahier des charges. C'est en gros une description de ce que devrait faire le logiciel.
Voici, le cahier des charges de notre exemple:
On souhaiterait écrire un programme qui calcul la surface à peindre dans une pièce rectangulaire possédant des portes et des fenêtres.
Pour simplifier, on supposera que les murs ont 2m50 de hauteur et que toutes les fenêtres ont la même dimension (1.4 × 1.2) et de même pour les portes (0.9 × 2.1).
Les problèmes à résoudre en informatique contiennent souvent des valeurs (numériques ou chaine de caractères) fixes. C'est à dire des valeurs qui ne dépendent pas des données. Ce sont les constantes du problème. Pour ne pas répéter inutilement ces constantes dans le code, il vaut mieux les stocker dans des variables.
Dans notre exemple, les constantes sont : les dimensions des fenêtres et des portes ainsi que la hauteur des murs. Au début du programme, leurs valeurs sont affectées à des variables:
LARGEUR_FENETRE = 1.4 HAUTEUR_FENETRE = 1.2 LARGEUR_PORTE = 0.9 HAUTEUR_PORTE = 2.1 HAUTEUR_MUR = 2.5
On pourrait se passer de ces affectations et mettre directement les valeurs 1.4, 1.2, ... etc dans les calculs, mais on obtiendrait ainsi un code moins lisible et plus difficile à mettre à jour.
S'il faut corriger la hauteur des portes par exemple, il suffit de changer la valeur de la variable HAUTEUR_PORTE et cette modification sera automatiquement répercuté dans tout le code (dans tous les calculs où la hauteur des portes intervient).
Associons une variable à chaque donnée: LargeurPiece, LongueurPiece, NFenetre et NPorte.
Nous pouvons à présent écrire les instructions de lecture de données:
LargeurPiece = float (input ("Largeur de la piece : ")) LongueurPiece = float (input ("Longueur de la piece : ")) NFenetre = int (input ("Nombre de fenetres : ")) NPorte = int (input("Nombre de portes : "))
Il nous faut maintenant réfléchir à la manière de calculer la surface à peindre. Pour simplifier le problème, nous allons découper le traitement en plusieurs étapes:
Le résultat de chaque étape sera sauvegardé dans une variable:
Ecrivons à présent les quatre étapes de calcul:
Calcul de la surface des quatre murs:
SurfaceDesMurs = \ 2 * (LargeurPiece * HAUTEUR_MUR + LongueurPiece * HAUTEUR_MUR)
Le caractère \ permet d'écrire une instruction sur plusieurs lignes, ce qui peut être utile lorsqu'elle dépasse la largeur de la zone d'édition.
ou bien de manière plus concise, mais moins lisible:
SurfaceDesMurs = \ 2 * (LargeurPiece + LongueurPiece) * HAUTEUR_MUR
Cette deuxième solution est également plus rapide à l'exécution, car elle ne demande que trois opérations (deux multiplications et une addition), alors que la précédente en demande quatre.
Calcul de la surface des fenêtres:
SurfaceDesFenetres = \ NFenetre * LARGEUR_FENETRE * HAUTEUR_FENETRE
Calcul de la surface des portes:
SurfaceDesPortes = \ NPorte * LARGEUR_PORTE * HAUTEUR_PORTE
Calcul de la surface à peindre:
SurfacePeinture = \ SurfaceDesMurs - SurfaceDesFenetres - SurfaceDesPortes
Pour conclure, voici le code complet du programme :
# Constantes LARGEUR_FENETRE = 1.4 HAUTEUR_FENETRE = 1.2 LARGEUR_PORTE = 0.9 HAUTEUR_PORTE = 2.1 HAUTEUR_MUR = 2.5 # Lecture des donnees LargeurPiece = float (input ("Largeur de la piece : ")) LongueurPiece = float (input ("Longueur de la piece : ")) NFenetre = int (input ("Nombre de fenetres : ")) NPorte = int (input("Nombre de portes : ")) # Calcul de la surface des murs SurfaceDesMurs = \ 2 * (LargeurPiece * HAUTEUR_MUR + LongueurPiece * HAUTEUR_MUR) # Calcul de la surface des fenetres SurfaceDesFenetres = \ NFenetre * LARGEUR_FENETRE * HAUTEUR_FENETRE # Calcul de la surface des portes SurfaceDesPortes = \ NPorte * LARGEUR_PORTE * HAUTEUR_PORTE # Calcul de la surface a peindre SurfacePeinture = \ SurfaceDesMurs - SurfaceDesFenetres - SurfaceDesPortes # Affichage du resultat print ("Surface a peindre : "+ str(SurfacePeinture))
Pour améliorer la lisibilité du code, nous avons ajouté des commentaires. En Python un commentaire est une ligne de code commencant par #.
Remarquez également que le code de cette procédure est bien séparé en trois parties: lecture des données, traitement des données, puis affichage des résultats. Essayez également de procéder de cette manière.
Voici un résumé de tous les conseils vus précédemment: