[DEBAT] Vous programmez comment ?

Vous programmez comment ? [DEBAT] - Programmation

Marsh Posté le 31-05-2001 à 14:35:58    

Voila un post qui peut etre sympa si tout le monde s'y met.
Je m'explique : je ne supporte pas le code mal indenté, car je trouve qu'il est bcp moins lisible. Et Les gens qui font ça pour 'economiser' des lignes, je leur rie a la gueule. Apres, yen a d'autre, c parce qu'ils preferent. Là c chacun ces gouts.
Genre :
public int somme(int x, int y)
{
    return (x+y);
}
 
voila ça j'aime bien
public int somme(int x,int y){
    return x+y;
}
 
çà je trouve que c bcp moins lisible.
c pareil pour tout les blocs d'ailleurs; j'a

Reply

Marsh Posté le 31-05-2001 à 14:35:58   

Reply

Marsh Posté le 31-05-2001 à 14:36:59    

meeerrrde
bref pour tout les blocs, j'aime bien quand l'accolade est a la ligne au dessous, au meme niveau puis les lignes qui suivent sont indentées. Je trouve ça plus lisible.
 
Et vous, c quoi votre opinion ?

Reply

Marsh Posté le 31-05-2001 à 14:40:17    

Moi j'ai toujours codé comme ton second exemple, mais maintenant que d'autres doivent lire le même code, je me suis mis à la première méthode.

Reply

Marsh Posté le 31-05-2001 à 14:44:50    

La premiere methode est mieux, car quand tu as plein de blocs imbriques, tu vois tout de suite comment tout s'organise...
 
et d'ailleurs a ce propos emacs rulez -> de loin le meilleur editeur decode, meme s'il lui manque des facilites que d'autres ont (comme VC++ ou CW ou tu peux sauter directement a une fonction donnee, voire le prototype automatiquement quand tu fais un appel a une fonction...).

Reply

Marsh Posté le 31-05-2001 à 14:45:34    

1ere methode meme si sun recomende la 2eme

Reply

Marsh Posté le 31-05-2001 à 14:46:54    

c fou, tout le monde est d'accord avec moi, mais personne le fait ; je tombe toujours sur code sale... du coup, je passe 1/2 heure a le mettre en page avant meme d'essayer d'en lire une seule ligne ...

Reply

Marsh Posté le 31-05-2001 à 14:47:41    

moi je fais comme ca :

Code :
  1. public int somme(int x,int y){
  2.   return x+y;
  3.   }
  4. if (toto=1) {
  5.   parité_toto=1;
  6.   }
  7. else {
  8.   parité_toto=0;
  9.   }
  10. ou comme ca, ca depend des jour et si il n'y a qu'une ligne :
  11. if (toto=1) parité_toto=1;
  12.   else parité_toto=0;
  13. attention, je sais qu'il existe une manier plus simple faire ce que j'ai fais, mais c'est pour l'exemple
  14. parite_toto=toto & 1;


 
parcontre tu as oublié encore une autre solution encore pire :  
 
public int somme(int x,int y){ return x+y; }

Reply

Marsh Posté le 31-05-2001 à 14:49:43    

La première Méthode parce que c'est plus claire quand effectivement tu as plusieurs blocs imbriqués.

Reply

Marsh Posté le 31-05-2001 à 14:52:03    

y'a celui là aussi :
 
public int somme(int x, int y)
{
    return (x+y);}
 
moi je le trouve lisible.

Reply

Marsh Posté le 31-05-2001 à 14:52:11    

Pour être plus lisible, moi je fais ainsi :

Code :
  1. public int somme(int Int_x, int Int_y)
  2. {
  3.     return (Int_x+Int_y);
  4. }


 
Toutes mes variables sont "préfixées" de leur type.
 
Pour le fun, j'avais vu il y a qq temps des codes intentionnellement obscurs, un concours étant même organisé tous les ans. Un des must était un code qui s'exécutait en C et en Bash sans erreur.
Si je le retrouve je le poste.
A+

Reply

Marsh Posté le 31-05-2001 à 14:52:11   

Reply

Marsh Posté le 31-05-2001 à 14:55:56    

Perso
 
public CMyClass::m_fniSomme(int iX, int iY) {
     return (iX + iY);
}

 

[edit]--Message édité par VisualC++--[/edit]


---------------
VT ... Vaucluse / Vrille(euse :sarcastic: ) c'est pareil tant qu'il y a l'humour :D
Reply

Marsh Posté le 31-05-2001 à 14:57:57    

[nom]lamatrice[/nom]
[citation]
y'a celui là aussi :  
 
public int somme(int x, int y)  
{  
    return (x+y);}  
 
moi je le trouve lisible.[/citation]
 
le pb de cette solution c'est qu'on ne voit pas la fin du bloc (c genant qd yen a plusieurs d'imbriqués).
par contre, moi aussi je fais
if (truc)
    exe;
else
    autre;
 
je met pas d'accolade qd il n'y a qu'une seule instruction. (faut pas exagerer non plus)

Reply

Marsh Posté le 31-05-2001 à 14:58:10    

Moi je préfère comme le premier exemple (et c'est ce que je fais d'ailleurs). Je pousse même le vice à séparer toutes mes opérandes de mes opérateurs par un espace et à mettre les virgules d'une certaine façon:
 
a = b + c;
 
public int somme (int x, int y, byte z)
{
  int resultat = x + y + (int) z;
 
  return resultat;
}
 
Ah oui j'ai oublié de dire: toujours une ligne vide avant le return et à chaque fois que je le sens dans mon code (notion différente, séparation de tâches (dans une même méthode, ...)
 
+ des COMMENTAIRES sur 12 lignes si j'estime çà nécessaire et celui à qui çà plait pas il a qu'à pas les lire :D


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 31-05-2001 à 14:59:58    

mmmm les commentaires... ça aussi j'utilise avec attention, car trop de commentaires alourdissent le code pour pas gd chose. Moi j'en met que pour des cas specifiques, sinon apres c de la paraphrase qui alourdissent.

Reply

Marsh Posté le 31-05-2001 à 15:10:17    

Ouais ben j'ai déjà eu à reprendre du code à quelqu'un et t'es bien content de les avoir.
De toute façon, ca change juste la longueur du fichier et ca tu t'en fous. Ca passe direct à la trappe à la compil.


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 31-05-2001 à 15:26:21    

bah je dis pas le contraire, mais les trucs styles :
//x reçoit 1
x = 1;
 
bin c pourri

Reply

Marsh Posté le 31-05-2001 à 15:28:19    

J'ai dit commentaires, pas crétineries :D


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 31-05-2001 à 15:34:41    

et dans la serie je veux que mon code soit (il)lisible
 
// definit le type INTEGER comme un type 'int' standard
#typedef int INTEGER;
 
// definit la variable INTEGER_i, qui est equivalente au type int (cf au dessus).  
// 1 est normalement un INTEGER (enfin un int), mais je precise que c'est un INTEGER des fois que le compilo me fasse des ennuis
INTEGER INTEGER_i= (INTEGER) 1;

Reply

Marsh Posté le 31-05-2001 à 15:36:04    

Perso, si y a pas de spécifs, je fais comme ça :
 

Code :
  1. int function zeFunk(int a)
  2. {
  3. int x = 0;
  4.     if (a == 0) {
  5.         x = 4;
  6.     }
  7.     else {
  8.         x = 3;
  9.     }
  10.     return x;
  11. }


 
mais en général, il faut toujours revenir à la ligne avant un {, ce que je fais sauf pour les if.


---------------
Pipiru piru piru pipiru pi
Reply

Marsh Posté le 31-05-2001 à 15:37:37    

et pourquoi sauf pour les if ? :sarcastic:

Reply

Marsh Posté le 31-05-2001 à 15:41:22    

Moi j'aime bien l'indentation de l'editeur Grasp.
Il est vraiment bien fait !
 
Il gere le C/C++, pour le Java etc...
 
Et je prefere :
 
int toto()
{
   return 1;
}
 
Br@scoo

Reply

Marsh Posté le 31-05-2001 à 15:58:46    

Dans JBuilder, tu peux lui dire un peu ton style? C'est pas mal mais ca pourrait être beaucoup plus précis.
Et puis il complète automatiquement les noms de fonctions: c'est pratique mais ca peut être très casse cou_lles quand il te met les parenthèses collées et vides si tu les préfères séparées et avec des paramètres ...


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 31-05-2001 à 16:04:22    

petoulachi a écrit a écrit :

et pourquoi sauf pour les if ? :sarcastic:




 
Le code est trop dispersé pour être lisible. On peut melanger avec un simple bloc imbriqué.


---------------
Pipiru piru piru pipiru pi
Reply

Marsh Posté le 31-05-2001 à 18:43:20    

assez proche de nomad, mais j'indente un peu plus pour les conditions:
function cible(targ1,targ2)
 {
  if (targ1!=''&& targ2!='')
   {
   parent.leftFrame.location=targ1;
   parent.mainFrame.location=targ2;
   }
 }
Les accolades sous le if sont au même niveau pour eviter les erreurs si il y en a plusieurs, (comme je débute.. :D )

 

[edit]--Message édité par LeMegaBlaireau--[/edit]

Reply

Marsh Posté le 31-05-2001 à 18:46:17    

moi en C/C++ j'ai tendance à faire des truc du genre
void fonction(int x, int y) {
   if(a) {
      ...
   } else {
      ...
   }
}
sinon en Delphi:
function fonction(x: integer; y: integer);
begin
   if a then
   begin
      ...
   end else
   begin
      ...
   end;
end;
et j'essaie de tj mettre les begin et end pcq sinon je me fais avoir à laisser un ; là où il faut pas.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 31-05-2001 à 18:48:46    

coucher et a l'envers :D

Reply

Marsh Posté le 31-05-2001 à 19:21:44    

et ben moi je fais des trucs du style:
 
function rien(){
///////debut de la fonction rien()/////////////
 
for(i=0;i<12;i++){
                 if(i>=3){
                         j=36;l++;}
                               else{kedal[i]=2}
                                               }
///////////////fin de la fction riezn()////////////////////////
}
 
des fois ca prend des kilometres mais moi jje mi  retrouve:-))


