• [^] # Re: Grandiose

    Posté par . En réponse au journal Linuxfr en J2EE. Évalué à 4.

    Ben non, pourquoi ? Quand une exception se produit en Ruby, on a aussi une stack trace, c'est pas une spécificité du Java (je sais que ça peut surprendre, mais déjà en PHP ça existait, si si).

    Et non, effectivement, les deux ne sont pas équivalente. On peut utiliser les deux notations pour produire des résultats identiques, mais si elles étaient équivalentent je n'aurais pas pris de temps ici pour pointer leur différence.

    Sinon, oui on peut émuler le duck-typing en Java avec un tableau d'objets ou un hash (c'est d'ailleurs ce que tôt ou tard on finit par faire quand on en a assez de devoir faire évoluer X méthodes quand on change juste une petite chose dans l'un des paramètres fondementaux), mais c'est tellement plus simple d'utiliser un langage fait pour ça, d'autant plus que les types natifs de Java rendent souvent l'opération pénible.

    Oh, je n'aime pas beaucoup répondre "ligne par ligne" parce que souvent les citations sorties du contexte sont mal interprétées, mais celle-là est trop belle :
    Et si je vois un truc comme ca un jour dans du Java, c'est une balle dans la nuque sur la place publique pour le cochon qui l'a ecrit.
    Ben oui, c'est bien là le problème. En Java, on dit ne pas aimer la répétition, mais prône la verbosité. Ruby prétends que la verbosité est contre-productive, et qu'elle n'est rien d'autre qu'une autre forme de répétition de structure. Par exemple, si en Java je veux qu'une méthode fonctionnant de la même façon soit donnée à plusieurs classes existantes n'ayant pas d'ancêtre commun modifiable, ça va m'obliger à :

    - créer une interface
    - créer des sous-classes de chaque objet
    - créer un objet qui contienne ma méthode
    - créer dans mes sous-classes un conteneur pour mon nouvel objet
    - créer une instance du nouvel objet dans le constructeur de chaque sous-classes
    - créer dans chaque sous-classes une méthode paravent pour appeller celle qui m'intéresse du nouvel objet

    Beurk

    En Ruby :
    - créer un module contenant ce qu'il faut pour que ma méthode marche
    - implémenter ma méthode (à la volée dans un instance ou dans la classe, ou dans la déclaration de ma classe si c'est moi qui la crée) pour chaque classe

    Hop