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

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

Java Discussion :

if (null == object) .. ou if (objet == null) ..


Sujet :

Java

  1. #21
    Membre actif
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Par défaut
    A tous, merci de vos réponses et du temps passé à les rédiger.

    Il y a des interrogations que je ne sais partager qu'en face-à-face (invariant, ici c'est 2 ou +),
    ... certainement dû à une démarche naturellement intuitive (encadrée par la réduction des incertitudes et par tous les outils utilisés par la logique).

    Ce doit être un modèle en voie d'extinction.

  2. #22
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Tu peux aussi poster le code des tests dont tu parles. Je suis sur qu'ils interesseraient ceux qui sont intervenus sur ce fil (dont moi) En particulier le benchmark sur l'utilisation d'une instruction par bloc try/catch.
    Ca permettrait de voir la fiabilité du test ainsi que l'apport par rapport à la lisibilité.

  3. #23
    Membre actif
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Tu peux aussi poster le code des tests dont tu parles. Je suis sur qu'ils interesseraient ceux qui sont intervenus sur ce fil (dont moi) En particulier le benchmark sur l'utilisation d'une instruction par bloc try/catch.
    Ca permettrait de voir la fiabilité du test ainsi que l'apport par rapport à la lisibilité.
    Pour le programme joint, il s'agissait de découvrir quelles étaient les méthodes les plus efficaces parmi toutes celles fournies par les internautes sur le test FizzBuzz.

    La certitude des amateurs de beau code (récursivité, code compact [comme le ifNested que je croyais équivalent au if normal car écrit sous une formulation de type C], normalisé, ...]) ne faisaient pas, à mes yeux, du bon code.

    En privilégiant le concept théorique/mathématique sur la compréhension intuitive du langage (qui demande des validations), ils s'éloignent de l'esprit Java qui est très pragmatique (ne serait-ce que par rapport à Smalltalk), qui ressemble à un chef d’œuvre de meilleur artisan, et non à une thèse sur les objets.

    D'ailleurs, même si Java ne reste pas 1er (derrières les lignes vieilles lunes de Cobol toujours actives) longtemps, la JVM a encore de beaux jours devant elle.
    Je comprends parfaitement mon employeur qui confie la gestion de ses quelques milliards d'euros à Java et non à .net, SmallTalk ou autre merveille.

    C'est un point de vue d'un ancien admin en production que tout le monde peut/doit contester ... ou améliorer.

    Pour les autres améliorations, je les ai faites en optimisant mon application (base neuronale sur db4o) et je n'ai pas envie de tout recommencer, même si je doit avoir encore quelques log sur un disque.

    Je viens de m'apercevoir que qu'Effective Java 2008 était maintenant disponible en PDF.
    Déjà en relisant les premières ligne je conserve mon point de vue sur ce livre, même s'il est en désaccord avec certains.

    Je vais voir ce que je peux faire comme benchmark pour le try.
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    package exercices;
     
    import java.util.Hashtable;
     
    public class FizzBuzz {
        // time for cum with nbIter=30 > 300; 30 ~= 3000
        final static int nbIter = 30;
        final static String sep = "_";
     
        static long ifNested() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                sb.append(//
                i % 15 == 0 //
                    ? "FizzBuzz" //
                    : (i % 3 == 0 //
                        ? "Fizz"//
                        : (i % 5 == 0//
                            ? "Buzz" //
                            : i)));// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("ifNested\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long stringPlus() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                String x = "";
                x += (i % 3 == 0) ? "Fizz" : "";
                x += (i % 5 == 0) ? "Buzz" : "";
                if ("".equals(x)) {
                    x += Integer.toString(i);
                }
                sb.append(x);// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("stringPlus\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long withIf() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                if (i % 3 == 0) {
                    sb.append("Fizz");
                    if (i % 5 == 0) {
                        sb.append("Buzz");
                    }
                } else if (i % 5 == 0) {
                    sb.append("Buzz");
                } else {
                    sb.append(i);
                }// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withIf\t\t%20d\n", totT);
            // sb.append("\n");System.out.println(sb.toString());
            return totT;
        }
     
        static long withArray() {
            final String[] lis = {"FizzBuzz", "", "", "Fizz", "", "Buzz", "Fizz",
                "", "", "Fizz", "Buzz", "", "Fizz", "", "",};
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                final String pos = lis[i % 15];
                sb.append(((0 == pos.length()) ? i : pos));// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withArray\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long withTable() {
            final Hashtable<Integer, String> ht = new Hashtable<Integer, String>(8);
            ht.put(0, "FizzBuzz");
            ht.put(3, "Fizz");
            ht.put(5, "Buzz");
            ht.put(6, "Fizz");
            ht.put(9, "Fizz");
            ht.put(10, "Buzz");
            ht.put(12, "Buzz");
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                final String s = ht.get(i % 15);
                sb.append((null == s ? i : s));// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withTable\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
     
        }
     
        static String recursive2(final int nbIter1) {
            if (nbIter1 % 3 == 0) {
                String ret = "Fizz";
                if (nbIter1 % 5 == 0) {
                    ret += "Buzz";
                }
                return ret;
            } else if (nbIter1 % 5 == 0) { return "Buzz"; }
            return "" + nbIter1;
        }
     
        static long recursive() {
            final StringBuilder sb = new StringBuilder();
            int n = 0;
            final long t = System.nanoTime();
            while (n < nbIter) {
                sb.append(recursive2(n++));
            }
            final long totT = System.nanoTime() - t;
            System.out.format("recursive\t%20d\n", totT);
            // sb.append("\n");System.out.println(sb.toString());
            return totT;
        }
     
        /*** @param args */
        public static void main(final String[] args) {
            long cum = 0L, cum2 = 0L;
            for (int i = 0; i < 5; i++) {
                System.out.println("------ " + i + " -----");
                final long totSb = stringPlus();
                final long totIn = ifNested();
                final long totWi = withIf();
                final long totWa = withArray();
                final long totWt = withTable();
                final long totRe = recursive();
                System.out.format("... stringPlus/withIf :%5d\n", (totSb * 100)
                    / totWi);
                System.out.format("...   ifNested/withIf :%5d\n", (totIn * 100)
                    / totWi);
                System.out.format("...  withArray/withIf :%5d\n", (totWa * 100)
                    / totWi);
                System.out.format("...  withTable/withIf :%5d\n", (totWt * 100)
                    / totWi);
                System.out.format("...  recursive/withIf :%5d\n", (totRe * 100)
                    / totWi);
                cum += totIn + totSb + totWi + totWa + totWt + totRe;
                System.out.println("CUMUL (SECOND) == " + cum / 100000000 + "."
                    + cum % 100000000 + "\t , diff: " + (cum - cum2));
                cum2 = cum;
            }
        }
    }

  4. #24
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Donc : la méthode avec l’algorithme le plus simple est la plus performante !!!

    C'est un peu l'inverse de tout ce que tu avançais non ?


    a++

  5. #25
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et perso j'aurait d'autre chose à redire dans ce benchmark.

    Déjà la durée d'exécution des tests qui tourne autour de 20000 nanosecondes, soit 0,02 millisecondes. C'est trop peu pour voir une différence notable...
    D'ailleurs on ne connait même pas la précision de nanoTime(). Avec de si petites valeurs il y a de forte chance que les résultat soient faussés.

    Il serait préférable d'augmenter le jeu de données et d'appeler chaque méthode en boucle plusieurs fois pour augmenter le temps d'exécution. (au moins 0.5s pour chaque test).






    Avec -verbose:gc on peut alors voir que le GC mouline pas mal. Le problème c'est que cela peut impacter les temps d'exécutions des autres tests. Il serait préférable de les effectuer dans des exécutions séparées ou de forcer plusieurs appels du GC entre chaque tests...





    Même chose pour HotSpot qui peut fausser les premiers résultats. Il serait prudent d'utiliser -XX:+PrintCompilation pour ne prendre en compte que les résultats après toutes les compilations...





    Ta méthode "recursive" ne l'est pas...





    Enfin tes "optimisations" sont à l'origine des mauvaises performances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sb.append(((0 == pos.length()) ? i : pos));
    Comme i est un int et pos une String, cela génère un appel vers la méthode sb.append(Object) (avec de l'autoboxing pour le type int).

    A l'inverse avec un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	if (pos.length()==0)
    		sb.append(i);
    	else
    		sb.append(pos);
    Tu appelles bien les bonnes méthode append(int) et append(String), et on obtiens alors un temps proche de "withIf"...


    Ce qui revient un peu ce qu'on disait : un algo simple est plus facile à optimiser, que ce soit pour le développeur OU pour le compilateur...




    a++

  6. #26
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par cylere Voir le message
    Je viens de m'apercevoir que qu'Effective Java 2008 était maintenant disponible en PDF.
    Déjà en relisant les premières ligne je conserve mon point de vue sur ce livre, même s'il est en désaccord avec certains.
    Bah, et qu'est-ce qu'on doit comprendre par là ?
    Effective Java est un très bon bouquin, j'ai jamais entendu dire le contraire. J'ai vu de-ci de-là renier certaines recommandations qui y étaient données, mais en général par des gens qui ne comprenaient pas de quoi ils parlaient.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #27
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    cela frôlait les 3%.
    C'est pas gras non plus, c'est probablement inférieur à la marge d'erreur de tes mesures, non ?

  8. #28
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Enfin tes "optimisations" sont à l'origine des mauvaises performances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sb.append(((0 == pos.length()) ? i : pos));
    Comme i est un int et pos une String, cela génère un appel vers la méthode sb.append(Object) (avec de l'autoboxing pour le type int).

    A l'inverse avec un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	if (pos.length()==0)
    		sb.append(i);
    	else
    		sb.append(pos);
    Tu appelles bien les bonnes méthode append(int) et append(String), et on obtiens alors un temps proche de "withIf"...


    Ce qui revient un peu ce qu'on disait : un algo simple est plus facile à optimiser, que ce soit pour le développeur OU pour le compilateur...
    a++
    Tiens je m'étais jamais rendu compte de cette subtilité. Tu m'as appris quelque chose

  9. #29
    Membre actif
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Par défaut
    J'ai peut être mémorisé le try à la place du finally dont parle Joshua Bloch.
    Je n'ai plus le temps de faire des essais pertinents.

    Ci-après le FizzBuzz corrigé (enfin, je l'espère), on peut aussi l'essayer en modulant nbIter,
    En dehors de l'erreur sur le récursif, je n'avais pas envisagé l'auto-boxing dans ce cas de figure, merci de ces observations.

    Ce test est complétement indépendant des améliorations successives/progressives dont j'ai pu parler par ailleurs.

    La relecture de cette discussion est très instructive, et je crois qu'elle peut se terminer, je la marque résolue.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    package exercices;
     
    import java.util.Hashtable;
     
    public class FizzBuzz {
        // time for cum with nbIter=30 > 300; 30 ~= 3000
        static final int nbIter = 30;
        static final String sep = "_";
     
        static long ifNested() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                sb.append(//
                i % 15 == 0 //
                    ? "FizzBuzz" //
                    : (i % 3 == 0 //
                        ? "Fizz"//
                        : (i % 5 == 0//
                            ? "Buzz" //
                            : i)));// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("ifNested\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long stringPlus() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                String x = "";
                x += (i % 3 == 0) ? "Fizz" : "";
                x += (i % 5 == 0) ? "Buzz" : "";
                if (x.isEmpty()) { // MODIF
                    x += Integer.toString(i);
                }
                sb.append(x);// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("stringPlus\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long withIf() {
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                if (i % 3 == 0) {
                    sb.append("Fizz");
                    if (i % 5 == 0) {
                        sb.append("Buzz");
                    }
                } else
                    if (i % 5 == 0) {
                        sb.append("Buzz");
                    } else {
                        sb.append(i);
                    }// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withIf\t\t%20d\n", totT);
            // sb.append("\n");System.out.println(sb.toString());
            return totT;
        }
     
        static long withArray() {
            final String[] lis = {"FizzBuzz", "", "", "Fizz", "", "Buzz", "Fizz",
                "", "", "Fizz", "Buzz", "", "Fizz", "", "",};
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                final String pos = lis[i % 15];
                sb.append(((0 == pos.length()) ? i : pos));// sb.append(sep);
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withArray\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
        }
     
        static long withTable() {
            final Hashtable<Integer, String> ht = new Hashtable<Integer, String>(8);
            ht.put(0, "FizzBuzz");
            ht.put(3, "Fizz");
            ht.put(5, "Buzz");
            ht.put(6, "Fizz");
            ht.put(9, "Fizz");
            ht.put(10, "Buzz");
            ht.put(12, "Buzz");
            final StringBuilder sb = new StringBuilder();
            final long t = System.nanoTime();
            for (int i = 0; i < nbIter; i++) {
                final String s = ht.get(i % 15);
                // MODIF
                // http://www.developpez.net/forums/d1196563-2/java/general-java/if-null-object-if-objet-null/#post6561766
                // sb.append((null == s ? i : s));// sb.append(sep);
                if (null == s) {
                    sb.append(i);
                } else {
                    sb.append(s);
                }
            }
            final long totT = System.nanoTime() - t;
            System.out.format("withTable\t%20d\n", totT);
            // sb.append("\n"); System.out.println(sb.toString());
            return totT;
     
        }
     
        static int recursive(final StringBuilder sb, final int n) {
            if (0 == n) {
                return 1;
            }
            if (n % 3 == 0) {
                sb.insert(0, "Fizz");
                if (n % 5 == 0) {
                    sb.insert(0, "Buzz");
                }
            } else
                if (n % 5 == 0) {
                    sb.insert(0, "Buzz");
                } else {
                    sb.insert(0, n);
                }
            return n + recursive(sb, n - 1);
        }
     
        static long recursive() {
            final StringBuilder sb = new StringBuilder("");
            final long t = System.nanoTime();
            recursive(sb, nbIter);
            final long totT = System.nanoTime() - t;
            System.out.format("recursive\t%20d\n", totT);
            sb.append("\n");
            System.out.println(sb.toString());
            return totT;
        }
     
        /*** @param args */
        public static void main(final String[] args) {
            long cum = 0L, cum2 = 0L;
            for (int i = 0; i < 5; i++) {
                System.out.println("------ " + i + " -----");
                final long totSb = stringPlus();
                final long totIn = ifNested();
                final long totWi = withIf();
                final long totWa = withArray();
                final long totWt = withTable();
                final long totRe = recursive();
                System.out.format("... stringPlus/withIf :%5d\n", (totSb * 100)
                    / totWi);
                System.out.format("...   ifNested/withIf :%5d\n", (totIn * 100)
                    / totWi);
                System.out.format("...  withArray/withIf :%5d\n", (totWa * 100)
                    / totWi);
                System.out.format("...  withTable/withIf :%5d\n", (totWt * 100)
                    / totWi);
                System.out.format("...  recursive/withIf :%5d\n", (totRe * 100)
                    / totWi);
                cum += totIn + totSb + totWi + totWa + totWt + totRe;
                System.out.println("CUMUL (SECOND) == " + cum / 100000000 + "."
                    + cum % 100000000 + "\t , diff: " + (cum - cum2));
                cum2 = cum;
            }
        }
    }

  10. #30
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cylere Voir le message
    J'ai peut être mémorisé le try à la place du finally dont parle Joshua Bloch.
    Pour le finally la raison n'est pas non plus à chercher du coté de l'optimisation ou des performances...

    Le bloc finally est réservé à des opérateurs de "nettoyages". Si tu effectues plusieurs traitement dans un finally tu augmentes le risque d'exception et donc le fait qu'il ne soit pas exécuté totalement...


    a++

  11. #31
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Pour le finally la raison n'est pas non plus à chercher du coté de l'optimisation ou des performances...

    Le bloc finally est réservé à des opérateurs de "nettoyages". Si tu effectues plusieurs traitement dans un finally tu augmentes le risque d'exception et donc le fait qu'il ne soit pas exécuté totalement...


    a++
    A quand le finally du finally?

  12. #32
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par deathness Voir le message
    A quand le finally du finally?
    quoi?


  13. #33
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Désolé de remonter la discussion, mais il faut dire qu'elle a eu un effet bénéfique me concernant : il m'a poussé à acheter le livre "Effective Java 2nd edition" (chose que je devais faire depuis un bout de temps d'ailleurs).


    Je l'ai seulement un peu feuilleté pour le moment, mais comme je le pensais l'idée qu'on y retrouve n'est pas de produire du code "optimisé" mais du "beau code".

    Citation Envoyé par cylere Voir le message
    plus optimisé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Iterator it = .. ;
    while(it.hasNext(){
    ..}
    car la référence de l'iterator est incluse dans les paramètres de for, pas de référence externe à la boucle (Cf. : Joshua Bloch)
    J'ai lu ce passage, et il ne parle pas d'optimisation mais de propreté du code.

    L'intérêt du for permet de limiter la porté de la variable, ce qui évite de l'utiliser par erreur après la boucle...


    Et d'ailleurs avec Java 5.0 il conseille bien d'utiliser le for-étendus (à partir du moment où l'ont n'a pas besoin de la méthode remove() de l'Iterator...





    Bref l'idée principal du bouquin consiste bel et bien à écrire un code propre et lisible, en utilisant les API/Objets les plus adaptés...



    a++

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [VBA Access] Champ texte null alors que l'objet existe bien.
    Par Caroline1 dans le forum VBA Access
    Réponses: 9
    Dernier message: 28/03/2006, 17h31
  2. Réponses: 4
    Dernier message: 18/02/2006, 16h48
  3. [C#][.net2] NULL Object reference lors de l'accès à un DGV
    Par VincenzoR dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/01/2006, 02h00
  4. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06
  5. Formulaire - lien JS - objet Null ou pas objet...
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/10/2004, 14h08

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