L'une des fonctionnalités proposées pour le "Project Coin" de Java 7 était "l'opérateur Elvis". Un rapport d'une présentation JavaOne 2009 sur Project Coin le décrit comme tel:
L'une des «petites fonctionnalités» abordées dans cette présentation est ce que l'on appelle «l'opérateur Elvis», une version plus concise de l'opérateur ternaire. Je me retrouve à manquer certaines des fonctionnalités de Groovy lors de l'utilisation de Java traditionnel et ce serait un opérateur que je pourrais utiliser dans les deux langues s'il était ajouté. L'opérateur "Elvis" est pratique pour spécifier une valeur par défaut qui peut être utilisée lorsque l'expression évaluée est nulle. Comme l'opérateur de navigation sécurisée de Groovy, c'est un moyen concis de spécifier comment éviter les null inutiles. J'ai déjà blogué sur la façon dont j'aime éviter l'exception NullPointerException.
Alors que d'autres aspects de Project Coin ont finalement été mis en œuvre, celui-ci ne l'a pas été. Pourquoi l'opérateur Elvis a-t-il finalement été rejeté, bien qu'il ait été présenté à JavaOne comme un candidat probable à l'inclusion?
Pour être clair, je pose spécifiquement des questions sur cet opérateur et la raison pour laquelle il a été rejeté dans le cadre du "Project Coin" de Java 7, étant donné qu'il a été sérieusement envisagé à l'époque. Je soupçonne qu'il existe des listes de diffusion ou autres où les raisons du rejet ont été discutées, mais je n'ai rien trouvé. S'il existe des informations plus générales sur les raisons pour lesquelles il n'est inclus dans aucune version de Java, cela est acceptable mais pas préféré.
la source
?.
comme exemple ), elle serait certainement trop large comme une question ordinaire, mais vous auriez une bonne réponse.Réponses:
Naturellement, la meilleure personne pour poser cette question est un membre du comité exécutif du JCP, pas nous. Cependant, cela ne m'empêchera pas de me livrer à des spéculations inutiles.
La réponse à chaque question «pourquoi cette fonctionnalité n'a-t-elle pas été implémentée» est-elle toujours parce que les avantages n'ont pas dépassé les coûts.
Eric Lippert (ancien membre de l'équipe C #) dit que, pour qu'un produit ait une fonctionnalité, cette fonctionnalité doit être:
En d'autres termes, il doit y avoir beaucoup de choses importantes qui doivent se produire avant que toute nouvelle fonctionnalité de langage de programmation puisse être réalisée. Les coûts sont plus importants que vous ne le pensez.
Dans l'équipe C #, chaque nouvelle demande de fonctionnalité commence par un score de moins 100. Ensuite, l'équipe évalue les avantages et les coûts, en ajoutant des points pour les avantages et en soustrayant des points pour les coûts. Si le score ne dépasse pas zéro, la fonctionnalité proposée est rejetée sommairement. En d'autres termes, la nouvelle fonctionnalité doit fournir un avantage convaincant.
Mais l' opérateur Elvis en a fait C #. Alors pourquoi n'a-t-il pas réussi à devenir Java?
Malgré leurs similitudes apparentes, Java et C # ont des philosophies de langage considérablement différentes. Cela est démontré par le fait que les programmes d'entreprise Java ont tendance à être de grandes collections structurelles d'architecture. La brièveté et l'expressivité du langage sont sacrifiées sur l'autel de la cérémonie et la facilité de codage. Les modèles d'architecture logicielle bien connus que tout le monde dans l'équipe de développement peut reconnaître sont préférés aux commodités linguistiques.
Considérez cet échange Reddit :
Ces différences profondes dans la philosophie du langage ne concernent pas seulement la façon dont les langues sont utilisées, mais aussi la façon dont le processus de conception du langage lui-même est entrepris. C # est un langage de dictateur bienveillant . Pour intégrer une nouvelle fonctionnalité en C #, il suffit de convaincre une seule personne: Anders Hejlsberg .
Java adopte une approche plus conservatrice. Pour intégrer une nouvelle fonctionnalité à Java, elle doit obtenir le consensus d'un consortium de grands fournisseurs tels que Oracle, IBM, HP, Fujitsu et Red Hat. De toute évidence, ce processus va être plus lent et présenter une barre plus élevée pour les nouvelles fonctionnalités du langage.
La question "pourquoi la fonctionnalité x n'a-t-elle pas été implémentée ..." inclut-elle toujours implicitement les mots "... si c'est évidemment une si bonne idée?" Comme je l'ai suffisamment démontré ici, le choix n'est jamais aussi simple.
la source