OVH Cloud OVH Cloud

Accolades : conventions d'ecriture

113 réponses
Avatar
Fabien LE LEZ
Bonjour,

J'écris systématiquement l'accolade ouvrante et l'accolade fermante
sur une même colonne :

if (condition)
{
action;
}

Cette convention d'écriture me permet de voir immédiatement la
structure en blocs, d'autant que la plupart des éditeurs ont une
couleur spéciale pour les accolades.

Aussi ai-je énormément de mal à lire du code écrit avec l'autre type
de convention :

if (condition) {
action;
}

J'aimerais savoir si les gens qui ont l'habitude des deux conventions,
arrivent à lire aussi facilement la deuxième que la première. Et,
accessoirement, s'il existe des éditeurs capables de mettre les deux
éléments de même "niveau" (i.e. "if (condition) {" et "}") de la même
couleur.

Merci d'avance...

10 réponses

Avatar
Michel Michaud
Dans
news:,
"PurL" writes:
void mafonc()
{
code;
}

autant pour le if je pourrais m'y faire, mais pour une
fonction je ne trouve pas ca jolie...



En plus, vi (ni vim, ni viper) ne sait le reconnaître comme
début d'une fonction.


Mauvais outil, changer d'outil :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Michel Michaud
Dans
news:,
J'ai déjà eu à réprendre du code sans
la moindre indentation, c-à-d quelque chose comme :

if ( condition ) {
quelqueChose ;
autreChose ; }
etEncore ;

Ou même une fois, une indentation aléatoire, y compris (une
fois au
moins) :

if ( condition )
quelqueChose ;
autreChose ;
etEncore ;


Personne n'a parlé d'un style décrit dans Code Complete sous le
nom de « Endline Layout », probablement parce que personne ne
l'utilise en C/C++/etc. Exemple Pascal tiré du livre :

if ( SoldCount > 1000 ) then begin
Markdown := 0.10;
Profit := 0.05
end
else Markdown := 0.05;

Cet exemple est décrit par « A rare Pascal example example in
which endline layout works acceptably ». Par contre, le style
n'est pas conseillé et on donne aussi cet exemple décrit comme
« A more typical Pascal example, in which endline layout breaks
down » (je l'ai modifié pour qu'il rentre ici sur un nombre de
colonnes acceptables) :

if (SoldCount>10 and PrevMonthSales>10) then
if (SoldCount>100 and PrevMonthSales>10) then
if (SoldCount>1000) then begin
Markdown:= 0.10;
Profit := 0.05
end
else Markdown:= 0.05;
else Markdown:= 0.025
else Markdown:= 0.0;

Atroce n'est-ce pas... En fait, je ne suis même pas sûr des règles
réelles imposées par ce style !

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans news:, Fabien LE
On Fri, 11 Jun 2004 08:55:39 -0400, "Michel Michaud"
wrote:

Trouve un vrai exemple de 27 lignes ou plus et
on pourra discuter !


namespace MonNamespaceAMoi
{
/* Ici, trois définitions de classes, vingt-deux fonctions,
pour un total de 513 lignes */
} //end namespace MonNamespaceAMoi


On cherche un exemple d'un bloc de code de 27 lignes ou plus. Ce
n'est pas le cas ici non plus ! (probablement que tu n'en fais
donc réellement jamais !)

(En passant, je mets moi aussi les accolades de namespace alignés
à gauche et non pas décalés comme les blocs de code...)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
drkm
Fabien LE LEZ writes:

On 11 Jun 2004 23:57:19 +0200, James Kanze wrote:

Jamais. Le type va sur une ligne seule. De façon à ce que :

grep ^mafonc *.cc

trouve la définition de la fonction, et que sa définition.


N'existe-t-il pas de "grep spécialisé", capable de repérer la
définition d'une fonction automatiquement, sans imposer ce style ?


On rentre dans les programmes *tags et leurs variantes. Il s'agit
grosso-modo d'analyseurs syntaxiques construisant des bases de données
d'informations sur les identificateurs : type, fichier et ligne de
déclaration, définition, utilisations, etc. ; et de programmes
associés de questionnement de ces bases de données.

Il existe des interfaces pour Emacs, au moins (et d'autres éditeurs,
je suppose). Emacs pour lequel il existe également CEDET, dont fait
partie Semantic, un portage de Bison en Emacs Lisp.

Je pense qu'un « grep spécialisé » doit nécessairement passer par un
parseur un peu évolué, si tu veux des informations utiles. Et ne pas
être contraint d'identifier les fonctions par la seule présence d'un
'{' en colonne 0 :-).

--drkm


Avatar
Jean-Noël Mégoz
"James Kanze" a écrit dans le message de
news:
Jamais. Le type va sur une ligne seule. De façon à ce que :

grep ^mafonc *.cc

trouve la définition de la fonction, et que sa définition.



Pas besoin de grep avec VisualC++...
On peut indenter comme on veut, il retrouve toujours ses billes !

Avatar
Fabien LE LEZ
On Sat, 12 Jun 2004 12:33:28 -0400, "Michel Michaud"
wrote:

if ( SoldCount > 1000 ) then begin
Markdown := 0.10;
Profit := 0.05
end
else Markdown := 0.05;

Cet exemple est décrit par « A rare Pascal example example in
which endline layout works acceptably ».


Arf... C'est le genre de méthode qui marche bien si tu as un écran
très très large...
Ça existe, des écrans 16/9 pour PC ?

if (SoldCount>10 and PrevMonthSales>10) then
if (SoldCount>100 and PrevMonthSales>10) then
if (SoldCount>1000) then begin
Markdown:= 0.10;
Profit := 0.05
end
else Markdown:= 0.05;
else Markdown:= 0.025
else Markdown:= 0.0;


Mignon.


--
;-)
FLL, Epagneul Breton

Avatar
Fabien LE LEZ
On 12 Jun 2004 00:08:06 +0200, James Kanze wrote:

if ( condition )
quelqueChose ;
autreChose ;
etEncore ;


Dans des cas comme ça, tu as la possibilité de passer une moulinette
sur le code pour y rajouter une indentation ?


--
;-)
FLL, Epagneul Breton

Avatar
drkm
Fabien LE LEZ writes:

On 12 Jun 2004 00:08:06 +0200, James Kanze wrote:

if ( condition )
quelqueChose ;
autreChose ;
etEncore ;


Dans des cas comme ça, tu as la possibilité de passer une moulinette
sur le code pour y rajouter une indentation ?


C-x h C-M-

Ou

(define-key c++-mode-map [f9]
(lambda ()
"Réindente le buffer entier."
(interactive)
(indent-region (point-min) (point-max))))

et il suffit d'appuyer sur F9 pour réindenter un fichier en entier.
Et les mêmes facilités pour définir quelques petites fonctions afin de
pouvoir faire depuis la console :

zsh> alias reindenter="emacs -batch
-l ~/.emacs -l drkm-indent
-f drkm-reindent-batch"
zsh> reindenter ~my-project/**/*.cc

Est-ce bien ce que tu appelles une moulinette ?-)

--drkm


Avatar
Gabriel Dos Reis
James Kanze writes:

| Gabriel Dos Reis writes:
|
| |> James Kanze writes:
|
| |> | BlueR writes:
|
| |> | |> Je suis aussi cette disposition, et éventuellement s'il y a
| |> | |> plus de 3-4 blocs imbriqués et que je commence à y voir moins
| |> | |> clair je rajoute un commentaire sur l'accolade fermante.
|
| |> | S'il y a 3 ou 4 blocs imbriqués, la fonction est trop compliquée.
|
| |> Je suppose que tu as laissé tomber l'utilisation des classes locales
| |> ? ;-)
|
| Pas le choix. Les auteurs de la norme à décider qu'elles ne marchent pas
| complètement. (Neuf fois sur dix, quand je veux une classe locale, c'est
| pour instantier un template.)

Mais et avant ?

-- Gaby
Avatar
James Kanze
"Michel Michaud" writes:

|> Dans news:, Fabien LE
|> > On Fri, 11 Jun 2004 08:55:39 -0400, "Michel Michaud"
|> > wrote:

|> >> Trouve un vrai exemple de 27 lignes ou plus et
|> >> on pourra discuter !

|> > namespace MonNamespaceAMoi
|> > {
|> > /* Ici, trois définitions de classes, vingt-deux fonctions,
|> > pour un total de 513 lignes */
|> > } //end namespace MonNamespaceAMoi

|> On cherche un exemple d'un bloc de code de 27 lignes ou plus. Ce
|> n'est pas le cas ici non plus ! (probablement que tu n'en fais donc
|> réellement jamais !)

|> (En passant, je mets moi aussi les accolades de namespace alignés à
|> gauche et non pas décalés comme les blocs de code...)

Curieusement, moi, je les mets sur la même ligne que le mot clé
namespace, or que je les mets sur la ligne suivante pour les classes et
les fonctions. Je ne pourrais pas en donner une raison, en revanche ; je
ne sais pas pourquoi je fais ainsi moi-même. Peut-être que je ne veux
pas m'arrêter à un namespace quand je fais ]] en vi:-).

Aussi, je n'indente pas le code dans un namespace. Encore, il y a au
moins la même raison que ci-dessus -- si je l'indente, ]] n'en trouve
pas le début. Mais aussi, qu'un namespace, psychologiquement pour moi,
au moins, ne fait pas vraiment partie du « code ». En général,
jusqu'ici, je ne m'en servais pas, mais quand je m'en sers, il s'avère
que de toute façon, tout le fichier est dans un seul namespace.

À l'exception des namespaces anonymes, et là, j'avoue que ce que je fais
ne me satisfait pas entièrement. Je suis encore à la récherche d'une
solution.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34