Una de las características propuestas para "Project Coin" de Java 7 fue el "operador de Elvis". Un informe de una presentación de JavaOne de 2009 sobre Project Coin lo describió como tal:
Una de las "pequeñas características" cubiertas en esta presentación es el llamado "operador de Elvis", una versión más concisa del operador ternario. Me encuentro extrañando algunas de las características de Groovy cuando uso Java tradicional y este sería un operador que podría usar en ambos idiomas si se agregara. El operador "Elvis" es útil para especificar un valor predeterminado que se puede usar cuando la expresión evaluada es nula. Al igual que el operador de navegación segura de Groovy, es una forma concisa de especificar cómo evitar nulos innecesarios. He bloggeado anteriormente sobre cómo me gusta evitar la NullPointerException.
Mientras que otros aspectos del Proyecto Coin finalmente se implementaron, este no. ¿Por qué el operador de Elvis fue rechazado en última instancia, a pesar de ser presentado en JavaOne como un posible candidato para la inclusión?
Para ser claros, estoy preguntando específicamente sobre este operador y la razón por la que fue rechazado como parte de "Project Coin" de Java 7, dado que se consideró seriamente en ese momento. Sospecho que hay listas de correo o similares donde se discutieron las razones para rechazarlo, pero no pude encontrar nada. Si hay información más general sobre por qué no se incluye en ninguna versión de Java, eso es aceptable pero no preferido.
fuente
?.
como ejemplo ), ciertamente sería demasiado amplia como una pregunta ordinaria, pero tendría una buena respuesta.Respuestas:
Naturalmente, la mejor persona para hacer esta pregunta es alguien en el Comité Ejecutivo de JCP, no nosotros. Sin embargo, eso no me impedirá participar en una especulación ociosa.
La respuesta a cada pregunta de "por qué no se implementó esta característica" es siempre porque los beneficios no excedieron los costos.
Eric Lippert (ex miembro del equipo de C #) dice que, para que un producto tenga una característica, esa característica debe ser:
En otras palabras, debe haber muchas cosas importantes que deben suceder antes de que se pueda realizar una nueva característica del lenguaje de programación. Los costos son mayores de lo que cree que son.
En el equipo de C #, cada solicitud de nueva característica comienza con una puntuación de menos 100. Luego, el equipo evalúa los beneficios y los costos, sumando puntos por los beneficios y restando puntos por los costos. Si la puntuación no supera el cero, la característica propuesta se descarta sumariamente. En otras palabras, la nueva característica debe proporcionar un beneficio convincente.
Pero el operador de Elvis lo convirtió en C #. Entonces, ¿por qué no llegó a Java?
A pesar de sus aparentes similitudes, Java y C # tienen filosofías de lenguaje significativamente diferentes. Esto se evidencia por el hecho de que los programas empresariales Java tienden a ser grandes colecciones estructurales de arquitectura. La brevedad y la expresividad del lenguaje se sacrifican en el altar de la ceremonia y la facilidad de codificación. Los patrones arquitectónicos de software bien conocidos que todos los miembros del equipo de desarrollo pueden reconocer son preferibles a las comodidades del lenguaje.
Considere este intercambio de Reddit :
Estas profundas diferencias en la filosofía del lenguaje se extienden no solo a la forma en que se usan los idiomas, sino a la forma en que se lleva a cabo el proceso de diseño del lenguaje en sí. C # es un lenguaje dictador benevolente . Para obtener una nueva función en C #, solo tiene que convencer a una persona: Anders Hejlsberg .
Java adopta un enfoque más conservador. Para obtener una nueva característica en Java, debe obtener el consenso de un consorcio de grandes proveedores como Oracle, IBM, HP, Fujitsu y Red Hat. Obviamente, ese proceso será más lento y presentará una barra más alta para las nuevas características del lenguaje.
La pregunta "¿por qué no se implementó la función x ..." siempre incluye implícitamente las palabras, "... si obviamente es una buena idea?" Como he demostrado adecuadamente aquí, la elección nunca es tan simple.
fuente