Pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter, inscrivez-vous gratuitement !

 

  1. #1
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : juin 2010
    Messages : 1 374
    Points : 68 480
    Points
    68 480

    Par défaut Quels sont vos astuces et secrets de programmation favoris

    Quels sont vos astuces et secrets de programmation favoris
    Pour gagner du temps ou impressionner les collègues ?


    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2005
    Messages : 2 898
    Points : 7 401
    Points
    7 401

    Par défaut

    Certains de ces trucs, j'appelle ça de la programmation de cochon qui sert à se mettre des autogoals.

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    décembre 2005
    Messages
    10 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2005
    Messages : 10 295
    Points : 18 032
    Points
    18 032

    Par défaut

    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...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : novembre 2006
    Messages : 105
    Points : 115
    Points
    115

    Par défaut

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

  5. #5
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : juin 2010
    Messages : 1 374
    Points : 68 480
    Points
    68 480

    Par défaut

    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,

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    août 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 21
    Points : 69
    Points
    69

    Par défaut

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

  7. #7
    Membre averti

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    avril 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2010
    Messages : 50
    Points : 304
    Points
    304

    Par défaut

    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.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Imaginieur
    Inscrit en
    octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Imaginieur

    Informations forums :
    Inscription : octobre 2010
    Messages : 14
    Points : 19
    Points
    19

    Par défaut Deep Thinking

    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 ?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 2
    Points : 0
    Points
    0

    Par défaut

    En java, qu'affiche ce programme ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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()" .

  10. #10
    Expert éminent Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 678
    Points : 8 890
    Points
    8 890

    Par défaut

    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    general:
    while(niveau1){
        while(niveau2){
            while(niveau3){
                //...
                break general;
            }
        }
    }

  11. #11
    Membre éprouvé
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 629
    Points : 987
    Points
    987

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(true)
    {
     echo 'lol';
    }
    qui fait quatre lignes de code, taper dans du
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var b=false;
    var a=b||'lol';//a vaut 'lol'

  12. #12
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    avril 2009
    Messages
    509
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2009
    Messages : 509
    Points : 1 349
    Points
    1 349

    Par défaut

    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 - Visualiser dans une fenêtre à part
    array_map("fonction_bidule",$tableau);
    http://php.net/manual/fr/function.array-map.php

  13. #13
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2010
    Messages
    1 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2010
    Messages : 1 228
    Points : 3 644
    Points
    3 644

    Par défaut

    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.
    "Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

    Je soutiens Diaspora*, le réseau social libre.

    Veillez à porter une attention toute particulière à l'orthographe...

    Blog collaboratif avec des amis : http://geexxx.fr

    Mon avatar a été fait par chiqitos, merci à lui !

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2004
    Messages : 1 252
    Points : 1 414
    Points
    1 414

    Par défaut

    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 - Visualiser dans une fenêtre à part
    List<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>> liste = new ArrayList<UnNomDeClasseTresLong<Imbriquee<EtPasForcementLisible>>>();

    Avec le truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 12
    Points : 30
    Points
    30

    Par défaut

    Pour les "styles" un peu particulier...
    il n'est pas interdit de les commenter...

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2004
    Messages : 1 252
    Points : 1 414
    Points
    1 414

    Par défaut

    Les classes internes aux méthodes en Java (utiles essentiellement dans les test cases) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MyClass {
      public static void main (String... args) {
        class MyActionListener implements ActionListener {
          private static int COUNT = 0;
          private int count = COUNT++;
          public void actionPerformed (ActionEvent e) {
            System.out.println(count);
          }
        }
        JButton button = new JButton();
        button.addActionListener(new MyActionListener());
        button.addActionListener(new MyActionListener());
      }
    }
    En fait ce sont des classes anonymes... nommées. Leur fichier .class sera du genre MyClass$1MyActionListener.class

  17. #17
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2005
    Messages : 2 898
    Points : 7 401
    Points
    7 401

    Par défaut

    En C#, le @ ne permet pas seulement d'échapper les "\" qu'on trouve par exemple dans les noms de fichiers mais également de définir des chaînes multilignes :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string select= @"SELECT name,  surname, age
                       FROM Persons
                       WHERE ID = ?";
    Très utile pour améliorer la lisibilité d'une éventuelle requête en pur ADO.net.

  18. #18
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : juin 2009
    Messages : 646
    Points : 796
    Points
    796

    Par défaut

    Quels sont vos astuces et secrets de programmation favoris

    Lire les articles, papiers et tout autres documents rédigés par l'auteur principal du langage (son créateur quoi, quand il y en a un plus ou moins identifié). Ce sont généralement ces documents qui exposent la philosophie du langage étudié et ces informations peuvent s'avérer cruciales pour une utilisation optimale par la suite (ce qui est parfois noyé ou non présenté dans la doc de référence dudit langage).

  19. #19
    Membre confirmé
    Inscrit en
    octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : octobre 2007
    Messages : 210
    Points : 451
    Points
    451

    Par défaut

    Des anti-patterns donc.

    Le genre de trucs qui fait exploser la dette technique.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 70
    Points : 88
    Points
    88

    Par défaut

    Les exemples PHP sont particulièrement pitoyables.

    Sinon, je citerais :

    * en python, l'utilisation de sum() couplé au fait que True vaut 1 pour compter des choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sum( x > 42 for x in liste )
    * sous postgres, la clause VALUES(), méconnue, mais véritable couteau suisse, qui permet de créer une pseudo-table avec des valeurs à la carte, utilisable comme table dans un JOIN :
    - tri à la carte
    - UPDATE de 50 lignes d'un coup avec des valeurs différentes
    - remplacement plus puissant de IN( liste )
    - etc

Discussions similaires

  1. Réponses: 27
    Dernier message: 04/07/2011, 15h57
  2. Quels sont vos astuces et secrets de programmation favoris
    Par Idelways dans le forum Actualités
    Réponses: 61
    Dernier message: 12/12/2010, 07h54
  3. Comment gérez vous la sécurité informatique, quels sont vos critères ?
    Par bidou dans le forum Débats sur le développement - Le Best Of
    Réponses: 35
    Dernier message: 31/08/2009, 00h11
  4. Réponses: 13
    Dernier message: 24/01/2007, 18h06
  5. Réponses: 7
    Dernier message: 21/02/2005, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo