# Programmation/Règles de programmation

* Historique
* Abstraction

## Concepts de base

* Commentaires
* Instructions
* Variables
* Types
* Expressions
* Comparaisons
* Instructions de contrôle
* Entrées-sorties

## Concepts spécifiques

* Manipulation de chaînes
* Procédures et fonctions
* Gestion de mémoire
* Gestion des exceptions
* Paradigmes de programmation
* Programmation séquentielle
* Programmation concurrente
* Programmation impérative
* Programmation orientée objet
* Programmation générique
* Programmation orientée aspect
* Programmation fonctionnelle
* Programmation logique
* Programmation par contrat

## Logiciels

* Eclipse
* NetBeans
* PhpStorm
* PyCharm
* SciTE
* Visual Studio Code

## Annexes

* Structure et style
* Règles de programmation
* Langages
* Historique
* Abstraction

## Concepts de base

* Commentaires
* Instructions
* Variables
* Types
* Expressions
* Comparaisons
* Instructions de contrôle
* Entrées-sorties

## Concepts spécifiques

* Manipulation de chaînes
* Procédures et fonctions
* Gestion de mémoire
* Gestion des exceptions
* Paradigmes de programmation
* Programmation séquentielle
* Programmation concurrente
* Programmation impérative
* Programmation orientée objet
* Programmation générique
* Programmation orientée aspect
* Programmation fonctionnelle
* Programmation logique
* Programmation par contrat

## Logiciels

* Eclipse
* NetBeans
* PhpStorm
* PyCharm
* SciTE
* Visual Studio Code

## Annexes

* Structure et style
* Règles de programmation
* Langages
[ Modifier le sommaire ]

## Qu'est-ce qu'une règle de programmation ?

Une règle de programmation informatique est la description de contraintes à respecter quand on écrit un logiciel. Il existe plusieurs types de règles de programmation :
* les règles de nommage : elles définissent la façon de nommer les identificateurs utilisés dans une application de façon à faciliter la lecture du code et à aider à détecter des erreurs.
    Exemple : les noms des constantes doivent être en lettres capitales. Les variables, fonctions et classes en CamelCase ou snake case.
* les règles permettant de faciliter le portage informatique des applications : elles identifient des constructions du langage de programmation qui peuvent avoir un comportement différent selon le système d'exploitation ou le microprocesseur.
    Exemple : deux nombres flottants ne doivent pas être comparés pour une stricte égalité (mais arrondis).
* les règles protégeant des pièges d'un langage
    Exemple en C : utiliser la condition Yoda pour ne pas confondre le "=" d'affectation et le "==" de comparaison. Cela consiste à toujours placer l'opérande variable à droite (ex : if 1 == x).
* les règles de présentation pour faciliter la relecture du code
    Exemple : mettre une seule instruction par ligne.
* les règles facilitant la maintenance des applications
    Exemple : en C, C++ et Java, mettre les blocs if et then d'un test entre accolades.
* les règles limitant la complexité du code
    Exemple : limiter la complexité des expressions à 4 opérateurs.
* les règles permettant d'améliorer la structuration du code
    Exemple : déclarer les variables partagées dans un fichier header.

## Vérification des règles de programmation

La vérification d'un ensemble de règles de programmation est généralement faite lors d'un audit de code. Elle peut être réalisée soit manuellement par lecture du code, soit automatisée par un outil qui localise les violations des règles.

## Outils de vérification automatique de règles de programmation

* AdaControl : cet outil permet de vérifier des règles de programmation pour Ada.
* CodeCheck : cet outil permet de vérifier des règles de programmation pour C et C++.
* Logiscope Rulechecker : cet outil permet de vérifier des règles de programmation pour les langages C, C++, Ada et Java.
* En PHP, il existe phpcs, phpmd, phpstan, et psalm.

## Règles de programmation standardisées

* MISRA C : ensemble de règles initialement réalisées pour l'automobile et maintenant largement utilisées.
* MISRA C++ : version de MISRA C adaptée au langage C++.
* JSR pour Java.
* PSR pour PHP.