Coding style

The Coding style we use in the development of VLE comes from classical open source projects like the Linux or BSD. The following paragraphs describe the rules to follow when you want to integrate a patch into VLE.

Class declaration
In the declaration of a class, we define in a specific order: typedef, attributes and functions in the following protection: public, protected and private. This order allows the user to quickly see the functionality of your class. For example:

All class and function must be attached to a namespace. Do not pollute the global space. In VLE we use a simple rule for the name of the namespaces: a repertory = a namespace.

Règles de nommage

 * dossier : Les noms de répertoires sont en minuscules afin de respecter le nom des namespaces.
 * namespace : Tout en minuscule, comme le noms des dossiers.
 * classe : Les premières lettres de chaque nom en majuscule.
 * méthode : la première lettre des noms de méthodes commence par une minuscule.
 * attribut d'une classe : il commence par la lettre minuscule m (pour member) suivie d'une majuscule.

Tabulations et espaces
Une fonction ne peut dépasser les limites de 50 lignes et 80 colonnes pour permettre une meilleure lecture du code. De même, les indentations se font sur 4 caractères alors que la taille d'une tabulation est de 8 caractères. Enfin, une fonction ne peut contenir plus de six variables locales, et une fonction ou un membre d'une classe ne peut contenir plus de six paramètres locaux.

Dans le même ordre d'idée :

pointeurs :
 * sur un ligne se trouve une seule instruction :
 * Pas d'espace entre un nom de fonction et la parenthèse :
 * Entrez un espace après if, while, switch, etc. :
 * Entrez un espace après une virgule et un point-virgule :
 * Entrez un espace avant et après =, +, /, etc. :
 * Pas d'espace entre le type de la variables et les cractères références et
 * Pas d'espace entre les opérateurs d'adresses et les variables :

Placement des accolades
La politique de placement des accolades est celles définient par Kernighan et Ritchie c'est-à-dire, une accolade se trouve sur l'instruction de la ligne sauf dans le cas d'une définition de fonction. Les exemples suivants montrent les différents cas de placement :

Gérer les erreurs via les exceptions
L'environnment VLE utilise les exceptions pour détecter les erreurs en cours de fonctionnement. Le fichier vle/utils/Exception.hpp définit quelques classes d'exceptions. Si vous souhaitez lever une exception, celle-ci doit hériter de la classe std::exception (défini dans la bibliothèque standard). Vous pouvez utiliser les exceptions standards :


 * std::logic_error : pour reporter les problèmes survenus dans la logique interne du programme.
 * std::domain_error : pour reporter une erreur de domaine dans le sens mathématique du terme.
 * std::invalid_argument : pour reporter les arguments invalides des fonctions.
 * std::length_error : quand un objet est construit avec une taille qui excède la taille maximum permise.
 * std::out_of_range : représente les arguments dont les valeurs dépassent les limites comme l'accès à un élément d'un tableau.
 * std::runtime_error : représente les erreurs ne peuvant être révéler que lors de l'exécution du programme.
 * std::range_error</tt> : Pour reporter une erreur de limite sur les types.

Ou les exceptions définies dans VLE (fichier vle/utils/Debug.hpp</tt>) :


 * vle::utils::FileError</tt> : pour reporter une erreur lors de l'accès à un fichier (détection, ouverture, lecture, écriture).
 * vle::utils::ParseError</tt> : pour reporter une erreur lors de la  lecture d'un fichier \texttt{XML}.
 * vle::utils::InternalError</tt> : pour reporter une erreur interne  dans un programme.

Assertions
Une méthode très simple pour détecter les erreurs dans un programme est d'utiliser les fonctions d'assertions définies dans le fichier cassert</tt>. Par exemple :

Attention cependant la commande assert</tt> fait un appel à abort</tt> ce qui a pour effet de fermer l'application sur une erreur. Si vous voulez juste informer l'appelant de votre méthode de l'arrivée d'une erreur, il faut préférer utiliser une levée d'exception classique :

Commentaires
Les commentaires font partis intégrante d'un programme. Dans la plateforme VLE, toutes les fonctions doivent contenir des commentaires décrivant le rôle de la fonction et non son fonctionnement. Aucun commentaire ne doit venir s'insérer dans le code de la fonction.

Le programme doxygen (Une description complète du système doxygen se trouve sur le site : http://www.doxygen.org), à partir des sources commentées et de balises spéciales, réalise une documentation complète.

Les fichiers du projet d'extension .cpp</tt> et .hpp</tt> possèdent une entête identique définissant la licence (de type GNU : GPL) et les informations sur les auteurs :