Régulièrement, des personnes me demande pourquoi atoum est codé en lowerCamelCase
et non en UpperCamelCase
.
Et bien souvent, j'ai tendance à entendre à la fin de cette question (peut être à tort) le sous-entendu comme Symfony
ou tout autre framework à la mode.
Pour en finir une bonne fois pour toute, la réponse est très simple, quoique double.
Tout d'abord, techniquement, PHP est sensible à la casse pour :
- Le nom des variables ;
- Le nom des propriétés de classe ;
- Le nom des constantes ;
- Le nom des constantes de classe ;
- Les clefs de tableau associatif ;
À contrario, PHP est insensible à la casse pour :
- Le nom des functions ;
- Le nom des méthodes de classe ;
- Les mots-clefs tel que
if
,else
,null
,foreach
,echo
…
Or, atoum n'expose publiquement aucune propriété de classe et le peu de variables qu'il défini en dehors de ses classes n'ont pas pour vocation à être utilisé par autre chose que atoum.
En conséquence, utiliser du lowerCamelCase
ou du upperCamelCase
pour coder atoum, c'est bonnet blanc et blanc bonnet.
Ensuite, J'ai commencé à coder en lowerCamelCase
à l'université, lorsque je faisais du C++.
J'ai continué lorsque j'ai découvert le PHP, car l'autre développeur avec lequel j'ai commencé à travailler avec ce langage venait de la même université que moi et avait été formaté
de la même manière.
Je code donc mes projets en lowerCamelCase
depuis maintenant plus de 12 ans, et comme il n'y a aucune raison technique valable pour que cela change et que je ne suis pas la mode, ce n'est pas près d'arriver, même si, je cite, c'est un point qui altère l'ergonomie
de atoum.
Alors, faite comme Ludovic Fleury, qui a, je cite toujours, stopped to consider so useless thing
, d'autant que atoum ne vous impose aucune convention de codage et que vous êtes donc tout à fait libre d'utiliser celle de votre choix.
11 réactions
1 De Yot - 29/08/2012, 13:38
Le fait est que, pour 90% des conventions de codages et surtout des API standards, une classe commence par une majuscule.
- Java : convention Sun et l'intégralité de l'API
- PHP : conventions PHP (2000), Zend, Symfony, Pear. L'API PHP utilise des majuscules aussi (DateTime, Mysqli... pour une fois que quelque chose est standardisé en PHP !)
- Javascript pour l'API (Math.floor), convention Google JS Style Guide
- C : conventions Cpp standards, Google C Style Guide ...
- Mais également Python, Ruby, ActionScript, ObjectiveC, Perl6, Ada (Majuscule et underscore), Eiffel (Majuscule)...
En me creusant l'esprit, je ne vois aucun langage usuel et manipulant des classes qui ne préconise pas de mettre une majuscule à la première lettre d'une classe.
Tout ça pour dire qu'effectivement, chacun code bien comme il veut ses projets, surtout si ça reste dans ton API interne. Cependant, c'est n'est pas non plus une mauvaise chose de respecter les conventions communément admises. D'autant plus qu'Atoum est un projet communautaire.
Pour fini, oui, c'est effectivement plus "ergonomique", en tout cas plus simple, de travailler avec des API qui respectent toutes les même standards. PHP a les siens, et ce n'est absolument pas Symfony qui en est à l'origine (2003 http://www.dagbladet.no/development... )
2 De neolao - 29/08/2012, 16:19
Juste pour info, quand la première lettre est en majuscule, on dit PascalCase.
3 De mageekguy - 29/08/2012, 16:40
@neolao : <troll>Encore une raison supplémentaire de ne pas suivre cette convention !</troll>
4 De Séb - 30/08/2012, 03:53
Il y a les conventions... et les goûts personnels. C'est pas ça qui fait la qualité d'un logiciel.
Perso, j'ai fait quelques essais et j'ai fait un choix purement esthétique (et subjectif évidemment) : CamelCase pour les classes et underscore_case pour les méthodes/traits/variables.
Après, évidemment, si on travaille sur un projet qui a déjà ses propres conventions, il faut s'adapter.
5 De Tatsu - 30/08/2012, 12:30
Autant je comprends l'idée des conventions de codage, autant en arriver à faire des débats de ce type me dépasse. C'est pas comme si on parlait d'un truc qui va fondamentalement changer le code et les effets de celui-ci sur l'application.
Pour faire le parallèle, en français (et pas que d'ailleurs, mais simplifions ^^) on utilise les majuscules en début de phrase par convention. Pourtant, il arrive très souvent quand on écrit, notamment en messagerie instantanée, d'omettre ces majuscules. La compréhension du texte, son sens, rien de ces phrase n'est altéré. Ce n'est donc pas plus gênant que ça.
Pour moi, c'est la même chose en codage. D'ailleurs, je m'en fous tellement des majuscules que je ne pense pas que je m'en rendrai compte avant un bon moment si les classes que j'utilise étaient écrites en ""lowerCamelCase" ^^
6 De Yot - 30/08/2012, 16:03
@Tatsu : Le code, on ne le lit pas seulement, on l'écrit aussi, en se basant sur ce que les autres ont déjà écrits.
L'autocomplétion n'étant déjà pas extraordinaire en PHP, ne pas savoir une fois sur deux si la classe que l'on veut utiliser commence par une majuscule ou non, c'est tout simplement chiant... Ca oblige à devoir aller vérifier, ou se tromper une fois sur deux. Les conventions sont là pour faciliter le travail des développeurs (et améliorer la qualité intrinsèque du logiciel accessoirement), ne l'oublions pas.
7 De mageekguy - 30/08/2012, 17:06
@Yot : Je répète : PHP est insensible à la casse en ce qui concerne les noms de classe.
8 De Yot - 30/08/2012, 17:50
@mageekguy : Bon ok j'ai rien dit ... Trop fait de java dernièrement :D
9 De Matthieu - 31/08/2012, 16:05
@mageekguy : L'autocomplétion des IDE va compléter avec la "case" du code. Si ton framework est en camelCase, alors l'autocomplétion va compléter en camelCase. Oui, on peut ne pas utiliser l'autocomplétion, ou ignorer la case. Personnellement je trouve ça un peu bizarre, ça va à l'inverse de la tendance générale et ça n'est pas invisible pour l'utilisateur (cf. autocomplétion). Attention : je trouve ça bizarre, voire un peu gênant, mais c'est ce que j'en pense, c'est tout, ça n'est pas une vérité objective absolue
10 De Cyrano - 01/09/2012, 11:02
@Tatsu : le fait qu'il y ait débat présente tout de même un aspect intéressant. Ça dénote une forme de volonté de plus en plus généralisée de standardisation. De ce point de vue, c'est encourageant pour l'ensemble des développeurs.
11 De Amaury - 28/09/2012, 10:53
Juste un petit détail : En PHP, ça ne porte pas à conséquence. Par contre, je ne comprends pas vraiment pourquoi tu as développé une telle convention personnelle en faisant du C++.
En PHP :
$aa = new Aa(); // c'est lisible
$aa = new aa(); // mouais, pourquoi pas
En C++ :
Aa *aa = new Aa(); // OK, ça roule
aa *aa = new aa(); // *ça ne marche pas*
En Java :
Aa aa = new Aa(); // OK
aa aa = new aa(); // c'est censé marcher, mais c'est pas beau
Ça peut paraître con, mais c'est pour moi l'une des raisons pour lesquelles on s'est habitué à nommer les variables en lower et les classes en upper. Garder cet héritage en PHP n'a rien de choquant. Comme toute les conventions, elle fonctionne de par son fort taux d'utilisation général.
Mais on est d'accord que tout ça est assez peu important au final.