Quels sont vos astuces et secrets de programmation ?
Confiez-nous vos trucs pour gagner du temps ou impressionner les collègues
Le 2010-10-29 14:51:25, par Idelways, Expert éminent sénior
Vous faites du développement depuis des années dans votre langage favori et vous croyez qu'il a fini de vous surprendre ?
Pas si sûr, car tous les langages ont des secrets, des fonctionnalités cachées que vous rencontrez un beau jour sur le code d'un collègue, sur un projet open-source ou même par une malheureuse (ou heureuse?) faute de frappe.
En PHP par exemple, savez-vous qu'il est possible d'appeler « Echo » avec plusieurs paramètres et faire, en quelque sorte de la concaténation avec une virgule ?
Si cette astuce est anecdotique, voir inutile, d'autres peuvent surprendre et s'avérer très utiles, comme ce bout de code, certes un peu extrême pour des raisons de démonstration :
Il s'agit en fait de l'utilisation des variables dynamiques, ou les variables des variables, une astuce qui marche aussi (et heureusement) pour les fonctions et méthodes de classes.
Toujours en PHP, connaissez-vous la classe standard ? Qui permet de se passer, dans certaines situations des tableaux associatives ou de déclarer inutilement des data-classes :
Il est même possible de « caster » un tableau associatif en Objet et l'utiliser comme tel :
Vous avez de nombreuses classes et vous souhaitez éviter de les parser et les charger toutes en mémoire pour n'en utiliser que quelques-unes ?
PHP a la solution, la routine __autoload() permet d'exécuter du code à chaque instanciation, ce qui permet entre autre, d'inclure le fichier de la classe en question :
Bref, ces quelques exemples exclusivement en PHP, illustre une réalité de tous les langages : ils ont des secrets !
Vous en connaissez certainement dans votre langage de prédilection. Alors n'hésitez pas ; faites en nous part.
Car rappelez-vous qu'un secret est, comme dit l'expression, « une chose que l'on ne répète qu'à une seule personne ».
Et vous ?
Quelles sont les astuces et secrets de développement favoris ? Dans quel contexte vous en servez-vous ? Comment avez-vous découvert ce secret ?
En collaboration avec Gordon Fowler
Pas si sûr, car tous les langages ont des secrets, des fonctionnalités cachées que vous rencontrez un beau jour sur le code d'un collègue, sur un projet open-source ou même par une malheureuse (ou heureuse?) faute de frappe.
En PHP par exemple, savez-vous qu'il est possible d'appeler « Echo » avec plusieurs paramètres et faire, en quelque sorte de la concaténation avec une virgule ?
Code : |
1 2 | echo 'John', 'Doe'; |
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $Bar = "a"; $Foo = "Bar"; $World = "Foo"; $Hello = "World"; $a = "Hello"; $a; // retourne Hello $$a; // retourne World $$$a; // retourne Foo $$$$a; // retourne Bar $$$$$a; // retourne a $$$$$$a; // retourne Hello $$$$$$$a; // retourne World ?> |
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 | $foo = 'bar'; $bar = 'foobar'; function bar() { echo 'Hello world!'; } function foobar() { echo 'Quelle belle journée'; } $foo(); // Affiche Hello world! $$foo(); // Affiche Quelle belle journée! |
Code : |
1 2 3 4 5 6 7 8 9 10 | $person = array(); $person['nom'] = 'John Doe'; $person['age'] = 42; // devient $person = new stdClass(); $person->nom = 'bob'; $person->age = 5; |
Code : |
1 2 3 4 | $obj = (object)array('nom' => 'bob', 'age' => 5); echo $obj->nom; |
PHP a la solution, la routine __autoload() permet d'exécuter du code à chaque instanciation, ce qui permet entre autre, d'inclure le fichier de la classe en question :
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php error_reporting(E_ALL); set_include_path(get_include_path() . PATH_SEPARATOR . '../libs/'); function __autoload($classname) { // chaque classe est stockée dans un fichier unique dans le dossier libs "libs/{$classname}.class.php" echo $classname; include_once $classname . '.class.php'; } $a = new model(); ?> |
Vous en connaissez certainement dans votre langage de prédilection. Alors n'hésitez pas ; faites en nous part.
Car rappelez-vous qu'un secret est, comme dit l'expression, « une chose que l'on ne répète qu'à une seule personne ».
Et vous ?
En collaboration avec Gordon Fowler
-
_skipExpert éminentCertains de ces trucs, j'appelle ça de la programmation de cochon qui sert à se mettre des autogoals.le 29/10/2010 à 15:02
-
doguaMembre régulierTout ça, c'est pas mal pour flatter son ego, mais je pense qu'un bon développeur doit savoir se faire lire par ses collègues sans trop de difficulté.
Pour ce qui est du gain de temps... Rien ne vaut un code lisible et documenté...
Car si c'est pour gagner 5 secondes par ligne de code et perdre 10 minutes la semaine d'après pour comprendre une classe que tu as écris ce n’est pas très utile...le 29/10/2010 à 15:16 -
UtherExpert éminent séniorEn java:
Initialisation d'un objet en détournant les blocs d'initialisation:
Je ne l'utilise pas car ce n'est pas optimal (héritage inutile) et déroutant pour pas mal de monde. Mais ça permet de simplifier l'initialisation de certains objets. Il s'agit en fait d'un détournement des classes anonyme et des blocs d'initialisation:
Code : 1
2
3
4
5List<String> maListe = new ArrayList<String>(){{ add("un"); add("deux"); add("trois"); }};
Pour le coup c'est optimisé, mais ça rappelle immanquablement le goto. Or tout le monde sait que le goto est responsable des attentats du 11 septembre, de la Shoah et de la faim dans le monde.
C'est pourtant bien pratique pour sortir immédiatement d'un bloc de code:
Code : 1
2
3
4
5
6
7
8
9general: while(niveau1){ while(niveau2){ while(niveau3){ //... break general; } } }
le 29/10/2010 à 16:36 -
gorgoniteRédacteur/Modérateur
euh... en quoi c'est un secret?
vous voulez juste savoir si l'on peut faire des trucs un peu sioux, qu'on ne présente pas dans un cours "débutant" sur ce langage histoire de ne pas les faire fuir trop tôt?
Tout ce qui est présenté au-dessus est parfaitement documenté, voir intégré dans certains frameworks... en boîte noire histoire de ne pas choquer, et surtout de ne pas inciter à le faire a priori
Dans les trucs plus sioux, on peut voir les méta-programmations C++ qui utilisent des caractéristiques des compilateurs ne respectant pas tout à fait la norme...le 29/10/2010 à 15:09 -
sekaijinExpert éminentHe ho on se calme
je n'ai jamais prétendu détenir une vérité absolue
le sujet est ce que nous faisons
chacun d'entre nous
je dis JE FAIS c'est tout Je ne dis pas ON DOIT
je dis que je Préfère faireCode : 1
2
3
4
5
6
7
8
9function foo() { if (r = test()) then { ... returnValue = ...; } else { returnValue = false; } retrun retrunValue; }
Code : 1
2
3
4
5
6function foo() { if (! r = test()) then retrun false; ... return ...; }
c'est un choix comme un autre
A+JYTle 05/11/2010 à 11:09 -
IdelwaysExpert éminent séniorBonjour _skip, dogua et gorgonite
Merci pour vos réactions, mais une petite mise au point s'impose
L'objectif de cet article n'est pas de recenser les bonnes ou mauvaises pratiques de développement ni d'inciter à les utiliser, pour ça on a lancé d'autre débats, comme celui d'hier sur l'optimisation du code VS sa lisibilité.
Le but ce celui là est ludique, de faire découvrir les fonctionnalités cachées des langages, par forcément évidente, ne serait-ce que pour un débutant.
Après, les appeler des secrets c'est peut être effectivement un peu exagéré, mais c'est l'esprit quoi
Cordialement à vous trois,le 29/10/2010 à 15:30 -
FlaburganModérateursyso et CTRL+ D qui donne System.Out.Println() sous Eclipse, c'est pas un secret du langage mais quand j'ai montré ça à un collègue il a essayé de compter le nombre d'heure qu'il avait perdu à le taper en entier.le 29/10/2010 à 17:19
-
dissertMembre avertiJe suis d'accord avec les commentateurs précédent.
Il ne faut pas utiliser ces trucs, c'est mal.
Par contre, il peut être utile de les connaître pour pouvoir auditer (mais pas coder !)
Pour les trucs en Java, ce ne serait pas bien de donner l'URL suivante : http://stackoverflow.com/questions/1...atures-of-java
non ! ce ne serait pas bien du tout.
En plus c'est contre productif, parce qu'on passe un temps fou à tout regarder et à essayer de tout comprendre, alors qu'il ne faut pas les utiliser.le 29/10/2010 à 15:55 -
xelabMembre expérimentéarray_map en PHP est pas forcément connu mais pourtant parfois bien utile (ça évite trois/quatre lignes de codes mais tout de même...
).
Permet d'appliquer une fonction à chaque valeur d'un tableau:Code : array_map("fonction_bidule",$tableau);
le 29/10/2010 à 16:55 -
dingothMembre expérimentéUn truc que j'utilise presque tout le temps pour éviter d'avoir des déclarations à rallonge en Java :
Sans le truc :
Code : List<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>> liste = new ArrayList<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>>();
Avec le truc :
Code : 1
2
3
4
5
6public static <T> ArrayList<T> newArrayList() { return new ArrayList<T>(); } // Plus loin List<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>> liste = newArrayList();
Une autre petite merveille est la classe Preconditions de Guava. Facile à réécrire et à étendre, cette classe fait des merveilles dans la gestion des préconditions en lançant l'exception adéquate. À utiliser impérativement avec les imports static pour une meilleure lecture du code.
http://guava-libraries.googlecode.co...onditions.htmlle 29/10/2010 à 17:26