Lorsque Java a été conçu pour la première fois, il a été jugé approprié de supprimer les fonctions anonymes. Je peux penser à deux raisons (mais elles peuvent être différentes des raisons officielles):
- Java a été conçu comme un langage orienté objet sans fonctions, il n'était donc pas très naturel d'avoir des fonctions anonymes dans un langage sans fonctions. Ou du moins, cela aurait beaucoup influencé la conception de la langue.
- Les fonctions anonymes n'étaient pas populaires dans les communautés de programmeurs que Java était censé attirer (C, C ++, Pascal?). Même maintenant, de nombreux programmeurs Java semblent considérer ces fonctionnalités comme assez exotiques (mais cela changera probablement très rapidement avec Java 8).
Au cours des années suivantes, comme l'a expliqué Robert Harvey, la politique de Sun a toujours été de maintenir Java rétrocompatible et très stable.
D'autre part, d'autres langages concurrents sont apparus (le plus important étant C #, qui est né comme un clone Java et a ensuite pris sa propre direction de développement).
Les langages concurrents ont mis Java sous pression pour deux raisons:
Puissance expressive
De nouvelles fonctionnalités peuvent rendre certains idiomes de programmation plus faciles à écrire, rendant le langage plus attrayant pour les programmeurs. Normalement, l'ensemble des fonctionnalités fournies par un langage est un compromis entre puissance expressive, complexité du langage, cohérence de conception: l'ajout de fonctionnalités rend un langage plus expressif mais aussi plus complexe et difficile à maîtriser.
Quoi qu'il en soit, au cours des dernières années, les concurrents de Java ont ajouté de nombreuses nouvelles fonctionnalités que Java n'avait pas, et cela peut être considéré comme un avantage.
Engouement
Oui, malheureusement, c'est un facteur de choix technologique, du moins d'après ce que je peux voir dans mon expérience quotidienne en tant que programmeur: un outil doit avoir une certaine fonctionnalité, même si la plupart des membres de l'équipe ne savent pas comment l'utiliser et ceux qui pourraient l'utiliser n'en ont pas besoin la plupart du temps.
Le battage médiatique peut être encore plus important pour les personnes non techniques comme les gestionnaires, qui peuvent être ceux qui décident de la plate-forme pour un certain projet. Les gestionnaires ne se souviennent parfois que de certains mots clés comme lambda, parallélisme, multicœur, programmation fonctionnelle, cloud computing, ... Si notre technologie de choix a une marque verte sur chaque élément de la liste, alors nous sommes à jour.
Donc, l'OMI depuis un certain temps, Java a été pris entre
- la politique originale de stabilité du langage et de simplicité de conception, une énorme base de code et une communauté de développeurs d'une part, et
- la pression des langages concurrents qui pourraient attirer les programmeurs Java, C # au début, puis Scala, Clojure, F # (je nomme ceux que je connais, il peut y en avoir d'autres).
Finalement, Oracle a décidé de mettre à niveau Java pour le rendre plus compétitif. À mon avis, les nouvelles fonctionnalités s'adressent en particulier aux programmeurs Java qui pourraient être tentés de passer en C # et qui voient d'autres langages comme Scala et Clojure comme trop différents de Java. D'un autre côté, les développeurs qui ont une certaine expérience de la programmation fonctionnelle et qui souhaitent toujours utiliser la JVM sont probablement déjà passés à Scala, Clojure ou à un autre langage.
Ainsi, les nouvelles fonctionnalités de Java 8 rendront Java plus puissant en tant que langage et l'objectif déclaré est la programmation simultanée et parallèle, mais la mise à niveau semble également aborder les aspects marketing (Mark Reinhold, architecte en chef de Java chez Oracle, a déclaré: "Certains dire que l'ajout d'expressions Lambda est juste pour suivre les enfants cool, et il y a du vrai là-dedans, mais la vraie raison est les processeurs multicœurs; la meilleure façon de les gérer est avec Lambda ", voir cet article ).
Donc, oui, de nombreuses (toutes) fonctionnalités Java 8 étaient déjà bien connues, mais pourquoi et quand une fonctionnalité est ajoutée à un langage dépend de nombreux facteurs: public cible, communauté existante, base de code existante, concurrents, marketing, etc.
ÉDITER
Une brève note concernant "... j'avais lu des informations sur les flux dans SIC (1996).": Voulez-vous dire que vous avez besoin de lambdas Java 8 pour implémenter des flux? En fait, vous pouvez les implémenter en utilisant des classes internes anonymes.