¿Por qué C # tiene muchas más funciones que Java? [cerrado]

13

Tenga en cuenta que esto no pretende ser un argumento de Java vs. C #. Soy un programador de Java sin experiencia en C #, solo por curiosidad.

He leído un poco en C #, y parece que tiene muchas más funciones que Java. Una serie de ejemplos:

  • Inferencia de tipos.
  • dynamic palabra clave.
  • Delegados.
  • Parámetros opcionales.
  • Lambda y LINQ (en realidad no tengo idea de lo que son).
  • Propiedades.

Sin embargo, Java no presenta realmente nada que C # no tenga.

Mi pregunta es: ¿por qué C # tiene muchas más características nativas que Java? ¿Y por qué Java no agregó algunos de estos a lo largo de los años, por ejemplo, Propiedades o inferencia de tipos? ¿Los diseñadores del lenguaje Java toman un enfoque más simplista? ¿Cuál es la razón de esto?

    
pregunta Aviv Cohn 03.07.2014 - 11:52

2 respuestas

21

Varios motivos:

  1. C # llegó más tarde que Java; La versión 1 fue un robo flagrante de Java 1.4, por lo que prácticamente tenía todo lo que Java tenía en ese momento.
  2. Pero luego C # se desarrolló mucho más rápido que Java, porque era una plataforma nueva y emocionante (y tenía un controlador absolutamente brillante en Anders Hejlsberg, el padre de Turbo Pascal). Eso les permitió evitar todos los errores en Java que se habían vuelto obvios, al tiempo que añadía todo lo que los practicantes de Java deseaban tener.
  3. Mientras tanto, Java se vio obstaculizada por objetivos de compatibilidad regresivos muy estrictos y por un ritmo de desarrollo algo más lento, en parte porque trató desesperadamente de ganarse la reputación de ser la solución estándar, empresarial, confiable y no sorprendente para el 95% de programadores no genios. En esto tuvieron éxito, quizás demasiado bien.

El resultado es que Java ahora tiene una pequeña brecha de características. Tiene grandes planes para el futuro, pero como es habitual en este tipo de cosas, todo lleva un poco más de lo planeado.

    
respondido por el Kilian Foth 03.07.2014 - 12:42
4

Agregaría a la respuesta de Kilian que una gran diferencia entre Java y C # es que los diseñadores de C # controlan no solo el lenguaje, sino también el IDE estándar.

Agregar algo como métodos de extensión y clases parciales podría ser una pesadilla en las versiones de desarrollo / control si los IDE no lo soportaran adecuadamente.

Ya que se espera que pueda compilar Java con la plataforma que elija (Eclipse, Netbeans, vi + Ant), agregar funciones que rompen el código (y usarlas para desarrollar extensiones adicionales como LINQ) es mucho más complicado que simplemente diciendo "ya que IntelliSense se ocupará de estos casos, no debemos preocuparnos".

Además, a veces vale la pena anotar el valor de las funciones en lugar de su número. Por ejemplo, las propiedades automáticas son agradables y ciertamente deseo que Java sea compatible con esto, pero al final solo significa que tienes que escribir algunas líneas más de código en Java. De manera similar, me parece que llamar a "Eventos" una característica es un nombre poco apropiado, ya que son poco más que delegados especialmente etiquetados, y solo una copia refinada del patrón Observer que ya utiliza Java (de nuevo, en Java es más explícito) codificación)

No me malinterpretes, creo que C # ha introducido varias innovaciones notables, y deseo que algún día los grandes jefes de Oracle se activen y lancen un verdadero "Java 2" para incluir algunas de estas, pero la brecha no es tan obvio como su pregunta apunta.

    
respondido por el SJuan76 03.07.2014 - 17:39

Lea otras preguntas en las etiquetas