/* Page prose (es) */
"VersionBModern" = "# Versión B (moderna): `async`/`await` + `async let`\n\nLa misma tarea. Cada obtención es ahora una **función asíncrona** que o bien devuelve un valor o bien hace `throw`. Iniciamos ambas con **`async let`** para que se ejecuten concurrentemente, hacemos `await` a las dos juntas, combinamos, y dejamos que `@MainActor` nos ponga en el hilo principal, sin salto manual.";
"VersionBModern-2" = "**Míralo en acción:** salida idéntica:\n\n* callout(Salida):\n`Fetching menu and stock...`  \n`Sellable today: [\"Latte\", \"Espresso\"]`\n\nY el tiempo también es idéntico (ambas siguen ejecutándose en paralelo, ~0.6 s en total). La página de Playground sigue ejecutándose mientras la `Task` se completa.\n\n* callout(Pruébalo): Sube el sleep de `fetchMenu` a `.milliseconds(1200)`: el tiempo total sigue al de la obtención *más lenta*, no a la suma de ambas. ¿Qué línea sigue imprimiéndose primero?\n\nAhora mira lo que desapareció:\n\n* **Sin variables mutables compartidas.** `menu` y `stock` son solo valores.\n* **Sin `enter`/`leave`.** `async let` inicia cada hija; `try await (menu, stock)` es la unión. No hay contador que equilibrar.\n* **Un solo camino de error.** Que `fetchMenu` o `fetchStock` lance aterriza en el único `catch`. No desenvolviste dos opcionales, y no llamaste a `.get()`.\n* **Sin salto manual al hilo principal.** El `@MainActor` en la función *es* la garantía. La combinación y el `print` se ejecutan en el main actor porque la función está aislada en él. Olvidar volver al principal ya no es posible.\n\nLa lógica, el `filter`, es ahora la línea más prominente de la función, porque todo lo que la rodeaba se apartó del camino.\n\n---\n\n## Siente la diferencia\n\n* **Estado mutable compartido.** Clásico: dos variables `Result?`. Moderno: ninguna.\n* **\"Esperar a ambas.\"** Clásico: `DispatchGroup` con `enter`/`leave`. Moderno: `async let` con `await`.\n* **Manejo de errores.** Clásico: desenvolver opcionales, luego `try`/`catch`. Moderno: un solo `try`/`catch`.\n* **Entrega en el hilo principal.** Clásico: recordar `notify(queue: .main)`. Moderno: `@MainActor`, automático.\n* **Líneas que no son la tarea en sí.** Clásico: muchas. Moderno: pocas.\n* **El compilador atrapa un salto al principal olvidado.** Clásico: no. Moderno: sí.\n\nEl mismo comportamiento, el mismo paralelismo, la misma salida, pero la B dice lo que *significa* y deja que el compilador imponga las partes que antes tenías que llevar en la cabeza. Ese es todo el argumento a favor del modelo moderno en un solo ejemplo.\n\n[Anterior](@previous)  |  página 4 de 8  |  [Siguiente: Clásico y moderno en la práctica](@next)";
