TP - Les enregistrements et les modules

L’objectif de ce TP est de modéliser puis de coder un petit projet créant et manipulant un tableau périodiques des éléments.

Nous allons organiser notre projet en le découpant en plusieurs fichiers (Modules) :

  • Un fichier ChemicalElement.ts qui définit un élément chimique.

  • Un fichier PeriodicTable.ts qui manipule un tableau périodique.

  • Le fichier main.ts (à compléter) qui sert à tester le bon fonctionnement de l’application.

    Listing 1. Le fichier main.ts
    import {createPeriodicTable,printTable} from "./PeriodicTable";
    import {ChemicalElement}  from "./ChemicalElement";
    import {rawPeriodicElements} from "./RawData";
    
    let periodicTable : ChemicalElement[];
    periodicTable = createPeriodicTable(rawPeriodicElements);
    printTable(periodicTable);
  • Le fichier RawData.ts, qui contient les informations brutes (non traitées) sur les éléments chimiques.

    Listing 2. Le fichier RawData.ts
    export let rawPeriodicElements : Array<string> = [
        "Hydrogene H 1 1",
        "Helium He 4 2",
        "Carbone C 12 6",
        "Oxygene O 16 8",
        "Azote N 14 7",
        "Argon Ar 40 18"];

D’abord, commencez par créer (ou copier) les 4 fichiers dans un nouveau dossier. Pour que la compilation automatique puisse se faire, ne pas oublier de copier également le fichier tsconfig.json dans ce dossier.

Listing 3. Le fichier tsconfig.json
{
    "compilerOptions": {
        "target": "es2015",
        "module": "commonjs",
        "sourceMap": true,
        "outDir": "build",
        "experimentalDecorators": true,
    },
    "exclude": [
        "node_modules"
    ]
}

1. Éléments chimiques

1.1. Enregistrement ChemicalElement et définition de la fonction toString

  • Dans le fichier ChemicalElement.ts, créez l’enregistrement ChemicalElement qui définit un élément chimique: symbole chimique, nom, numéro atomique (Z) et numéro de masse (A). Utilisez pour cela le mot-clé type.

  • Dans ce même fichier, créez une fonction qui permet de traduire un élément chimique en chaîne de caractères. Cette fonction doit avoir la signature suivante:

    export function toString(elm: ChemicalElement): string

    Lorsque cette fonction est appelée pour un élément donné, elle doit renvoyer une chaîne de caractères contenant l’abréviation de l’élément, son nom, son numéro atomique et sa masse. Par exemple, si elle est appelée pour l’élément carbone, elle doit renvoyer la chaîne de caractères suivante:

    C(Carbone, Z=6, A=12)

1.2. Parenthèse : présentation des fonctions split et parseInt

Avant d’aller plus loin, vous devez comprendre comment utiliser deux fonctions fournies par TypeScript : split et parseInt.

La fonction split est une fonction pour le type string qui permet de découper une chaîne de caractères en plusieurs morceaux, en choisissant à quels endroits doit s’effectuer la découpe. Elle produit en sortie un tableau de chaînes de caractères (string[]), où chaque case contient un morceau de la chaîne de départ. Attention, cette fonction s’utilise en mettant un point (.) à la suite de la chaîne de caractères à découper, puis en renant en paramètre le point de découper. Exemple :

// Supposons que l'on ait une chaine avec une liste séparée par des virgules
let maChaine : string = "rouge,jaune,vert,bleu"

// On appelle split en indiquant que l'on veut découper sur les virgules
let decoupage : string[] = maChaine.split(",")

// On affiche le résultat, à savoir : [ 'rouge', 'jaune', 'vert', 'bleu' ]
console.log(decoupage)

La fonction parseInt est une fonction pour transformer une chaîne de caractères en un nombre, quand cela est possible. Par exemple, cela permet de transfomer "1" (qui est un string) en 1 (qui est un number). Exemple :

// Supposons que l'on ait une chaine contenant juste un nombre
let monAutreChaine : string = "12"

// On appelle parseInt
let valeur : number = parseInt(monAutreChaine)

// On affiche le résultat, à savoir : 12
console.log(valeur)

Maintenant que vous avez compris, passez à la suite 🙂.

1.3. Définition de la fonction fromRawString

Toujours dans le fichier ChemicalElement.ts, créez une seconde fonction qui permet de traduire en un élément chimique une chaîne de caractères ayant comme forme :

"nomElement symbole numeroAtomique numeroMasse"

Cette fonction doit avoir la signature suivante:

export function fromRawString(elmDescription : string): ChemicalElement

Par exemple, si elle est appelée sur la chaîne "Hydrogene H 1 1", elle doit renvoyer un enregistrement de type ChemicalElement contenant comme symbole "H", comme nom "Hydrogene", comme numéro atomique 1 et comme numéro de masse 1.

2. Tableau Périodique

  • Ensuite, dans le fichier PeriodicTable.ts, écrivez une fonction permettant de créer un tableau périodique à partir d’un tableau brut de chaînes de caractères, par exemple comme le tableau brut déjà fourni en exemple dans le fichier RawData.ts. Cette fonction doit faire appel à la fonction fromRawString définie précédemment dans le module ChemicalElement, et doit avoir la signature suivante:

    export function createPeriodicTable(rawData: Array<string>) : Array<ChemicalElement>
    Il faut mettre le mot-clé export devant toute fonction ou enregistrements qui sera utilisée (importée) dans un autre module (fichier), et il faut utiliser le mot-clé import au début d’un module pour utiliser quelque chose qui a été exporté dans un autre module. Se référer au cours pour des exemples.
  • Dans ce même fichier, écrivez une fonction qui permet d’afficher convenablement un tableau périodique. Elle doit faire appel à la fonction toString() du fichier ChemicalElement.ts

    export function printTable(elements : Array<ChemicalElement>)

3. Exécution

  • Complétez le fichier main.ts pour exécuter le code écrit précédemment.

4. (Optionnel) Autres fonctions

  • Écrire une fonction capable de retrouver un élément chimique à partir son symbole chimique (abréviation).

  • Écrire une fonction capable de retrouver un élément chimique à partir de son nom.

  • Écrire une fonction capable de retrouver un élément chimique à partir de son numéro atomique.

  • Écrire une fonction capable de retrouver un élément chimique à partir de sa masse.