Ir al contenido

Java para desarrolladores C# — Misión

Pienso en C#. Pero buena parte del código que leo cada día es Java: servicios Spring, plugins de build, bibliotecas cuyo port a C# va con retraso. Los dos lenguajes se parecen tanto que es fácil escribir Java como si fuera C#, y llevarse sorpresas en tiempo de ejecución: == entre dos Integer, un tipo genérico que ha desaparecido, una excepción comprobada (checked) que no compila.

Este curso es el mapa que me hubiera gustado tener: para cada tema, lo que se traslada desde C#, lo que solo lo parece y lo que no tiene equivalente.

Escribes C# con soltura: clases, interfaces, genéricos, LINQ, async/await, NuGet y la CLI dotnet. Has leído algo de Java pero nunca lo has llevado a producción. Un curso de continuación, Spring Boot, Spring Cloud y Reactor para desarrolladores C#, se apoya en este.

  • instalar un JDK, ejecutar código Java y compilar un proyecto con Maven o Gradle;
  • predecir en qué se diferencian de C# la semántica de valor, la igualdad y los números de Java;
  • modelar datos con clases, records, enums e interfaces selladas;
  • usar genéricos sabiendo lo que quita el borrado de tipos (type erasure);
  • manejar las excepciones comprobadas, null y Optional;
  • traducir LINQ y los delegados a Streams e interfaces funcionales;
  • escribir código concurrente con hilos virtuales en lugar de async/await;
  • probar, empaquetar y ejecutar una aplicación Java sobre la JVM.
# Lección Ya conoces
1 El JDK y las herramientas de build el SDK de .NET, dotnet run, NuGet, .csproj
2 Tipos, igualdad y operadores tipos de valor, checked, ==, interpolación de cadenas
3 Clases, records y enums propiedades, virtual/override, record, enum
4 Genéricos y borrado de tipos genéricos reificados, where T : new(), varianza in/out
5 Excepciones, null y Optional excepciones, using, tipos de referencia anulables
6 Lambdas e interfaces funcionales delegados, Func/Action, eventos
7 Colecciones y Streams List<T>, Dictionary, LINQ
8 Pattern matching expresiones switch, patrones is, records
9 Concurrencia e hilos virtuales Task, async/await, lock, Parallel
10 Maven y Gradle a fondo NuGet, Central Package Management, soluciones
11 Pruebas xUnit, Moq, FluentAssertions
12 La biblioteca estándar del día a día DateTime, decimal, HttpClient, System.IO
13 La JVM en tiempo de ejecución (próximamente) el CLR, ajustes del GC, dotnet-counters, Native AOT
14 Anotaciones, reflexión y módulos atributos, generadores de código fuente, ensamblados

Diario — lo que probé, lo que me sorprendió, lo que aún me queda por verificar.