451 votes

Pourquoi Java n'offre-t-il pas de surcharge d'opérateurs ?

En passant du C++ à Java, la question évidente qui reste sans réponse est la suivante : pourquoi Java n'a-t-il pas inclus la surcharge des opérateurs ?

N'est-ce pas ? Complex a, b, c; a = b + c; beaucoup plus simple que Complex a, b, c; a=b.add(c); ?

Y a-t-il une raison connue pour cela, des arguments valables pour pas permettant la surcharge de l'opérateur ? La raison est-elle arbitraire, ou perdue dans le temps ?

9voto

noah Points 9333

Groovy possède une surcharge d'opérateurs et s'exécute dans la JVM. Si vous n'êtes pas gêné par l'impact sur les performances (qui diminue chaque jour). C'est automatique et basé sur les noms de méthodes. Par exemple, '+' appelle la méthode 'plus(argument)'.

6voto

user14128 Points 489

Je pense qu'il s'agit peut-être d'un choix de conception conscient pour obliger les développeurs à créer des fonctions dont les noms communiquent clairement leurs intentions. En C++, les développeurs surchargeaient les opérateurs avec des fonctionnalités qui n'avaient souvent aucun rapport avec la nature communément acceptée de l'opérateur donné, ce qui rendait presque impossible de déterminer ce que faisait un morceau de code sans regarder la définition de l'opérateur.

5voto

Sarien Points 2417

On peut vraiment se tirer une balle dans le pied avec une surcharge de l'opérateur. C'est comme avec les pointeurs, les gens font des erreurs stupides avec eux et il a donc été décidé de retirer les ciseaux.

Du moins, je pense que c'est la raison. Je suis de votre côté de toute façon. :)

5voto

Volksman Points 1146

Certains disent que la surcharge des opérateurs en Java conduirait à l'obstruction. Ces personnes se sont-elles jamais arrêtées pour regarder du code Java effectuant des calculs de base, comme augmenter une valeur financière d'un pourcentage en utilisant BigDecimal ? .... la verbosité d'un tel exercice devient sa propre démonstration d'obsfuscation. Ironiquement, l'ajout de la surcharge des opérateurs à Java nous permettrait de créer notre propre classe Currency, ce qui rendrait ce type de code mathématique élégant et simple (moins obscur).

5voto

Olai Points 1

Techniquement, il existe une surcharge d'opérateurs dans chaque langage de programmation qui peut traiter différents types de nombres, par exemple les nombres entiers et réels. Explication : Le terme "surcharge" signifie qu'il existe simplement plusieurs implémentations pour une même fonction. Dans la plupart des langages de programmation, différentes implémentations sont fournies pour l'opérateur +, une pour les nombres entiers, une pour les nombres réels, c'est ce qu'on appelle la surcharge d'opérateurs.

Beaucoup de gens trouvent étrange que Java dispose d'une surcharge de l'opérateur + pour l'addition de chaînes de caractères, et d'un point de vue mathématique, ce serait en effet étrange, mais du point de vue du développeur d'un langage de programmation, il n'y a rien de mal à ajouter une surcharge intégrée de l'opérateur + pour d'autres classes, par exemple String. Cependant, la plupart des gens sont d'accord pour dire qu'une fois que vous ajoutez une surcharge intégrée pour + pour String, c'est généralement une bonne idée de fournir cette fonctionnalité au développeur également.

Je ne suis absolument pas d'accord avec l'idée fausse selon laquelle la surcharge des opérateurs obscurcit le code, car c'est au développeur d'en décider. C'est naïf de penser cela, et pour être tout à fait honnête, cela devient vieux.

+1 pour l'ajout de la surcharge des opérateurs en Java 8.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X