• [^] # Re: Pascal...

    Posté par . En réponse au journal Python comme premier langage de programmation ?. Évalué à 2.

    Selon moi, utiliser la notation hongroise dans le contexte de langages à typage dynamique et faible, c'est une façon de définir une autre forme d'interface : pour reprendre un exemple que j'avais donné en Perl, si j'ai un truc du genre :

    my $i_var = 10;
    $i_var += $valeur_flottante;

    ... Alors je m'attends à ce que la prochaine fois que je cherche à lire $i_var, j'aie bien fait attention à le lire en tant qu'entier :

    un_petit_calcul(int($i_var));

    Évidemment mon exemple est trivial, mais comme l'explique groumly ailleurs, l'idée c'est quand même aussi d'ajouter une certaine sémantique qui ne peut être capturée par le compilateur. Dans le cas de langages fortement typés, préfixer par i_, f_, etc. ne sert à rien (le compilateur a déjà les infos pour te gueuler dessus). Dans des cas plus complexes, du genre :

    sub construire_type1 { return { Champ1 => valeur1(), Champ2 => valeur2(), ... }; }
    sub construire_type2 { return { AutreChamp1 => valeur1(), AutreChamp2 => valeur2(), ... }; }
    my $foo = construire_type1();
    my $bar = construire_type2();
    # du temps passe...
    $foo = $bar; # MAIS C'EST PAS BIEN ! C'EST PAS LES MÊMES TYPES ! :(
    sub construire_type1 { return { Champ1 => valeur1(), Champ2 => valeur2(), ... }; }
    sub construire_type2 { return { AutreChamp1 => valeur1(), AutreChamp2 => valeur2(), ... }; }
    my $t1_foo = construire_type1();
    my $t2_bar = construire_type2();
    # du temps passe...
    $t1_foo = $t2_bar; # MAIS C'EST PAS BIEN ! C'EST PAS LES MÊMES TYPES ! Mais bon au moins c'est plus visible

    Ça reste un exemple abstrait, et bien entendu un bon choix pour nommer les variables va très certainement aider à ne pas se planter, avec ou sans préfixes. Mais parfois il est facile de faire des bourdes pour des types qui sont très proches, parce qu'on a mal lu la doc, etc. Et dans un langage dynamique, ça a tendance à avoir des effets plutôt très indésirables (genre une partie des champs est commune à deux types, et au début, tout à l'air de fonctionner, et ensuite des bugs apparaissent « silencieusement » ...)