---------------
Do you serve a purpose,Or purposely serve?
Reply

Marsh Posté le 31-05-2001 à 19:22:44    

petoulachi> L'indentation du code est quelque chose de très important. Mais une mauvaise taille d'indentation peut aussi rendre illisible. Des enquêtes sur le sujets ont montré que le meilleur compromis était 3 ou 4. 8 étant beaucoup trop, et 1 ou 2 pas assez. Par ailleurs, augmenter la "profondeur" du code (i.e. avoir un grand niveau d'instructions imbriquées) rend le code difficile à lire ; en général, à partir de 4 ou 5, ça commence à faire déjà beaucoup et il vaut mieux découper en 2 sous-routines.
 
Maintenant, dans ton premier exemple, plusieurs enquêtes ont montré que le premier code était meilleur du point de vue lisibilité, par ce qu'il implémentait la notion de bloc abstrait :

Code :
  1. if XXXXXXXXXXXXXXXX
  2.         YYYYYYY
  3.         YYYYYYY
  4.         YYYYYYY
  5.    end if
  6.    while XXXXXXXXXXXXXXXX
  7.         YYYYYYY
  8.         YYYYYYY
  9.         YYYYYYY
  10.    end while


 
Par contre, les exemples d'indentation donnés par darkoli sont assez mauvais, car ils sont trompeurs : l'accolade fermante du then n'appartient pas au premier sous-bloc du if, mais au if lui-même. Idem pour celle du else.
Le problème de C, C++, Java et Pascal, c'est que certaines accolades (ou couples begin / end) sont parfois plus gênants qu'autre chose (essentiellement pour le if, d'ailleurs).

Code :
  1. int somme(int x, int y) {
  2.         return x + y;
  3.     }
  4.     int somme2(int n) {
  5.         int  somme = 0;
  6.         for (int i = 0; i < n; i++) {
  7.             somme += i;
  8.         }
  9.         return somme;
  10.     }
  11.     if (toto == 1) {
  12.         parité_toto = 1;
  13.     }
  14.     else {
  15.         parité_toto = 0;
  16.     }


 
Et contrairement à beaucoup de personnes, je pense que l'opérateur ternaire de C, utilisé à bon escient, peut être plus facile à lire qu'un if classique :

Code :
  1. parite_toto = ((toto == 1)
  2.                         ? 1
  3.                         : 0);


Une des conditions pour qu'il reste lisible est que les 2 valeurs possibles pour la variable à laquelle une affecte une valeur restent simples à exprimer (en particulier, j'évite les new Machin()).
 
djfm> Désolé, mais ton code est très difficile à relire. On ne sait pas où se terminent tes if, tes for, etc. Or c'est précisément le but de la présentation du code : montrer visuellement la structure du code sans obliger le lecteur à lire chaque ligne de code.  
A mon avis, ce qui suit est un peu meilleur :

Code :
  1. function rien() {
  2.     for (var i = 0; i < 12; i++) {
  3.         if (i >= 3) {
  4.             j = 36;
  5.             l++;
  6.         }
  7.         else {
  8.             kedal[i] = 2;
  9.         }
  10.     }
  11. }


Sans compter que les noms de variables choisis ici sont à sauter au plafond...   :ouch:

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

Reply

Marsh Posté le 31-05-2001 à 20:12:08    

men fous, y a ke moi ki les relis ;-))
oui je c c pas facile, mais g labitude de fere comme ca


