online - Pasando de C#a Java
java vs.net 2018 (10)
Aunque esto es al revés, el siguiente enlace me parece muy útil para comparar Java y C #.
He estado trabajando con C # y, más generalmente, con el marco .Net durante un par de años. A menudo escuché sobre la similitud entre C # y el lenguaje Java y me gustaría aprender más sobre el segundo.
- ¿Tienes algún consejo específico para aprender Java cuando vienes de C #?
- ¿Algún error común que haría un programador de C # al iniciar Java?
- ¿Alguna documentación que muestre los hábitos que puede conservar y los que debe cambiar (aún en una óptica C # a Java, por lo que es algo más específico que una comparación de C # vs Java)?
Bueno, mientras que C # y Java son superficialmente parecidos, hay una serie de pequeñas diferencias que podrían picarte. En general, creo que la dirección opuesta (ir de Java a C #) es menos problemática. Esto se debe principalmente a que C # es un lenguaje más complejo, por lo que puede encontrar muchas simplificaciones de los patrones comunes de Java, pero al revés puede ser un poco doloroso.
Cosas a tener en cuenta (lista parcial, que no se garantiza que sea exhaustiva):
Diferente ...
Convenciones de nombres. En Java solo los nombres de tipo comienzan con una letra mayúscula (es decir, PascalCase), todo lo demás usa camelCase. Aunque no es muy difícil de adherir.
También las interfaces generalmente no comienzan con
I
Por otro lado, debe implementarlos con una palabra clave diferente. Sin embargo, realmente no ayuda en la mitad del código.Biblioteca de clases :-)
Aunque es obvio, esto es lo que pasé más tiempo aprendiendo un idioma. Cuando se trata de un paradigma conocido, las diferencias de sintaxis se solucionan rápidamente, pero en algunos casos, conocer la biblioteca estándar / biblioteca de clases / framework requiere algo de tiempo :-)
- Patrones. Bueno, no del todo, sigue siendo lo mismo. Pero C # admite algunos patrones en el nivel de idioma, mientras que usted todavía tiene que implementarlos usted mismo en Java. No hay eventos, pero el patrón Observer (muy frecuente en Swing, siempre que vea a un Oyente, sabrá qué hacer :-))
Manejo de excepciones. Java tiene las llamadas excepciones comprobadas, lo que significa que una excepción debe ser detectada o declarada hacia arriba. Por lo general esto significa que tienes
catch (SomeException ex) { ex.printStackTrace(); }
Muy a menudo en su código 1 :-)
- Tipos. Si bien .NET tiene objetos y tipos de valor normales, ambos son objetos, métodos de soporte, propiedades, etc. Java tiene una dicotomía de tipos primitivos , como
int
,float
,char
, & c. y clases comoString
. No importa mucho desde que implementaron el boxeo automático, pero a veces todavía es molesto envolverint
enInteger
. - Polimorfismo: todos los métodos de Java son
virtual
por defecto, mientras que los métodos de c # no lo son.
- Diferencias sintácticas menores.
-
foreach (a in b)
→for (a : b)
- Diferentes palabras clave de acceso. No existen cosas como
internal
yprotected internal
. Pero los miembros no calificados son visibles para otras clases en el mismo paquete (tipo deinternal
, pero de nuevo no del todo). - La comparación de cadenas no se hace con
==
en Java. Tienes que usar.equals()
. Mientras que en C #==
en cadenas es la igualdad de valores, en Java==
es siempre la igualdad de referencia.
-
No ...
- Propiedades En Java, esto generalmente se hace con el
Foo getFoo()
/void setFoo(Foo foo)
que C # genera silenciosamente detrás de su espalda cuando usa propiedades, pero tiene que hacerlo explícitamente en Java. En general, para mantener el lenguaje en sí más simple, muchas cosas en Java son solo convenciones. Aún así, la mayoría de las veces es mejor que te adhieras a ellos :-) - Sobrecarga del operador. Consideró un peligro para los programadores justos que no fueron implementados por temor a abusos. De todos modos, no los necesito con demasiada frecuencia, ni siquiera en C #, pero a veces son agradables y luego te estás perdiendo algo.
- Los indexadores. Siempre debe acceder a los elementos de la lista a través de
myList.get(5)
lugar de la sintaxis de tipo arraymyList[5]
. Sin embargo, sólo un pequeño inconveniente. - LINQ (aunque existen implementaciones 2, pero no está tan bien integrada), o funciones lambda 3 (no hay delegados, pero sí clases anónimas), métodos de extensión o clases parciales (sí, eso es doloroso cuando se trata de Swing, a menos que usted lo haga. muy disciplinado), y algunas cosas más.
- Arreglos multidimensionales. Puede usar matrices dentadas (matrices de matrices), pero la verdadera multidimensionalidad no está ahí.
- Propiedades En Java, esto generalmente se hace con el
- Los genéricos son solo de compilación, en el tiempo de ejecución solo quedan los
Object
. ¿También los comodines en los genéricos pueden ser difíciles de resolver a veces cuando el compilador se queja de los cuatro?
En tus genéricos tenemos diferentes tipos. (Aunque para ser justos: ese fue un caso en el que habría necesitado información de tipo en el tiempo de ejecución de todos modos, así que volví aObject
).
Consejo general: Agarra a un amigo con experiencia en Java y déjalo que revise tu código. Si bien es probable que no pueda decirte todo lo que debes cuidar cuando le haces esa pregunta directamente, puede detectar cosas extrañas en el código y notificarte eso. Esto me ha ayudado mucho a aprender Java (aunque aprendí Java primero y luego C #, por lo que podría ser diferente).
1 Sí, sé que muchos bloques de captura se ven diferentes, pero aún así, este es probablemente el arquetípico y ni siquiera es raro .
2 Quaere , JaQue , JaQu , Querydsl
3 Hay lambdaj , sin embargo. Gracias por señalarlo, Esko .
El idioma principal está bien. Conocer las bibliotecas será una cosa que lleva tiempo. Si está haciendo aplicaciones web, hay mucho que aprender ... tecnologías equivalentes a WCF y ASP.net. No dices en qué tipo de área trabajas ... ¿escritorio, servidor o servidor web?
Hice una transición de Java a C # y de nuevo a Java. Creo que sintácticamente son muy similares y la mayoría de los problemas que tuve fue aprender las API de .NET y aprender a usarlas de manera efectiva. Muchas veces estaba usando ''azúcar sintáctica'', escribiendo mi código como si estuviera en Java y luego lo traduje a C #. Pasé mucho tiempo en el sitio web de Microsoft leyendo y aprendiendo sobre las API, lo cual fue de gran ayuda.
La mayor diferencia entre C # y Java: en Java, todos los métodos son virtual
. De ahí la razón por la que las herramientas como NUnit y otras provienen del mundo Java.
Lo más importante que debes aprender es cómo utilizar las características de estilo funcional de Greenspun C # en Java. Por ejemplo, puede esperar crear muchas interfaces con un solo método para evitar la falta de funciones lambda y delegados de Java.
Los lenguajes en sí son bastante similares, sin pocas palabras clave y Java sin algunas características a las que los programadores de C # se acostumbraron (propiedades, using
, genéricos reified (sin borrado de tipo)).
El principal problema aquí es el conocimiento de los marcos, de los cuales hay miles para Java.
Para ser honesto, si eres un programador de C # competente, no creo que haya mucho que necesites saber aparte del empaquetado y la implementación de aplicaciones.
Aquí hay un buen enlace http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp
Sinceramente, creo que el mayor obstáculo para muchos desarrolladores de C # que intentan aprender Java es aprender un nuevo IDE. Visual Studio es genial, y cuando codificas en C # durante un largo período de tiempo, te acostumbras. Cuando tienes que moverte a Eclipse o Netbeans, de repente te sientes perdido. ¿Cómo establezco un punto de interrupción? ¿Dónde está la ventana inmediata? ¿Cómo creo una aplicación de Windows? etc etc ... Sé que esto suena como una locura, pero te digo que la gente está muy apegada a sus IDE y tiene dificultades para acostumbrarse a las nuevas ...
Sinceramente, recomiendo Java en pocas palabras . La mayoría de los libros de introducción de Java / any_other_lang son para lectores novatos que explican el concepto de bucle para páginas y recursividad para un capítulo ... Puede comenzar a escribir programas Java en dos días con este libro. Por supuesto, le llevará mucho tiempo comprender lo que sucede debajo del capó y cómo utilizar todo el marco disponible. Pero una vez que se domina el idioma, es fácil llevarse bien incluso con los recursos de Google.