From 0ff94b6d0ddc89aadc4b5521179eb9119e77d381 Mon Sep 17 00:00:00 2001 From: GauthierWebDev Date: Tue, 13 May 2025 19:09:23 +0200 Subject: [PATCH] feat(docs): add types of data documentation --- app/libs/navigation.ts | 1 + app/pages/docs/javascript/+Page.mdx | 3 +- app/pages/docs/javascript/types/+Page.mdx | 205 ++++++++++++++++++++++ app/pages/docs/javascript/types/tabs.tsx | 92 ++++++++++ app/vite.config.ts | 1 + 5 files changed, 301 insertions(+), 1 deletion(-) create mode 100644 app/pages/docs/javascript/types/+Page.mdx create mode 100644 app/pages/docs/javascript/types/tabs.tsx diff --git a/app/libs/navigation.ts b/app/libs/navigation.ts index 671fae1..063804a 100644 --- a/app/libs/navigation.ts +++ b/app/libs/navigation.ts @@ -122,6 +122,7 @@ export const navigation: NavigationSection[] = [ { title: "Introduction", href: "/docs/javascript" }, { title: "Syntaxe", href: "/docs/javascript/syntaxe" }, { title: "Instructions", href: "/docs/javascript/instructions" }, + { title: "Types de données", href: "/docs/javascript/types" }, ], }, { diff --git a/app/pages/docs/javascript/+Page.mdx b/app/pages/docs/javascript/+Page.mdx index 1672159..3067a70 100644 --- a/app/pages/docs/javascript/+Page.mdx +++ b/app/pages/docs/javascript/+Page.mdx @@ -62,10 +62,11 @@ Comme dit précédemment, cette série d'articles va se concentrer sur l'environ On va donc aborder les sujets suivants : - La syntaxe de base de JavaScript +- Les instructions - Les types de données +- Les fonctions et la portée - La compréhension et manipulation du DOM - Les événements -- Les fonctions et la portée - Le principe d'asynchrone Chaque article de cette série sera conçu pour être facilement compréhensible, avec des exemples pratiques et une explication des concepts. \ No newline at end of file diff --git a/app/pages/docs/javascript/types/+Page.mdx b/app/pages/docs/javascript/types/+Page.mdx new file mode 100644 index 0000000..34bf1dd --- /dev/null +++ b/app/pages/docs/javascript/types/+Page.mdx @@ -0,0 +1,205 @@ +--- +title: Les types de données de JavaScript +description: Découvrons ensemble les types de données de JavaScript +tags: [] +--- + +import Callout from "@/components/Callout"; +import tabs from "./tabs"; + +Revenons un peu en arrière et parlons des types de données en JavaScript. + +On a déjà eu l'occasion de tester très rapidement un petit algorithme, mais on n'a pas parlé des types de données ! + +## Qu'est-ce qu'un type de données ? + +Un type de données est une classification qui définit le type de valeur qu'une variable peut contenir. + +Dans notre code précédent, nous avions utilisé : + +- `const nom = prompt("Entrez votre nom :");` pour demander le nom de l'utilisateur. +- `const age = prompt("Entrez votre âge :");` pour demander l'âge de l'utilisateur. + +Pour les variables `nom` et `age`, on a utilisé la fonction `prompt()` qui renvoie une chaîne de caractères. +On a donc deux variables de type `string` _(chaîne de caractères)_ ! + +## Les types de données en JavaScript + +JavaScript prend en charge plusieurs types de données, notamment : + +- **String** : Représente une chaîne de caractères. +- **Number** : Représente un nombre _(entier ou décimal)_. +- **Boolean** : Représente une valeur booléenne _(vrai ou faux)_. +- **Object** : Représente un objet, qui est une collection de paires clé-valeur. +- **Array** : Représente un tableau, qui est une collection ordonnée de valeurs. +- **Null** : Représente une valeur nulle ou absente. +- **Undefined** : Représente une variable qui n'a pas été initialisée. + +On parle ici de **types primitifs** et de **types complexes**. + +- Les types primitifs sont les types de données de base, comme `string`, `number`, `boolean`, `null` et `undefined`. +- Les types complexes sont des types de données plus avancés, comme `object` et `array`. + + + En gros, les types de données sont importants car ils nous permettent de savoir quel type de valeur on manipule dans notre code. + + Ça nous aide à éviter les erreurs et à écrire du code plus propre et plus lisible. + + +Avant de passer à des exemples plus concrets, voyons un peu chaque type de données en détail. + +### String + +Une chaîne de caractères _(alpha-numérique)_ est une séquence de caractères entourée de **guillemets** _("contenu")_, d'**apostrophes** _('contenu')_, ou de **backticks** _(\`contenu\`)_. + +### Number + +Un nombre peut être un entier ou un nombre à virgule flottante _(décimal)_. +Il n'y a pas de distinction entre les deux en JavaScript, tout est considéré comme un nombre. + +### Boolean + +Un booléen est une valeur qui peut être soit `true` _(vrai)_ soit `false` _(faux)_. +Il est souvent utilisé pour représenter des conditions ou des états. + +### Null + +Le type `null` représente une valeur nulle ou absente. +Il est souvent utilisé pour indiquer qu'une variable n'a pas de valeur ou qu'elle a été explicitement définie comme nulle. + +### Undefined + +Le type `undefined` représente une variable qui n'a pas été initialisée. +Il est souvent utilisé pour indiquer qu'une variable n'a pas encore de valeur ou qu'elle n'a pas été définie. + +Il est important de noter que `undefined` est différent de `null`. +`undefined` signifie qu'une variable n'a pas été initialisée, tandis que `null` signifie qu'une variable a été explicitement définie comme nulle. + +### Object + +Un objet est une collection de paires clé-valeur. +Il est souvent utilisé pour représenter des entités complexes avec plusieurs propriétés. + +Pour les personnes qui viennent de PHP, on peut dire que c'est un peu comme un tableau associatif. +Un objet est défini entre accolades `{}` et chaque paire clé-valeur est séparée par une virgule. + +Par exemple : + + + +### Array + +Un tableau est une collection ordonnée de valeurs. +Il est souvent utilisé pour représenter des listes ou des ensembles de données. + +Un tableau est défini entre crochets `[]` et chaque valeur est séparée par une virgule. +Son fonctionnement est identique à celui d'un tableau en PHP. + +Par exemple : + + + +### Autres types + +Il existe d'autres types de données en JavaScript, comme `symbol` et `bigint`, mais ils sont moins couramment utilisés. + +Le type `symbol` est utilisé pour créer des identifiants uniques et immuables, tandis que le type `bigint` est utilisé pour représenter des entiers de grande taille. + +## Pourquoi se casser la tête avec les types de données ? + +C'est effectivement une très bonne question, surtout quand on se dit que JavaScript est un langage à typage faible. + +Mais ce n'est pas parce qu'il est à typage faible qu'il ne faut pas se soucier des types de données ! + +Par exemple... D'après toi, que va afficher le code suivant ? + + + +Si tu as répondu `15`, laisse-moi te dire que ce n'est pas la bonne réponse ! +En fait, le code va afficher `510`. + +Maintenant, deuxième question : +Est-ce que la variable `estVrai` vaut `true` ou `false` ? + + + +Et là, tu as répondu `false` ? Raté ! +La variable `estVrai` vaut `true`. + +Mais alors, pourquoi ça ne fonctionne pas comme on l'attend ? + +### La coercition de type + +Dans le premier exemple, on a additionné une chaîne de caractères et un nombre. +Plus précisément, on a additionné le nombre `5` et la chaîne de caractères `"10"`. + +Dans le cas d'une addition avec une chaîne de caractères, JavaScript va convertir le nombre en chaîne de caractères et faire une **concaténation** au lieu d'une addition. +C'est ce qu'on appelle la **coercition de type**. + +Mais alors, pourquoi `5 == "5"` vaut `true` et pas `false` ? + +La raison derrière ce résultat "étrange" est identique à celle de l'addition. +Le nombre `5` est converti en chaîne de caractères `"5"` et la comparaison est effectuée entre deux chaînes de caractères. + +### La comparaison stricte + +Maintenant, si on veut éviter ce genre de problème, on peut utiliser la comparaison stricte `===` au lieu de la comparaison faible `==`. +La comparaison stricte compare à la fois la valeur et le type de données. + +Si on utilise la comparaison stricte, le code va afficher `false` pour la variable `estVrai`. + + + - Utilise `==` pour comparer des valeurs sans tenir compte du type de données. + - Utilise `===` pour comparer des valeurs en tenant compte du type de données. + - Utilise `!=` pour comparer des valeurs sans tenir compte du type de données. + - Utilise `!==` pour comparer des valeurs en tenant compte du type de données. + + +### La conversion de type + +La comparaison stricte est une excellente pratique pour éviter les erreurs de type, mais il est parfois nécessaire de convertir explicitement un type de données en un autre. + +JavaScript propose plusieurs méthodes pour effectuer cette conversion : + +- `String()` : Convertit une valeur en chaîne de caractères. +- `Number()` : Convertit une valeur en nombre. +- `Boolean()` : Convertit une valeur en booléen. +- `parseInt()` : Convertit une chaîne de caractères en entier. +- `parseFloat()` : Convertit une chaîne de caractères en nombre à virgule flottante. + + + J'ai déjà eu l'occasion de voir des développeurs préfixer le symbole `+` devant une variable ou l'appel d'une fonction pour convertir en nombre. + + Par exemple : `const age = +prompt("Entrez votre âge :");` + + Bien que ça fonctionne, c'est une pratique à éviter car elle peut prêter à confusion. + Il est préférable d'utiliser une méthode explicite, lisible et compréhensible par tous. + + Par exemple : `const age = Number(prompt("Entrez votre âge :"));` + On encore : `const age = parseInt(prompt("Entrez votre âge :"), 10);` + + C'est plus long, mais c'est beaucoup plus clair et compréhensible ! + + +### Le cas de TypeScript + +Puisqu'on parle de JavaScript et de typage, faisons une petite parenthèse sur **TypeScript** ! +On ne va pas chercher à expliquer ce qu'est TypeScript ici, ce sera pour une autre suite d'articles. + +Mais pour faire simple, TypeScript est une version de JavaScript qui ajoute un système de typage. +Il permet de définir explicitement le type de chaque variable, ce qui aide à éviter les erreurs de type et à rendre le code plus lisible. + +Par exemple, voici comment on pourrait déclarer une variable de type `string` en TypeScript : + + + +Il est impossible de faire la même chose avec JavaScript, c'est strictement réservé à TypeScript ! + +## Conclusion + +Voilà, on a fait le tour des types de données en JavaScript ! +On a vu les types primitifs et complexes, ainsi que la coercition de type et la conversion de type. + +C'est un énorme point qu'on vient d'aborder, c'est normal de ne pas tout comprendre du premier coup. + +Avec du temps et de la pratique, tu vas finir par maîtriser tout ça comme un pro ! 💪 \ No newline at end of file diff --git a/app/pages/docs/javascript/types/tabs.tsx b/app/pages/docs/javascript/types/tabs.tsx new file mode 100644 index 0000000..617d83a --- /dev/null +++ b/app/pages/docs/javascript/types/tabs.tsx @@ -0,0 +1,92 @@ +import { Snippet } from "@/components/Snippet"; + +const jsObjectExampleSnippets = [ + { + name: "Exemple d'objet JavaScript", + codeLanguage: "js", + code: `const personne = { + nom: "John", + age: 30, +}; + +console.log(personne.nom); // Affiche "John" +console.log(personne.age); // Affiche 30`, + }, + { + name: "Exemple de tableau associatif PHP", + codeLanguage: "php", + code: `$personne = [ + "nom" => "John", + "age" => 30, +]; + +echo $personne["nom"]; // Affiche "John" +echo $personne["age"]; // Affiche 30`, + }, +]; + +const jsArrayExampleSnippets = [ + { + name: "Exemple de tableau JavaScript", + codeLanguage: "js", + code: `const fruits = ["pomme", "banane", "orange"]; + +console.log(fruits[0]); // Affiche "pomme" +console.log(fruits[1]); // Affiche "banane" +console.log(fruits[2]); // Affiche "orange"`, + }, + { + name: "Exemple de tableau PHP", + codeLanguage: "php", + code: `$fruits = ["pomme", "banane", "orange"]; + +echo $fruits[0]; // Affiche "pomme" +echo $fruits[1]; // Affiche "banane" +echo $fruits[2]; // Affiche "orange"`, + }, +]; + +const jsWrongTypesAdditionSnippets = [ + { + name: "Addition de types différents", + codeLanguage: "js", + code: `const a = 5; +const b = "10"; + +const resultat = a + b;`, + }, +]; + +const jsWrongTypesBooleanSnippets = [ + { + name: "Addition de types différents", + codeLanguage: "js", + code: `const a = 5; +const b = "5"; + +const estVrai = a == b;`, + }, +]; + +const jsTypescriptExample = [ + { + name: "Exemple de variable JavaScript", + codeLanguage: "js", + code: "const a = 5; // Type implicite : number", + }, + { + name: "Exemple de variable TypeScript", + codeLanguage: "ts", + code: "const a: number = 5; // Type explicite : number", + }, +]; + +export default { + jsObjectExample: () => , + jsArrayExample: () => , + jsWrongTypesAddition: () => ( + + ), + jsWrongTypesBoolean: () => , + jsTypescriptExample: () => , +}; diff --git a/app/vite.config.ts b/app/vite.config.ts index e52e171..fcccf74 100755 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -36,6 +36,7 @@ export default defineConfig({ "nginx", "sql", "json", + "php", ], }), vike(),