Quels sont vos astuces et secrets de programmation ?
Confiez-nous vos trucs pour gagner du temps ou impressionner les collègues

Les rubriques (actu, forums, tutos) de Développez
Réseaux sociaux


 Discussion forum

Le , par Idelways, Expert Confirmé 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 ?

Code :
1
2
 
echo 'John', 'Doe';
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 :

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 
 
?>
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.

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!
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 :

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;
Il est même possible de « caster » un tableau associatif en Objet et l'utiliser comme tel :

Code :
1
2
3
4
 
$obj = (object)array('nom' => 'bob', 'age' => 5); 
 
echo $obj->nom;
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 :

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(); 
?>
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


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de _skip _skip
http://www.developpez.com
Expert Confirmé Sénior
le 29/10/2010 15:02
Certains de ces trucs, j'appelle ça de la programmation de cochon qui sert à se mettre des autogoals.
Avatar de gorgonite gorgonite
http://www.developpez.com
Rédacteur/Modérateur
le 29/10/2010 15:09
Citation Envoyé par Idelways  Voir le message
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 ».


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...
Avatar de dogua dogua
http://www.developpez.com
Membre régulier
le 29/10/2010 15:16
Tout ç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...
Avatar de Idelways Idelways
http://www.developpez.com
Expert Confirmé Sénior
le 29/10/2010 15:30
Bonjour _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,
Avatar de revlis revlis
http://www.developpez.com
Membre du Club
le 29/10/2010 15:53
en truc utile je dirais la constant __DIR__, (ou dirname(__FILE__) pour php < 5.3) pour les includes...
Je trouve cela carrément plus propre qu'un set_include_path..
Avatar de dissert dissert
http://www.developpez.com
Membre confirmé
le 29/10/2010 15:55
Je 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.
Avatar de Astroneo Astroneo
http://www.developpez.com
Futur Membre du Club
le 29/10/2010 15:59
LOL
les secrets/astuces des langages de programmation ne devraient justement pas être révélés aux communs des mortels sinon l' expérience algorithmique acquise sera au final aux normes non standard et donc inexploitable sur d'autres terrains , vous me suivez ?
Avatar de Seabiscit Seabiscit
http://www.developpez.com

le 29/10/2010 16:36
En java, qu'affiche ce programme ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
int j = 5; 
int i = 0; 
i = j << 32; 
System.out.println(i); 
Integer a = new Integer(5); 
Integer b = new Integer(5); 
if (a==b) System.out.println("1");  
a++; 
b++; 
if (a==b) System.out.println("2");  
a = 314; 
b = 314; 
if (a==b) System.out.println("3");
Réponse :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
int j = 5; 
int i = 0; 
i = j << 32; 
System.out.println(i); // i = 5 
Integer a = new Integer(5); 
Integer b = new Integer(5); 
if (a==b) System.out.println("1"); // a != b 
a++; 
b++; 
if (a==b) System.out.println("2"); // a == b 
a = 314; 
b = 314; 
if (a==b) System.out.println("3"); // a != b
Utilisez la méthode "equals()" .
Avatar de Uther Uther
http://www.developpez.com
Expert Confirmé Sénior
le 29/10/2010 16:36
En 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
5
List<String> maListe = new ArrayList<String>(){{ 
    add("un"); 
    add("deux"); 
    add("trois"); 
}};
Les blocs nommés
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
9
general: 
while(niveau1){ 
    while(niveau2){ 
        while(niveau3){ 
            //... 
            break general; 
        } 
    } 
}
Avatar de galerien69 galerien69
http://www.developpez.com
Membre chevronné
le 29/10/2010 16:37
Ici, print pour PHP, mais ca pourrait être une fonction quelconque pour étendre à d'autre langages. En PHP l'idée c'est de faire ça dans la vue ou on s’en tape un peu du code PHP...

Quand on ne veut pas faire un
Code :
1
2
3
4
if(true) 
{ 
 echo 'lol'; 
}
qui fait quatre lignes de code, taper dans du
Code :
true && print('lol');
ce qui n'a aucune expression sémantique

Sinon en JavaScript, (mais ca passe aussi pour les autres langages a typage dynamique) j'aime bien le
Code :
1
2
var b=false; 
var a=b||'lol';//a vaut 'lol'
Offres d'emploi IT
Developpeur php confirmé h/f
CDI
Silkhom - Rhône Alpes - Lyon (69000)
Parue le 17/10/2014
Charge d'études si décisionnel (h/f)
CDI
CAREER BOOSTER - Ile de France - Paris (75000)
Parue le 06/10/2014
Ingénieur développement confirmé Java/JEE
CDI
CGI - Ile de France -
Parue le 30/09/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula