V para desarrolladores C#/Java — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué aprendo esto
Sección titulada «Por qué aprendo esto»V promete un lenguaje pequeño, cercano a Go, que compila a C en alrededor de un segundo, con variables inmutables por defecto, sin null, sin excepciones y con un recolector de basura (GC) que se puede desactivar.
Escribo C# y leo bastante Java. Quiero saber cuáles de esas promesas se cumplen en la versión 0.5.2, qué cuesta V a cambio, y dónde su documentación y su compilador no están de acuerdo.
Para quién es este curso
Sección titulada «Para quién es este curso»Te manejas bien con C# o Java: clases, interfaces, genéricos, excepciones, colecciones, LINQ o streams. Nunca has escrito V, y no necesitas saber C. Cada lección parte del concepto que ya conoces y muestra dónde V coincide, dónde difiere, y qué dice el compilador cuando te equivocas.
V en una tabla
Sección titulada «V en una tabla»| C# | Java | V | |
|---|---|---|---|
| Compila a | IL, ejecutado por el CLR | bytecode, ejecutado por la JVM | C, compilado a un ejecutable nativo |
| Herramienta de compilación | dotnet |
Maven, Gradle | el propio v |
| Archivo de proyecto | .csproj |
pom.xml, build.gradle |
v.mod (opcional) |
| Variable local | var x = 1; (mutable) |
var x = 1; (mutable) |
x := 1 (inmutable), mut x := 1 |
| Clase | class, record, struct |
class, record |
struct con métodos, sin herencia |
| Valor ausente | null, int? |
null, Optional<T> |
?T y none |
| Fallo | excepciones | excepciones comprobadas y no comprobadas | !T, error() y or { } |
| Memoria | GC generacional | GC (G1 por defecto) | GC de Boehm por defecto, -autofree, -gc none |
| Espacios de nombres | namespace |
package |
un módulo por carpeta |
| Visibilidad | public, internal, private |
public, privado de paquete, private |
pub o privado del módulo |
Fuentes: recolección de basura de .NET, recolector de basura G1, documentación de V.
La documentación y la versión
Sección titulada «La documentación y la versión»docs.vlang.io se genera a partir de doc/docs.md en la rama master de V, que ha avanzado desde la 0.5.2: su página The default compiler, por ejemplo, no está en la documentación de la 0.5.2. Este curso enlaza a docs.vlang.io para los conceptos y comprueba cada comportamiento con la propia 0.5.2; la documentación de la versión estudiada es doc/docs.md en la etiqueta 0.5.2, y la biblioteca estándar se describe en modules.vlang.io.
Los datos
Sección titulada «Los datos»Las lecciones 3 y 4 leen code/v-for-csharp-java/data/pages.csv: las 319 páginas de este sitio en el commit cbcbb42, con su idioma (locale), curso, título y número de líneas. Es una copia del archivo que el curso de LadybugDB extrae de este repositorio.
Las lecciones 5 a 8 leen code/v-for-csharp-java/data/ga: los 111 proyectos .NET de GuitarAlchemist/ga en el commit a26a7893, sus 266 referencias de proyecto y 478 referencias de paquete, copiados también del curso de LadybugDB. La lección 7 recorre sus referencias en paralelo, la lección 8 prueba un módulo que las analiza.
Al final de este curso, sabré
Sección titulada «Al final de este curso, sabré»- instalar V en Windows, Linux y macOS, y organizar un programa en módulos;
- modelar datos con structs, métodos, interfaces y tipos suma en lugar de clases;
- gestionar la ausencia y el fallo con
?,!yor { }en lugar denully excepciones; - decir dónde se copia, se comparte o se libera un array, un map o un struct;
- escribir código concurrente con
spawny canales (channels); - probar, formatear y documentar un módulo, y llamar a una biblioteca C.
| # | Lección | Ya conoces |
|---|---|---|
| 1 | Instalación, v run, módulos y proyectos |
dotnet new, dotnet run, javac, java |
| 2 | Tipos, variables inmutables, structs y métodos | var, readonly/final, clases, records |
| 3 | Errores: ?, ! y or { } |
null, Optional, excepciones |
| 4 | Arrays, maps, slices y memoria | List<T>, Dictionary, ArrayList, HashMap, el GC |
| 5 | Interfaces y genéricos | interfaces, genéricos, restricciones |
| 6 | Enums, tipos suma y match |
enums, jerarquías selladas, expresiones switch |
| 7 | Concurrencia: spawn, canales y shared |
Task, CompletableFuture, hilos virtuales, lock/synchronized |
| 8 | Pruebas, v fmt, v vet y v doc |
xUnit/JUnit, dotnet format, analizadores, comentarios de documentación XML |
| 9 | Llamar a C (próximamente) | P/Invoke, JNI, la API FFM |
| 10 | JSON y un servidor web con veb |
System.Text.Json, ASP.NET Core, Jackson, Spring |
| 11 | El ORM y SQLite | Entity Framework, JPA |
| 12 | Paquetes, compilación cruzada y despliegue | NuGet/Maven Central, dotnet publish, jlink |
| — | Diario |
Recursos
Sección titulada «Recursos»- Documentación de V, y
doc/docs.mden la etiqueta 0.5.2 - Biblioteca estándar de V
- Código fuente de V, y la versión 0.5.2 que usa este curso
- Las pruebas del lenguaje de V: la documentación dice que el compilador y sus pruebas son la referencia cuando no coinciden con ella