|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
(Contexte : je suis grand débutant en PHP (je n'ai suivi aucune
formation), après avoir fait du Turbo-Pascal et du C durant les 20 dernières années...) ---------------------------------- Si vous enseignez le PHP et que vous aimez les anecdotes. :-) 1) Suite à un problème de serveurs DNS (un utilisateur obligé d'accéder par l'adresse IP à un site distant), j'ai vu du code dans lequel le programmeur avait déclaré en dur l'adresse de son serveur 'http://(adresse_URL)/, au lieu de déclarer le répertoire racine : Code d'origine : // define('HTTP_MAIN', 'http://(adresse_URL)/') ; Code corrigé : define('HTTP_MAIN', '/') ; 2) J'ai bondi en lisant la ligne suivante d'un fichier index.php, ce genre de code compact (dans un style que l'on retrouve hélas habituellement chez les programmeurs C) n'étant ni intuitif pour les débutants, ni pédagogique ! :-( $intro.= strlen($themes)>0 && $themes!="defaut"?"_".$themes:"" ; |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie a écrit :
(snip) > > 2) J'ai bondi en lisant la ligne suivante d'un fichier index.php, ce > genre de code compact (dans un style que l'on retrouve hélas > habituellement chez les programmeurs C) n'étant ni intuitif pour les > débutants, ni pédagogique ! :-( > > $intro.= strlen($themes)>0 && $themes!="defaut"?"_".$themes:"" ; C'est surtout inutilement compliqué: $intro .= ($themes && $themes != 'defaut' ? "_$themes" : ''); Mais je concède qu'en l'occurrence, un if explicite serait plus, heu... explicite: if ($themes && $themes != 'defaut') { $intro .= "_$themes"; } |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie a écrit :
(snip) > > 2) J'ai bondi en lisant la ligne suivante d'un fichier index.php, ce > genre de code compact (dans un style que l'on retrouve hélas > habituellement chez les programmeurs C) n'étant ni intuitif pour les > débutants, ni pédagogique ! :-( > > $intro.= strlen($themes)>0 && $themes!="defaut"?"_".$themes:"" ; C'est surtout inutilement compliqué: $intro .= ($themes && $themes != 'defaut' ? "_$themes" : ''); Mais je concède qu'en l'occurrence, un if explicite serait plus, heu... explicite: if ($themes && $themes != 'defaut') { $intro .= "_$themes"; } |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie <Pascal.Boulerie@gmail.com> writes:
> 2) J'ai bondi en lisant la ligne suivante d'un fichier index.php, ce > genre de code compact (dans un style que l'on retrouve hélas > habituellement chez les programmeurs C) n'étant ni intuitif pour les > débutants, ni pédagogique ! :-( > > $intro.= strlen($themes)>0 && $themes!="defaut"?"_".$themes:"" ; Je ne conteste pas que l'exemple pourrait être mieux écrit, mais l'argument comme quoi le code devrait être "intuitif" pour les débutants ne me parait pas correct. Les opinions esthétiques des débutants sur des langages de programmation qu'ils ne connaissent pas ne présentent aucun intérêt en ce qui concerne l'écriture de code destiné à être relu et maintenu par des non-débutants ! Par ailleurs, l'intuition est surement une belle chose, mais elle se base sur quoi ? Pour la syntaxe il va y avoir deux criteres : - soit ce qui est écrit traduit directement l'intention. Ici ce qu'exprime ce code, c'est que "si la chaine $themes n'est pas vide, ni égale à défaut, on l'ajoute à $intro précédé d'un '_'". On ne peut pas dire que ça soit le cas ici. - soit c'est la tournure adoptée le plus souvent parmi la communauté des gens qui pratiquent ce même langage pour faire ce genre de choses. La première chose qui saute aux yeux, c'est le mauvais usage des espaces qui rend pénible la lecture. Et quelques parenthèses peuvent améliorer au besoin $intro .= (strlen($themes) > 0) && ($themes != "defaut") ? "_".$themes : "" ; La chose qui fache le plus, c'est la manière de tester si la chaine est vide. Il y a des manières plus standard de faire ça, sans aller chercher une comparaison de la longueur, la plus simple conceptuellement étant sans doute la comparaison avec la chaine vide ! $intro .= ($themes != "") && ($themes != "defaut") ? "_".$themes : "" ; reste l'idée d'allonger $intro seulement si la condition est satisfaite, mieux traduite par un if/then que par une expression conditionnelle (qui a ses mérites, mais pas ici). if (($themes != "") && ($themes != "defaut")) $intro .= "_".$themes; et résisterait-on à utiliser une expansion plutot qu'une concaténation ? if (($themes != "") && ($themes != "defaut")) $intro .= "_$themes"; MB -- Michel BILLAUD billaud@labri.fr LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE) |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie <Pascal.Boulerie@gmail.com> writes:
> 2) J'ai bondi en lisant la ligne suivante d'un fichier index.php, ce > genre de code compact (dans un style que l'on retrouve hélas > habituellement chez les programmeurs C) n'étant ni intuitif pour les > débutants, ni pédagogique ! :-( > > $intro.= strlen($themes)>0 && $themes!="defaut"?"_".$themes:"" ; Je ne conteste pas que l'exemple pourrait être mieux écrit, mais l'argument comme quoi le code devrait être "intuitif" pour les débutants ne me parait pas correct. Les opinions esthétiques des débutants sur des langages de programmation qu'ils ne connaissent pas ne présentent aucun intérêt en ce qui concerne l'écriture de code destiné à être relu et maintenu par des non-débutants ! Par ailleurs, l'intuition est surement une belle chose, mais elle se base sur quoi ? Pour la syntaxe il va y avoir deux criteres : - soit ce qui est écrit traduit directement l'intention. Ici ce qu'exprime ce code, c'est que "si la chaine $themes n'est pas vide, ni égale à défaut, on l'ajoute à $intro précédé d'un '_'". On ne peut pas dire que ça soit le cas ici. - soit c'est la tournure adoptée le plus souvent parmi la communauté des gens qui pratiquent ce même langage pour faire ce genre de choses. La première chose qui saute aux yeux, c'est le mauvais usage des espaces qui rend pénible la lecture. Et quelques parenthèses peuvent améliorer au besoin $intro .= (strlen($themes) > 0) && ($themes != "defaut") ? "_".$themes : "" ; La chose qui fache le plus, c'est la manière de tester si la chaine est vide. Il y a des manières plus standard de faire ça, sans aller chercher une comparaison de la longueur, la plus simple conceptuellement étant sans doute la comparaison avec la chaine vide ! $intro .= ($themes != "") && ($themes != "defaut") ? "_".$themes : "" ; reste l'idée d'allonger $intro seulement si la condition est satisfaite, mieux traduite par un if/then que par une expression conditionnelle (qui a ses mérites, mais pas ici). if (($themes != "") && ($themes != "defaut")) $intro .= "_".$themes; et résisterait-on à utiliser une expansion plutot qu'une concaténation ? if (($themes != "") && ($themes != "defaut")) $intro .= "_$themes"; MB -- Michel BILLAUD billaud@labri.fr LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE) |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
> (Contexte : je suis grand débutant en PHP (je n'ai suivi aucune
.............. > Si vous enseignez le PHP et que vous aimez les anecdotes. :-) Alors, on vanne ses collègues et on dit du mal , hmm ????? tssss tssss....... Stef |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
> (Contexte : je suis grand débutant en PHP (je n'ai suivi aucune
.............. > Si vous enseignez le PHP et que vous aimez les anecdotes. :-) Alors, on vanne ses collègues et on dit du mal , hmm ????? tssss tssss....... Stef |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie a écrit :
> (Contexte : je suis grand débutant en PHP (je n'ai suivi aucune > formation), après avoir fait du Turbo-Pascal et du C durant les 20 > dernières années...) > ---------------------------------- > Si vous enseignez le PHP et que vous aimez les anecdotes. :-) google code search permet aussi de voir des horreurs : http://www.google.com/codesearch?hl=...%5C.%5C%24_GET (merci à herodiade pour le lien) -- FG |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie a écrit :
> (Contexte : je suis grand débutant en PHP (je n'ai suivi aucune > formation), après avoir fait du Turbo-Pascal et du C durant les 20 > dernières années...) > ---------------------------------- > Si vous enseignez le PHP et que vous aimez les anecdotes. :-) google code search permet aussi de voir des horreurs : http://www.google.com/codesearch?hl=...%5C.%5C%24_GET (merci à herodiade pour le lien) -- FG |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
Question opérateur conditionnel avec variable sans type :-( , voici
l'exemple le plus frappant à mes yeux que j'ai vu :-) : $variable1 = variable1=='OUI'?1:0; |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
Question opérateur conditionnel avec variable sans type :-( , voici
l'exemple le plus frappant à mes yeux que j'ai vu :-) : $variable1 = variable1=='OUI'?1:0; |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
Le 04/09/2007 12:08, Pascal Boulerie a écrit :
> Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > > $variable1 = variable1=='OUI'?1:0; ^^^^^^^^^ Utiliser le nom « variable1 » pour une constante, c'est assez rigolo. Cela étant dit, je ne vois strictement pas où tu veux en venir. |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
Le 04/09/2007 12:08, Pascal Boulerie a écrit :
> Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > > $variable1 = variable1=='OUI'?1:0; ^^^^^^^^^ Utiliser le nom « variable1 » pour une constante, c'est assez rigolo. Cela étant dit, je ne vois strictement pas où tu veux en venir. |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
Le 04/09/2007 12:08, Pascal Boulerie a écrit :
> Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > > $variable1 = variable1=='OUI'?1:0; ^^^^^^^^^ Utiliser le nom « variable1 » pour une constante, c'est assez rigolo. Cela étant dit, je ne vois strictement pas où tu veux en venir. |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
(Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte
de l'exemple de code en question.) -------------------------------------------------------- Question opérateur conditionnel avec variable sans type :-( , voici l'exemple le plus frappant à mes yeux que j'ai vu :-) : $variable1 = $variable1=='OUI'?1:0; Ce qui m'étonnait, c'était de partir d'une variable de type chaîne pour aboutir à un Booléen, restocké immédiatement dans la même variable... Mais vu que le langage n'est pas typé... :-( |
|
|
|
#16 |
|
Messages: n/a
Hébergeur: |
(Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte
de l'exemple de code en question.) -------------------------------------------------------- Question opérateur conditionnel avec variable sans type :-( , voici l'exemple le plus frappant à mes yeux que j'ai vu :-) : $variable1 = $variable1=='OUI'?1:0; Ce qui m'étonnait, c'était de partir d'une variable de type chaîne pour aboutir à un Booléen, restocké immédiatement dans la même variable... Mais vu que le langage n'est pas typé... :-( |
|
|
|
#17 |
|
Messages: n/a
Hébergeur: |
Le 06/09/2007 12:33, Pascal Boulerie a écrit :
> (Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte > de l'exemple de code en question.) > -------------------------------------------------------- > Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > $variable1 = $variable1=='OUI'?1:0; D'accord. Note que cet exemple n'est pas très aéré, et donc (à mon goût) pas très lisible. Pour un résultat équivalent, j'aurais écrit : $variable1 = ($variable1 == 'OUI') ? 1 : 0; > Ce qui m'étonnait, c'était de partir d'une variable de type chaîne > pour aboutir à un Booléen, restocké immédiatement dans la même > variable... Non : pas un booléen mais un entier. Pour stocker un booléen, l'écriture serait beaucoup plus simple : $variable1 = $variable1 == 'OUI'; Note que j'ai déjà vu l'écriture suivante, parfaitement ridicule : $variable1 = ($variable1 == 'OUI') ? true : false; > Mais vu que le langage n'est pas typé... :-( Oui. |
|
|
|
#18 |
|
Messages: n/a
Hébergeur: |
Le 06/09/2007 12:33, Pascal Boulerie a écrit :
> (Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte > de l'exemple de code en question.) > -------------------------------------------------------- > Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > $variable1 = $variable1=='OUI'?1:0; D'accord. Note que cet exemple n'est pas très aéré, et donc (à mon goût) pas très lisible. Pour un résultat équivalent, j'aurais écrit : $variable1 = ($variable1 == 'OUI') ? 1 : 0; > Ce qui m'étonnait, c'était de partir d'une variable de type chaîne > pour aboutir à un Booléen, restocké immédiatement dans la même > variable... Non : pas un booléen mais un entier. Pour stocker un booléen, l'écriture serait beaucoup plus simple : $variable1 = $variable1 == 'OUI'; Note que j'ai déjà vu l'écriture suivante, parfaitement ridicule : $variable1 = ($variable1 == 'OUI') ? true : false; > Mais vu que le langage n'est pas typé... :-( Oui. |
|
|
|
#19 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie <Pascal.Boulerie@gmail.com> writes:
> (Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte > de l'exemple de code en question.) > -------------------------------------------------------- > Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > $variable1 = $variable1=='OUI'?1:0; > > Ce qui m'étonnait, c'était de partir d'une variable de type chaîne > pour aboutir à un Booléen, Un entier, plutôt, vu qu'il n'y a pas de booléens en PHP Du reste, on aurait pu faire $variable1 = $variable1=='OUI'; > restocké immédiatement dans la même > variable... Mais vu que le langage n'est pas typé... :-( Absolument. Mais le problème n'est pas là, il y a des tas de langages très bien où on peut faire ce genre de choses (Lisp, Smalltalk, etc.). En fait cet exemple a 3 problèmes - nom de variable mal choisi $variable1 - réutilisation d'une variable pour deux usages différents (chaine de caractère en entrée, condition) - et utilisation d'une tournure maladroite ( X==Y ? 1 : 0 équivaut à X==Y) et ce n'est pas la faute d'un langage si n'importe qui s'en empare pour programmer comme un goret :-) MB -- Michel BILLAUD billaud@labri.fr LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE) |
|
|
|
#20 |
|
Messages: n/a
Hébergeur: |
Pascal Boulerie <Pascal.Boulerie@gmail.com> writes:
> (Désolé, j'avais oublié le deuxième symbole "$" en reprenant le texte > de l'exemple de code en question.) > -------------------------------------------------------- > Question opérateur conditionnel avec variable sans type :-( , voici > l'exemple le plus frappant à mes yeux que j'ai vu :-) : > $variable1 = $variable1=='OUI'?1:0; > > Ce qui m'étonnait, c'était de partir d'une variable de type chaîne > pour aboutir à un Booléen, Un entier, plutôt, vu qu'il n'y a pas de booléens en PHP Du reste, on aurait pu faire $variable1 = $variable1=='OUI'; > restocké immédiatement dans la même > variable... Mais vu que le langage n'est pas typé... :-( Absolument. Mais le problème n'est pas là, il y a des tas de langages très bien où on peut faire ce genre de choses (Lisp, Smalltalk, etc.). En fait cet exemple a 3 problèmes - nom de variable mal choisi $variable1 - réutilisation d'une variable pour deux usages différents (chaine de caractère en entrée, condition) - et utilisation d'une tournure maladroite ( X==Y ? 1 : 0 équivaut à X==Y) et ce n'est pas la faute d'un langage si n'importe qui s'en empare pour programmer comme un goret :-) MB -- Michel BILLAUD billaud@labri.fr LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE) |
|
|
|
#21 |
|
Messages: n/a
Hébergeur: |
Le 06/09/2007 16:19, Michel Billaud a écrit :
> >> $variable1 = $variable1=='OUI'?1:0; >> >> Ce qui m'étonnait, c'était de partir d'une variable de type chaîne >> pour aboutir à un Booléen, > > Un entier, plutôt, vu qu'il n'y a pas de booléens en PHP En fait si, depuis PHP 4 : http://www.php.net/manual/fr/language.types.boolean.php > Du reste, on aurait pu faire > $variable1 = $variable1=='OUI'; Pour avoir un booléen, oui. > [...] > > et ce n'est pas la faute d'un langage si n'importe qui s'en empare > pour programmer comme un goret :-) 'bsolument. |
|
|
|
#22 |
|
Messages: n/a
Hébergeur: |
Le 06/09/2007 16:19, Michel Billaud a écrit :
> >> $variable1 = $variable1=='OUI'?1:0; >> >> Ce qui m'étonnait, c'était de partir d'une variable de type chaîne >> pour aboutir à un Booléen, > > Un entier, plutôt, vu qu'il n'y a pas de booléens en PHP En fait si, depuis PHP 4 : http://www.php.net/manual/fr/language.types.boolean.php > Du reste, on aurait pu faire > $variable1 = $variable1=='OUI'; Pour avoir un booléen, oui. > [...] > > et ce n'est pas la faute d'un langage si n'importe qui s'en empare > pour programmer comme un goret :-) 'bsolument. |
|
|
|
#23 |
|
Messages: n/a
Hébergeur: |
> 6 sep, 15:32, Olivier Miakinen <om+n...@miakinen.net> :
> > cet exemple n'est pas très aéré, et donc (à mon goût) pas très lisible. C'est d'ailleurs pour cela que je l'ai posté à dessein... :-) |
|
|
|
#24 |
|
Messages: n/a
Hébergeur: |
> 6 sep, 15:32, Olivier Miakinen <om+n...@miakinen.net> :
> > cet exemple n'est pas très aéré, et donc (à mon goût) pas très lisible. C'est d'ailleurs pour cela que je l'ai posté à dessein... :-) |
|
![]() |
| Outils de la discussion | |
|
|