---------------
Do you serve a purpose,Or purposely serve?
Reply

Marsh Posté le 31-05-2001 à 20:13:15    

tgrx a écrit a écrit :

 
 
et d'ailleurs a ce propos emacs rulez -> de loin le meilleur editeur decode, meme s'il lui manque des facilites que d'autres ont (comme VC++ ou CW ou tu peux sauter directement a une fonction donnee, voire le prototype automatiquement quand tu fais un appel a une fonction...).




 
Tu peux faire ça avec emacs, regarde du coté de CTAGS et speedbar

Reply

Marsh Posté le 31-05-2001 à 20:38:50    

un lien que quelqu'un a donné sur ce forum il y a quelques mois :
 
http://www.mindprod.com/unmain.html
 
très instructif et très marrant

Reply

Marsh Posté le 31-05-2001 à 21:10:56    

voici comment je code un if par exemple:
 
if ( (a == 1) && (b == 2) && (c == 3) )
{
     printf("test\n" );
}
 
remarquez l'espace aux extrémité:
if ( (a == 1) && (b == 2) && (c == 3) )
 
 
et puis des fois je ne met pas les {} pour une seule instruction mais lorsque je rajoute une ligne de plus, j'oublie de les mettres les {}  :fou:

 

[edit]--Message édité par End-i--[/edit]

Reply

Marsh Posté le 31-05-2001 à 21:21:30    

End-i> Preuve qu'il vaut mieux toujours mettre des accolades ouvrantes et fermantes.  :p  
 
Pour ton if, moi, je préfère :

Code :
  1. if (a == 1  &&  b == 2  &&  c == 3) {
  2.      printf("test\n" );
  3. }


