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 ?

4voto

Dire que la surcharge des opérateurs conduit à des erreurs logiques de type cet opérateur ne correspond pas à la logique de l'opération, c'est comme dire rien. Le même type d'erreur se produira si le nom de la fonction est inapproprié à la logique de l'opération - alors quelle est la solution : laisser tomber la capacité d'utilisation de la fonction ! C'est une réponse comique - "Inapproprié pour la logique de fonctionnement", chaque nom de paramètre, chaque classe, fonction ou autre peut être logiquement inapproprié. Je pense que cette option devrait être disponible dans les langages de programmation respectables, et ceux qui pensent que ce n'est pas sûr - hé, personne ne dit que vous devez l'utiliser. Prenons le C#. Ils ont laissé tomber les pointeurs, mais il y a la déclaration "code non sécurisé" - programmez comme vous voulez à vos risques et périls.

2voto

David Schlosnagle Points 2113

En supposant que Java soit le langage de mise en œuvre, a, b et c seraient toutes des références au type Complex avec des valeurs initiales de null. En supposant également que Complex est immuable, comme l'indique l'exemple mentionné ci-dessus. BigInteger et d'autres immuables similaires BigDecimal Je pense que vous voulez dire ce qui suit, car vous assignez la référence au complexe obtenu en additionnant b et c, et non pas en comparant cette référence à a.

N'est-ce pas :

Complex a, b, c; a = b + c;

beaucoup plus simple que :

Complex a, b, c; a = b.add(c);

2voto

Parfois, il serait agréable d'avoir une surcharge d'opérateurs, des classes amies et un héritage multiple.

Cependant, je pense toujours que c'était une bonne décision. Si Java avait eu une surcharge d'opérateurs, nous n'aurions jamais pu être sûrs de la signification des opérateurs sans examiner le code source. Actuellement, ce n'est pas nécessaire. Et je pense que votre exemple d'utilisation de méthodes au lieu de la surcharge d'opérateurs est également très lisible. Si vous voulez que les choses soient plus claires, vous pouvez toujours ajouter un commentaire au-dessus des déclarations poilues.

// a = b + c
Complex a, b, c; a = b.add(c);

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