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.
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/
Dans
news:m23c51agu1.fsf@lns-th2-12-82-64-188-224.adsl.proxad.net,
J'ai déjà eu à réprendre du code sans
la moindre indentation, c-à-d quelque chose comme :
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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
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/
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/
Dans news:0n8mc090h8qjh0hg75hgnm37n8jdqc2cd1@4ax.com, Fabien LE
On Fri, 11 Jun 2004 08:55:39 -0400, "Michel Michaud"
<mm@gdzid.com> 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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
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/
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
Fabien LE LEZ <gramster@gramster.com> writes:
On 11 Jun 2004 23:57:19 +0200, James Kanze <kanze@gabi-soft.fr> 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 :-).
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
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 !
"James Kanze" <kanze@gabi-soft.fr> a écrit dans le message de
news:m2brjpahc0.fsf@lns-th2-12-82-64-188-224.adsl.proxad.net...
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 !
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 !
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
On Sat, 12 Jun 2004 12:33:28 -0400, "Michel Michaud" <mm@gdzid.com>
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;
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
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
On 12 Jun 2004 00:08:06 +0200, James Kanze <kanze@gabi-soft.fr> 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 ?
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 :
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 :
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 :
| 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
James Kanze <kanze@gabi-soft.fr> writes:
| Gabriel Dos Reis <gdr@cs.tamu.edu> writes:
|
| |> James Kanze <kanze@gabi-soft.fr> writes:
|
| |> | BlueR <blueremi@free.fr_supprimer_> 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.)
| 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
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
"Michel Michaud" <mm@gdzid.com> writes:
|> Dans news:0n8mc090h8qjh0hg75hgnm37n8jdqc2cd1@4ax.com, Fabien LE
|> > On Fri, 11 Jun 2004 08:55:39 -0400, "Michel Michaud"
|> > <mm@gdzid.com> 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
|> 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