Je sais, le coup des doubles espaces entre les conditions élémentaires, c'est bien peu orthodoxe, mais c'est ce que j'ai trouvé de mieux pour avoir un code le plus léger possible (les parenthèses alourdissent vite), tout en étant capable de repérer rapidement les conditions élémentaires (sans avoir besoin de faire l'effort de les lire, comme toujours)

Reply

Marsh Posté le 31-05-2001 à 22:20:40    

comment je programme ? ... bien :D :D
 

Code :
  1. // déjà, un tab après le type de la fonction pour qu'elles soient toutes indentées pareil (bon le tab dans un textarea, ça passe pas mais vous voyez l'idée :))
  2. int  MyFunction()
  3. {
  4.      // lors de l'initialisation de plusieurs variables, j'aligne les '=' à coups de tab
  5.      int a      = 4;
  6.      int myVar  = 5;
  7.      // pour les ifs simples, sur la même ligne
  8.      if (blah)              return 0;
  9.      if (node->next)        node = node->next;
  10.      else                   return 0;
  11.      // pour les ifs à statements, pareil, alignement des accolades
  12.      if (blah)
  13.      {
  14.          // do this ...
  15.          // ... and that
  16.      }
  17.      else
  18.      {
  19.          // do that ...
  20.          // ... and this
  21.          // je commente en anglais aussi, au cas où utilisation par des tiers, distribution du code, etc ... (et parce que j'ai du mal à commenter en fr au milieu de for, while, if, et de toute la terminologie des apis)
  22.      }
  23.      // pour les parenthèses autour des termes du if, uniquement s'il y a trop de termes où s'ils sont trop compliqués
  24.      if (a && b && c) ...
  25.      if ( blahblah && (a > 4) && (b < 2) ) ...
  26.      // comme dans la vraie vie, toujours un espace après une virgule
  27.      MyFunction2(a, b, c);
  28.      // pareil pour les points virgule, même si dans la vraie vie on met également un espace devant
  29.      for (i=2; i<5; i++)
  30.      {
  31.         // blah ...
  32.      }
  33.      // j'adore le '?' !
  34.      return   doThis ? firstVar : secondVar;
  35.      // et j'aimerais bien l'utiliser à la place d'un if simple ... mais ça compile pas :D
  36. }
  37. un nom de classe ou de fonction commence toujours par une majuscule, cela dépend pour les structures :
  38. class   Container
  39. {
  40. };
  41. void    MyFunction()
  42. {
  43. }
  44. les variables, jamais d'underscore (je faisais ça en C, j'ai abandonnée) mais une notation à la java : pas de majuscule au début, juste pour marquer les différentes parties de la variable :
  45. int    a;
  46. int    myVariable;
  47. int    nextNode;
  48. auparavant je préfixais les variables de mes classes par un 'm', toujours suivi d'une majuscule :
  49. class   MyClass
  50. {
  51.        int    mParent;
  52.        int    mTimer;
  53. }
  54. j'ai abandonné, c'était trop lourd à la fois et à taper et à lire.
  55. je ne préfixe jamais mes variables à la windows, ie bVariable pour un bool, iVariable pour un entier ...
  56. au final, je préfère utiliser des noms explicites et marquer qq bonnes lignes de commentaires qui expliquent le déroulement de l'opération, plutôt que surcharger le code.
  57. ha, pour l'indentation des méthodes d'une classe, ça se passe au TAB, le but est d'aligner tout ça joliment : les virtuals entre eux, les types entre eux, les noms de fonction entre eux.
  58. class   MyClass
  59. {
  60.      // les virtuelles dérivées en premier, puis les virtuelles déclarées dans la classe
  61.      virtual    int     DoThis();
  62.      virtual    void    Check();
  63.      // les locales
  64.                 float   ComputeCenter();
  65.      // pour finir, les variables locales
  66.                 int     blah;
  67.                 float   blahblah;
  68. }


c'était ma tartine. je veux en lire d'autres !

Reply

