Les règles de codage C++ de Google : méconnaissance du langage ou principe de précaution ?

Le , par LittleWhite, Responsable 2D/3D/Jeux
Bonjour,

J'écris un post, d'abord pour signaler la présence de ce document: http://google-styleguide.googlecode....k/cppguide.xml
Je m'excuse pour tout ce qui ne lise pas l'anglais ...

Je voudrais remarquer deux points assez interessant, vu que l'on en parle souvent sur ces forums:

- http://google-styleguide.googlecode....xml#Exceptions
We do not use C++ exceptions.

Nous n'utilisons pas les exceptions C++

- http://google-styleguide.googlecode....line_Functions
Define functions inline only when they are small, say, 10 lines or less.

Définissez les fonctions en inline lorsqu'elle sont petite, disons, 10 lignes ou moins.

Je vous laisse découvrir le reste


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de gl gl - Rédacteur https://www.developpez.com
le 07/06/2010 à 22:13
Citation Envoyé par ac_wingless Voir le message
Désolé, mais vu ce sur quoi tourne la discussion, je pense qu'il faut un peu remettre en contexte les règles de codage et à quoi elles servent.

<snip>
Je comprends ton propos et globalement je suis assez d'accord avec ce que tu dis.

Maintenant, commenter, expliquer ou discuter de ce type de règles hors d'un contexte particulier ne signifie pas forcément casser du sucre sur le dos de Google.

Partager les différents points de vue est assez intéressant (même si, dans la forme, certains propos peuvent paraitre un peu extrême).

En outre, comme la fait remarque Loic dans un message, si cela permet de faire comprendre les limites et raison d'être de certaines règles et qu'elles sont valables (enfin pas toujours) dans un contexte particulier et donc pas transposables tel quel ailleurs - bref si cette discussion permet de pousser les gens à réfléchir à la mise en place de règles appropriées plutôt que de récupérer des règles toutes faites mais inapplicables - je pense que c'est positif.
Avatar de ox223252 ox223252 - Futur Membre du Club https://www.developpez.com
le 29/06/2017 à 14:17
Aujourd'hui je viens de me faire gronder car mes accolade sont sur une ligne vide et car mes indentation sont de d'une tabulation, alors que c'est pas ce qui est marqué dans les regles google (non je ne travail pas chez google et le projet ne suit pas de regles particulière )

Je me demande qui à pondu les règles googles, je me demande si il programmes , car après 10h sur mon éditeur de texe une indentation de deux espaces et illisible ^^.

Sinon plus globalement j'ai travaillé pour des projets dans le militaire et dans le médicale, et je peux vous garantir que les règles google ils s'en tamponnes, pour eux ce qui compte c'est la simplicité et la lisibilié du truc qui compte vaiment. Et quand on voit leurs raisons on peut se dire qu'ils ont raison.

par exemple ça ils en veulent pas :
Code : Sélectionner tout
if(test==0&&truc>2)machin=3;
c'est remplacé par ça :
Code : Sélectionner tout
1
2
3
4
if ( ( l_uiTest == 0 ) && ( l_uiTruc > 2 ) )
{
	l_uiMachin = 3;
}
Ca c'est vérifié par un logiciel et tout code qui ne correspont pas aux éxigences doit être éxpliqué et justifié, car la vie de gens est en jeux derrière
Avatar de Luc Hermitte Luc Hermitte - Expert éminent https://www.developpez.com
le 29/06/2017 à 14:40
En matière d'indentation, il y a deux règles, valables partout:
1- on indente sous les structures de contrôles, et dans les définitions (struct & co, fonctions...)
2- on ne mélange pas tab et espace.

Après tab ou espace, chacun a des arguments pour l'un ou pour l'autre. Mais souvent, il s'agit de mélanger des outils qui ne sont pas configurés pareil, voire pas configurés.

Pour le reste, c'est toujours la problématique que des gens veulent un style uniforme partout. Certains sont très rigides là dessus, et il ne s'agit pas toujours des premiers concernés (i.e. les développeurs).

Et vu qu'il s'agit d'un déterrage, on peut dire que depuis les CppCoreguidelines sont sorties et qu'elles méritent d'être employées pour dépoussiérer bien des choses que l'on utilise.
Avatar de ox223252 ox223252 - Futur Membre du Club https://www.developpez.com
le 29/06/2017 à 14:56
Citation Envoyé par Luc Hermitte Voir le message
Et vu qu'il s'agit d'un déterrage, on peut dire que depuis les CppCoreguidelines sont sorties et qu'elles méritent d'être employées pour dépoussiérer bien des choses que l'on utilise.
J'avais pas vu la date, mais le sujet reste d'actualité
Avatar de foetus foetus - Expert confirmé https://www.developpez.com
le 29/06/2017 à 15:10
Citation Envoyé par Luc Hermitte Voir le message
2- on ne mélange pas tab et espace.
Si on peut le faire les tabulations c'est pour indenter (début de lignes - à gauche), et les espaces pour "l'ascii art" (en fin de lignes - à droite)

