IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par Idelways

117PARTAGES

8  6 
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de _skip
Expert éminent https://www.developpez.com
Le 29/10/2010 à 15:02
Certains de ces trucs, j'appelle ça de la programmation de cochon qui sert à se mettre des autogoals.
17  3 
Avatar de dogua
Membre régulier https://www.developpez.com
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...
11  1 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
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 : Sélectionner tout
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 : Sélectionner tout
1
2
3
4
5
6
7
8
9
general:
while(niveau1){
    while(niveau2){
        while(niveau3){
            //...
            break general;
        }
    }
}
9  0 
Avatar de gorgonite
Rédacteur/Modérateur https://www.developpez.com
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...
6  1 
Avatar de sekaijin
Expert éminent https://www.developpez.com
Le 05/11/2010 à 11:09
He 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 faire
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
function foo() {
  if (r = test()) then {
     ...
     returnValue = ...;
  } else {
     returnValue = false;
  }
  retrun retrunValue;
}
que
Code : Sélectionner tout
1
2
3
4
5
6
function foo() {
  if (! r = test()) then 
  retrun false;
  ...
  return ...;
}
c'est un choix qui a des avantage et des inconvénients.
c'est un choix comme un autre

A+JYT
5  0 
Avatar de Idelways
Expert éminent sénior https://www.developpez.com
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,
8  4 
Avatar de Flaburgan
Modérateur https://www.developpez.com
Le 29/10/2010 à 17:19
syso 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.
5  1 
Avatar de dissert
Membre averti https://www.developpez.com
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.
4  1 
Avatar de xelab
Membre expérimenté https://www.developpez.com
Le 29/10/2010 à 16:55
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 : Sélectionner tout
array_map("fonction_bidule",$tableau);
http://php.net/manual/fr/function.array-map.php
3  0 
Avatar de dingoth
Membre expérimenté https://www.developpez.com
Le 29/10/2010 à 17:26
Un truc que j'utilise presque tout le temps pour éviter d'avoir des déclarations à rallonge en Java :

Sans le truc :
Code : Sélectionner tout
List<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>> liste = new ArrayList<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>>();

Avec le truc :
Code : Sélectionner tout
1
2
3
4
5
6
public static <T> ArrayList<T> newArrayList() {
  return new ArrayList<T>();
}

// Plus loin
List<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>> liste = newArrayList();
Ca fonctionne pour tous les génériques et ça aide pas mal à l'écriture et à la lecture surtout quand on doit instancier en permanence ces génériques.

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.html
3  0