Marsh Posté le 31-05-2001 à 22:38:51    

youdontcare a écrit a écrit :

 
     // pareil pour les points virgule, même si dans la vraie vie on met également un espace devant




Justement, pas en anglais... :p
 
youdontcare> Pourquoi ton opérateur ternaire ne compile pas ?  :??:

Reply

Marsh Posté le 31-05-2001 à 22:51:37    

BifaceMcLeOD a écrit a écrit :

 
Justement, pas en anglais... :p
 
youdontcare> Pourquoi ton opérateur ternaire ne compile pas ?  :??:



damn ! j'étais pourtant sûr que c'était universel le double espacement pour les ponctuations avec deux signes ...
 
pour le ?, j'ai réessayé, ça compile ... cool :) j'avais dû essayer ça une nuit de fatigue totale.

Reply

Marsh Posté le 31-05-2001 à 23:18:49    

youdontcare  :bounce: [:pierrotlemaboule]

 

[edit]--Message édité par LeMegaBlaireau--[/edit]

Reply

Marsh Posté le 31-05-2001 à 23:42:12    

Comme tout le monde met des bouts de code, j'en fait autant !
 
<?
// affichage des lignes du formulaire //
class FormLine {
 var $classname= "ligne";
 var $nom; // le nom du champ
 var $type; // le type de champ (menu déroulant, checkbox, champ texte etc...)
 var $size; // la longueur des champs texte
 var $option;  // les options à afficher pour les menus déroulants
 var $invalide; // ce qui rend le champ non valide (longueur 0 ou valeur de champ)
 var $obligatoire; // prend la valeur 1 pour obligatoire et affiche la coche bleu.
 var $value; // la valeur du champ
 
 function ligne($val1, $val2, $val3, $val4, $val5, $val6, $val7){
   $this->nom = $val1;
   $this->type = $val2;
   $this->size = $val3;
   $this->option = $val4;
   $this->invalide = $val5;
   $this->obligatoire = $val6;
   $this->value = $val7;
   ?>
  <tr>
    <td width=30" align="center" height="30"><? if ($val6==1) { echo "<img src=\"img/coche.gif\" width=\"21\" height=\"21\">"; }
      else { echo " "; } ?>
    </td>
    <td width="150" height="30"><? echo "$val1"; ?> :</td>
    <td width="69%" height="30">
      <?
if ($val2=='select') {
  echo "<select size=\"1\" name=\"$val1\" tabindex=\"1\">";
  $options = explode("-",$val4);
  while(list(,$option) = each($options)) {
    if ($option==$val7) {
      echo "<option selected>$option</option>\n";
    }
    else {
      echo "<option>$option</option>\n";
    }
 
  }
  echo "</select>";
}
 
elseif ($val2=='textarea') {
  ?><textarea name="<? echo "$val1"; ?>"><? if (isset ($val4)) echo "$val7" ?></texarea>
<?
}
else {
echo "<input type=\"text\" size=\"$val3\" name=\"$val1\" value=\"$val7\">";
}
?>
     </td>
   </tr>
<?
   }
}
// fin //
?>
 
Perso je préfèe les commentaires à droite de la ligne, mais je ne fait que du php  :sol:

 

[edit]--Message édité par Sh@rdar--[/edit]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 31-05-2001 à 23:51:13    

Sh@rdar a écrit a écrit :

Comme tout le monde met des bouts de code, j'en fait autant !



c'est marrant en php j'ouvre une bonne fois pour toutes le code avec <? et tape tout dedans. n'importe quel bout d'html statique, par ex pour commencer une table, passe par un echo ... peut être plus lent certes, mais tellement plus pratique et lisible :)

Reply

Marsh Posté le 31-05-2001 à 23:57:21    

bin moi ça dépends des fois ;-)
 
je trouve plus lisible ma page HTMl avec le code php dedans, toi tu fais l'inverse : de l'HTML dans du PHP  :pt1cable:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed