Ajoute le premier exercice


Le premier exercice de chaque parcours est un exercice « Hello, World! » très simple.

Cet exercice a pour but de vérifier rapidement que tout est correctement relié. Cela permet de confirmer que l'utilisateur a bien installé son environnement de programmation, qu'il sait exécuter les tests et qu'il est capable de les faire passer. Au-delà de ça, dans le cas du client en ligne de commande d'Exercism (la CLI), cela permet aussi de vérifier que la CLI est installée et configurée correctement, et que le site fournit les bons fichiers pour l'exercice sans transmettre d'artefacts inutiles. Enfin, cela garantit que l'utilisateur connaît le cycle : télécharger un exercice avec la CLI, résoudre un problème dans son environnement de développement local, puis soumettre sa solution au site.

Autrement dit, il ne s'agit pas encore vraiment d'apprendre quoi que ce soit sur le langage de programmation lui-même. On vise quelque chose de vraiment très simple.

C'est aussi probablement la partie la plus difficile quand il s'agit de bien configurer le dépôt du parcours, car implémenter un exercice fait intervenir beaucoup d'éléments.

Implémente l'exercice

L'exercice « Hello, World! » obéit à quelques règles particulières :

  • Il est toujours le premier exercice d'un parcours
  • Chaque parcours doit l'implémenter
  • Le fichier de tests ne contient qu'un seul test
  • Le fichier stub contient une implémentation presque fonctionnelle, mais au lieu de « Hello, World! », elle utilise « Goodbye, Mars! »
  • Il n'a pas de prerequisites
  • Il n'a pas de practices

Détermine les chemins des fichiers

L'exercice « Hello, World! » (et d'ailleurs tous les exercices sur Exercism) nécessite un ensemble précis de fichiers :

  • Documentation : explique à l'apprenant ce qu'il doit faire (peut être générée automatiquement).
  • Métadonnées : fournit à Exercism quelques métadonnées sur l'exercice (peuvent être en grande partie générées automatiquement).
  • Suite de tests : vérifie qu'une solution est correcte (spécifique au parcours).
  • Implémentation stub : fournit un point de départ aux apprenants (spécifique au parcours).
  • Implémentation d'exemple : fournit une implémentation d'exemple qui passe tous les tests (spécifique au parcours).
  • Fichiers supplémentaires : garantissent que les tests peuvent s'exécuter (spécifiques au parcours, facultatifs).

Avant de pouvoir créer l'exercice « Hello, World! », tu dois prendre quelques décisions concernant les noms et les chemins de fichiers propres au parcours (suite de tests, implémentation stub, implémentation d'exemple et éventuels fichiers supplémentaires).

En règle générale, utilise des noms qui sont idiomatiques pour le langage. Quand il n'y a pas de préférence forte, privilégie des arborescences de répertoires moins profondes. L'implémentation d'exemple doit pouvoir être identifiée par le script d'intégration continue, il est donc conseillé de choisir un nom de base générique que tous les exercices peuvent utiliser, par exemple example, sample ou reference-solution.

Configure les chemins des fichiers

Une fois les chemins de fichiers propres au parcours choisis, tu dois les configurer dans la clé files du fichier config.json à la racine. La clé files sert de modèle pour tous les exercices, ce qui permet à n'importe quel outillage (dont une partie sera utilisée dans un instant) de savoir où chercher les fichiers. Tu peux utiliser différents espaces réservés pour configurer facilement le slug de l'exercice (hello-world dans ce cas).

Exemple

Si ton parcours utilise PascalCase pour ses fichiers, la clé files pourrait ressembler à ceci :

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

Le ou les fichiers d'exemple doivent être stockés dans le répertoire .meta.

Pour plus d'informations, consulte la documentation sur la clé files.

Crée les fichiers

Une fois les modèles de chemins de fichiers définis, tu peux rapidement créer la structure des fichiers de l'exercice « Hello, World! » en exécutant les commandes suivantes depuis le répertoire racine du parcours :

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

Définis l'auteur

Pour que le site te liste comme auteur de l'exercice, suis ces étapes :

Dans le fichier .meta/config.json de l'exercice :

  • Ajoute ton nom d'utilisateur GitHub à la clé authors

Pour que cela fonctionne, tu dois lier ton compte Exercism à GitHub. Tu peux le faire sur le site, dans la section Intégrations de la page Paramètres.

Note

Les auteurs d'exercices reçoivent aussi de la réputation

Utilise le script

Les dépôts de parcours plus récents peuvent utiliser le script bin/add-practice-exercise (source) pour ajouter de nouveaux exercices :

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

Si tu travailles sur un dépôt de parcours qui ne contient pas ce fichier, n'hésite pas à le copier dans ton dépôt à partir du lien source ci-dessus.

Implémente l'exercice

Une fois les fichiers créés, tu devras ensuite :

  • Ajouter des tests au fichier de tests
  • Ajouter une implémentation d'exemple
  • Définir le contenu du fichier stub

Ajoute des tests

L'ajout de tests est un élément essentiel quand on ajoute un exercice. Grosso modo, il y a deux options pour implémenter l'un des exercices ci-dessus :

  1. Implémenter les tests à partir de zéro, en utilisant les cas de test du canonical-data.json de l'exercice
  2. Porter les tests depuis l'implémentation d'un autre parcours (astuce : va sur https://exercism.org/exercises/hello-world pour avoir un aperçu des parcours qui ont implémenté un exercice donné).

Pour l'exercice « Hello, World! », il n'y aura qu'un seul cas de test, donc les deux options devraient convenir.

Ajoute une implémentation d'exemple

Le fichier d'implémentation d'exemple doit contenir le code nécessaire pour passer les tests.

Définis le stub

Le fichier stub doit contenir une solution presque fonctionnelle qui passe les tests, mais dans laquelle le texte « Hello, World! » est remplacé par « Goodbye, Mars! ». Astuce : tu peux simplement copier-coller l'implémentation d'exemple, puis la modifier.

Mets à jour le ou les auteurs de l'exercice

Une fois l'exercice terminé, ajoute ton nom d'utilisateur GitHub au tableau "authors" dans le fichier .meta/config.json de l'exercice. Cela nous permettra de t'attribuer correctement la création de l'exercice.

Analyse statique

Pour vérifier que l'exercice est correctement configuré, tu peux utiliser la fonctionnalité d'analyse statique intégrée à l'outil configlet.

La première étape consiste à récupérer l'outil configlet, pour lequel nous avons créé deux scripts :

  • bin/fetch-configlet : à exécuter quand tu utilises *nix ou macOS
  • bin/fetch-configlet.ps1 : à exécuter quand tu utilises Windows

Exécuter l'un de ces scripts depuis le répertoire racine du dépôt du parcours télécharge le binaire bin/configlet ou bin/configlet.exe selon le cas.

Tu peux ensuite vérifier que l'exercice est correct en exécutant bin/configlet lint.

Note

Il est probable que configlet signale l'erreur suivante :

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

Cette erreur sera corrigée à l'étape Prépare le lancement, donc soit :

  • tu ignores l'erreur (pour l'instant), soit
  • tu corriges l'erreur en ajoutant des tags
Note

Le workflow configlet exécute automatiquement configlet lint à chaque fois que quelque chose est poussé sur main ou vers une pull request.