Agrega el primer ejercicio


El primer ejercicio de cada track es un ejercicio «Hello, World!» muy sencillo.

La idea de este ejercicio es comprobar rápidamente que todo esté conectado correctamente. Esto confirmará que el usuario tiene bien instalado el entorno de programación, que sabe cómo ejecutar las pruebas y que es capaz de hacer que pasen. Además, en el caso del cliente de línea de comandos (CLI) de Exercism, también garantiza que lo tenga instalado y configurado correctamente, y que el sitio entregue los archivos correctos del ejercicio sin enviar artefactos innecesarios. Por último, garantiza que el usuario esté familiarizado con el ciclo de descargar un ejercicio con la CLI, resolver un problema en su entorno de desarrollo local y enviar su solución de vuelta al sitio.

En otras palabras, esto todavía no se trata realmente de aprender nada sobre el lenguaje en sí. Buscamos algo sumamente sencillo.

También es probable que esta sea la parte más difícil de configurar correctamente el repositorio del track, porque hay muchas piezas en movimiento al implementar un ejercicio.

Implementación del ejercicio

El ejercicio «Hello, World!» tiene algunas reglas especiales:

  • Siempre es el primer ejercicio de un track
  • Cada track debe implementarlo
  • El archivo de pruebas tiene una sola prueba
  • El archivo stub contiene una implementación que casi funciona, pero en vez de «Hello, World!» usa «Goodbye, Mars!»
  • No tiene prerequisites
  • No tiene practices

Determina las rutas de archivos

El ejercicio «Hello, World!» (y, de hecho, todos los ejercicios de Exercism) requiere un conjunto específico de archivos:

  • Documentación: le explica al estudiante qué debe hacer (se puede generar automáticamente).
  • Metadatos: le proporciona a Exercism algunos metadatos sobre el ejercicio (se pueden generar casi por completo automáticamente).
  • Conjunto de pruebas: verifica que una solución sea correcta (específico del track).
  • Implementación stub: les da un punto de partida a los estudiantes (específica del track).
  • Implementación de ejemplo: proporciona una implementación de ejemplo que pasa todas las pruebas (específica del track).
  • Archivos adicionales: garantizan que las pruebas se puedan ejecutar (específicos del track, opcionales).

Antes de que podamos crear el ejercicio «Hello, World!», necesitas tomar algunas decisiones sobre los nombres y las rutas de los archivos específicos del track (el conjunto de pruebas, la implementación stub, la implementación de ejemplo y los archivos adicionales).

La regla general es usar nombres que sean idiomáticos para el lenguaje. Cuando no haya preferencias marcadas, prefiere estructuras de directorios menos profundas. La implementación de ejemplo tendrá que ser identificable por el script de CI, así que conviene elegir un nombre base genérico que puedan usar todos los ejercicios, por ejemplo example, sample o reference-solution.

Configura las rutas de archivos

Una vez que hayas elegido las rutas de archivos específicas del track, debes configurarlas en la clave files del archivo config.json de la raíz. La clave files servirá como plantilla para todos los ejercicios, lo que permite que cualquier herramienta (algunas de las cuales usaremos en un momento) sepa dónde buscar los archivos. Puedes usar varios marcadores de posición para configurar fácilmente el slug del ejercicio (hello-world en este caso).

Ejemplo

Si tu track usa PascalCase para sus archivos, la clave files podría verse así:

"files": {
  "solution": [
    "%{pascal_slug}.cs"
  ],
  "test": [
    "%{pascal_slug}Tests.cs"
  ],
  "example": [
    ".meta/Example.cs"
  ]
}
Note

Los archivos de ejemplo deben guardarse dentro del directorio .meta.

Para más información, consulta la documentación de la clave files.

Crea los archivos

Una vez especificadas las plantillas de rutas de archivos, puedes generar rápidamente los archivos del ejercicio «Hello, World!» ejecutando los siguientes comandos desde el directorio raíz del track:

bin/fetch-configlet
bin/configlet create --practice-exercise hello-world

Define el autor

Para que el sitio web te muestre como autor del ejercicio, sigue estos pasos:

Dentro del archivo .meta/config.json del ejercicio:

  • Agrega tu nombre de usuario de GitHub a la clave authors

Para que esto funcione, tendrás que vincular tu cuenta de Exercism con GitHub. Puedes hacerlo en el sitio web, en la sección Integraciones de la página de Configuración.

Note

Los autores de ejercicios también reciben reputación

Usa el script

Los repositorios de tracks más recientes pueden usar el script bin/add-practice-exercise (código fuente) para agregar nuevos ejercicios:

bin/add-exercise -a <github_username> two-fer
Note

Si estás trabajando en un repositorio de track que no tiene este archivo, puedes copiarlos en tu repositorio usando el enlace al código fuente de arriba.

Implementa el ejercicio

Una vez creados los archivos generados, tendrás que:

  • Agregar pruebas al archivo de pruebas
  • Agregar una implementación de ejemplo
  • Definir el contenido del archivo stub

Agrega las pruebas

Una parte clave de agregar un ejercicio es agregar pruebas. A grandes rasgos, hay dos opciones al implementar uno de los ejercicios anteriores:

  1. Implementar las pruebas desde cero, usando los casos de prueba del canonical-data.json del ejercicio
  2. Portar las pruebas desde la implementación de otro track (consejo: entra a https://exercism.org/exercises/hello-world para ver un panorama de qué tracks han implementado un ejercicio en particular).

Para el ejercicio «Hello, World!» habrá un solo caso de prueba, así que cualquiera de las dos opciones debería servir.

Agrega la implementación de ejemplo

El archivo de la implementación de ejemplo debe contener el código necesario para resolver las pruebas.

Define el stub

El archivo stub debe tener una solución que casi funciona para las pruebas, pero con el texto «Hello, World!» reemplazado por «Goodbye, Mars!». Consejo: puedes simplemente copiar, pegar y modificar la solución de ejemplo.

Actualiza los autores del ejercicio

Cuando termines con el ejercicio, agrega tu nombre de usuario de GitHub al array "authors" del archivo .meta/config.json del ejercicio. Así nos aseguraremos de acreditarte correctamente como autor del ejercicio.

Linting

Para verificar que el ejercicio esté configurado correctamente, puedes usar la funcionalidad de linting integrada de la herramienta configlet.

El primer paso es descargar la herramienta configlet, para lo cual creamos dos scripts:

  • bin/fetch-configlet: ejecútalo si usas *nix o macOS
  • bin/fetch-configlet.ps1: ejecútalo si usas Windows

Ejecutar uno de estos scripts desde el directorio raíz del repositorio del track descargará el binario bin/configlet o bin/configlet.exe, respectivamente.

Luego puedes verificar que el ejercicio sea correcto ejecutando bin/configlet lint.

Note

Es probable que configlet reporte el siguiente error:

The `tags` array is empty:
/path/to/track/config.json

Este error se corregirá en el paso Preparación para el lanzamiento, así que puedes:

  • ignorar el error (por ahora), o
  • corregir el error agregando etiquetas
Note

El workflow de configlet ejecutará configlet lint automáticamente cada vez que se suba algo a main o a un pull request.