Exemple:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
    var a    = 0;
    var a1   = 0;
    var a2   = 0;
    var b    = 0;
    var b01  = 0;
    var b02  = 0;
    var c    = 0;
    var c001 = 0;
    var c002 = 0;
Avatar de Bktero Bktero - Modérateur https://www.developpez.com
le 29/06/2017 à 15:21
Notez que les règles de codage de Google sont désormais ici : https://google.github.io/styleguide/cppguide.html

L'ASCII art c'est de la cr***e !
Avatar de Luc Hermitte Luc Hermitte - Expert éminent https://www.developpez.com
le 29/06/2017 à 16:48
Citation Envoyé par foetus Voir le message
Si on peut le faire les tabulations c'est pour indenter (début de lignes - à gauche), et les espaces pour "l'ascii art" (en fin de lignes - à droite)
Effectivement, c'est la seule façon intelligente de les mixer.

Dans les faits il n'y a que emacs qui sache faire ça je crois. Du coup, ce n'est pas vraiment utilisable sur un projet où notepad++, emacs, eclipse, QtCreator sont chacun utilisés par une personne différente.
Avatar de Mickael_Istria Mickael_Istria - Membre chevronné https://www.developpez.com
le 30/06/2017 à 9:28
Citation Envoyé par foetus Voir le message
Si on peut le faire les tabulations c'est pour indenter (début de lignes - à gauche), et les espaces pour "l'ascii art" (en fin de lignes - à droite)
Tout a fait d'accord! J'avais chercher a repandre la bonne parole dans un blog il y a quelques mois: https://mickaelistria.wordpress.com/...bs-and-spaces/
L'air de rien ce debat est serieux, il concerne la lisibilite/portabilite du code et il contient des notions de models vs rendering qui sont importantes dans pas mal des domaines. Meme si je n'en ferais pas un critere de selection important en entretien d'embauche, je jetterai le pave dans la mare quand meme pour voir comment reagit la personne (si elle comprend deja la notion de model/rendering, si elle sait pourquoi des gens preferent 2-4-8 espaces pour une tab selon le type de fichier et l'editeur, si elle est ouverte a la discussion ou si elle est bornee en disant "Chez Google ils font comme ca, c'est que c'est mieux" sans presenter d'esprit critique, ...)

Citation Envoyé par Luc Hermitte Voir le message
Dans les faits il n'y a que emacs qui sache faire ça je crois. Du coup, ce n'est pas vraiment utilisable sur un projet où notepad++, emacs, eclipse, QtCreator sont chacun utilisés par une personne différente.
Tous les editeurs savent inserer une tab quand tu appuies sur tab, et un espace quand tu appuies sur espace... A un moment, c'est aussi au developpeur de se poser la bonne question sur 1. ce qu'il cherche a inserer et 2. ce que l'editeur insere effectivement.
Dans Eclipse IDE, je recommande a tous les utilisateurs avec lesquels j'ai l'occasion de passer du temps a code d'afficher les tabs/espaces avec des caracteres en gris clair ( http://help.eclipse.org/oxygen/topic...ditorprefs.htm > "Show whitespace characteres" ). Jusqu'ici j'ai pas eu de retour negatif sur cette pratique et j'ai eu quelques commentaires tres positifs du genre "ouah, c'est degueulasse! Je savais pas qu'on indentait si mal!"
Avatar de Luc Hermitte Luc Hermitte - Expert éminent https://www.developpez.com
le 30/06/2017 à 10:24
Si c'est à la main que l'on indente en appuyant explicitement sur la touche tab puis des espaces pour aligner les lignes suivantes, on a perdu, et il faut changer d'outil ou apprendre à se servir de celui que l'on utilise. C'est à l'éditeur de prendre en charge cela. Dit autrement, il ne faut pas à avoir à appuyer sur tab, mais juste sur: "aller à une nouvelle ligne" (a.k.a. <entrée>), ou "réindente la(/es) ligne(s) courante(s)" (utile en cas de refactoring/import de code). Si on appuie explicitement sur <tab>, cela veut dire que la tâche de mise en conformité avec le style retenu pour le projet n'est pas automatisable.

NB: je ne fais pas référence au cas trivial de
Code : Sélectionner tout
1
2
<destabs>auto i   = 42;
<destabs>auto str = "toto"s;
Mais à celui de
Code : Sélectionner tout
1
2
3
<destabs>auto r   = expression(complexe)
<destabs>         + une(autre(expression * complexe)) // ici je veux bien que l'on intervienne pour aligner le + sur le =, et encore l'éditeur doit proposer de lui-même un retrait par défaut à défaut d'être intelligent
<destabs>         - une(dernière);                    // ici, l'indentation doit être automatique!

La difficulté arrive quand en début de ligne on commence par des tabulations pour indenter une fois par niveau d'imbrication, et autant de fois que nécessaire pour aligner avec la ligne précédente. Tous les outils ne savent pas détecter une continuation de la précédente expression et permettre d’enchaîner tabs puis espaces dans ce cas là, sans parler des développeurs qui pourraient utiliser notepad qu'ils ne verraient pas de différence dans leur process d'indentation.

C'est pour cela que pour le coup je prêche pour le nivellement par le bas, et que l'indentation intelligemment mixée... je n'y crois pas sur des équipes mixtes en termes d'environnements de développement, et en termes de profils de développeurs.

NB: pour montrer qu'ils indentent comme des pieds (/avec des outils mal paramétrés), je les envoie sur le portail web du gestionnaire de version, souvent les mélanges d'indentation y sont criants. En général, c'est la conséquence de projet qui impose d'indenter avec des espaces, et d'outils qui n'ont pas été configurés.

En ce qui me concerne, dans tous les cas, l'indentation (avec ou sans alignement supplémentaire) doit être automatisée : si on passe un outil sur le code, c'est l'outil qui a raison. A nous de bien configurer l'outil.
Avatar de Mickael_Istria Mickael_Istria - Membre chevronné https://www.developpez.com
le 30/06/2017 à 11:34
Citation Envoyé par Luc Hermitte Voir le message
Si c'est à la main que l'on indente en appuyant explicitement sur la touche tab puis des espaces pour aligner les lignes suivantes, on a perdu, et il faut changer d'outil ou apprendre à se servir de celui que l'on utilise. C'est à l'éditeur de prendre en charge cela. Dit autrement, il ne faut pas à avoir à appuyer sur tab, mais juste sur: "aller à une nouvelle ligne" (a.k.a. <entrée>), ou "réindente la(/es) ligne(s) courante(s)" (utile en cas de refactoring/import de code).
La plupart des outils repetent tout simplement l'identation de la ligne precedente sur un retour a la ligne. C'est generalement une heuristique tres satisfaisante. Ensuite, les outils plus avances (Eclipse JDT par exemple) ont en place un formatter qui comprend mieux le langage. L'affichage des whitespaces n'est pas contradictoire avec le fait que l'outil fais le gros du boulot, ca permet surtout de se rendre compte de quand on fait quelque chose de mal et de le corriger immediatement.

le style retenu pour le projet n'est pas automatisable.
Je ne suis pas adepte de l'idee qu'un style doive etre automatisable. Il doit surtout etre desautomatisable des que necessaire, eg quand un developpeur humain pense qu'un autre developpeur humain preferera une ligne de 81 caracteres. La finalite c'est la lecture humaine, pas l'automatisation.

Pour montrer qu'ils indentent comme des pieds (/avec des outils mal paramétrés), je les envoie sur le portail web du gestionnaire de version, souvent les mélanges d'indentation y sont criants. En général, c'est la conséquence de projet qui impose d'indenter avec des espaces, et d'outils qui n'ont pas été configurés.
C'est donc une correction a posteriori. Afficher les whitespaces dans l'editeur permet de se rendre compte du probleme beaucoup plus tot, et evite des allers-retours. "fail fast"!
Avatar de ox223252 ox223252 - Futur Membre du Club https://www.developpez.com
le 30/06/2017 à 15:20
Citation Envoyé par Mickael_Istria Voir le message
La finalite c'est la lecture humaine, pas l'automatisation.
Enfin quelqu'un qui à du bon sens, c'est chiant un manageur / chef de projet qui te dit c'est pas bien, car Google ne fait pas comme ça . Bon je retourne me faire emmerder pour les indentation pas Googliennes .
Offres d'emploi IT
Développeur Web FULL-STACK
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
Développeur WEB PHP F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
RESPONSABLE WEB ANALYTICS F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique C++