Maison > interface Web > js tutoriel > le corps du texte

# Remplacer la validation générique par des fonctions réutilisables

王林
Libérer: 2024-09-03 14:35:08
original
716 Les gens l'ont consulté

# Replace Generic Validation with Reusable Functions

Les développeurs JavaScript et TypeScript se retrouvent souvent à écrire les mêmes conditions à plusieurs reprises. Si vous êtes un développeur Web, vous avez probablement rencontré du code comme celui-ci :

const handleSaveTextKeydown = (event: KeyboardEvent) => {
   if (event.key === 'Enter') {
    //... save text
   }
}
Copier après la connexion

Dans ce cas, event.key est de type string, et il est facile d'introduire des bugs en incluant accidentellement un espace dans 'Entrée', par exemple.

Pourquoi ne pas encapsuler cette condition dans une fonction ?

const handleSaveTextKeydown = (event: KeyboardEvent) => {
   if (checkIsEnterKey(event.key)) {
    //... save text
   }
}
Copier après la connexion

Cela garantit que toutes les vérifications de la touche Entrée sont cohérentes et fiables.

Maintenant, considérez cette validation :

type Value = null | object;

const value = {} as Value;

if (typeof value === 'object') {
  value; // value type is null | object
}
Copier après la connexion

Même si TypeScript est intelligent, la valeur à l'intérieur de la condition reste de type Value. En effet, typeof null renvoie « objet ».

Donc, vous devez écrire :

if (value !== null && typeof value === 'object') {
  value; // value type is object
}
Copier après la connexion

De nombreux développeurs pourraient ne pas encapsuler cela dans une fonction et l'écrire à plusieurs reprises chaque fois qu'ils rencontrent cette situation.

Combien de fois avez-vous écrit la même condition dans votre vie ?

Combien de fois avez-vous commis la même erreur ?

Combien de fois écrivez-vous encore la même condition à l’avenir ?

Si c'était moi, je ferais ça :

if (checkIsObject(value)) {
  value; // value type is object
}
Copier après la connexion

Il y a de nombreux avantages à encapsuler des conditions génériques dans des fonctions.

Considérons l'exemple suivant :

const array = [0, 1, 2, 3, 4, 5, null, undefined];
Copier après la connexion

Créons un tableau qui exclut uniquement les valeurs nulles.

Vous pouvez privilégier la brièveté et l'écrire comme ceci :

const numbers = array.filter(Boolean);
Copier après la connexion

Malheureusement, ce n’est pas idéal. 0 est également évalué comme faux et est exclu. Vous devez donc écrire :

const numbers = array.filter(item => item !== null && item !== undefined);
Copier après la connexion

Cela ne ressemble-t-il pas à un code moche et non réutilisable ?

Je peux écrire du code plus élégant :

const numbers = array.filter(checkIsNullish);
Copier après la connexion

Arrêtez d'écrire des conditions génériques à plusieurs reprises. Cela ne conduit qu'à des erreurs et le code devient moins lisible.

Permettez-moi de vous présenter une bibliothèque que j'ai créée appelée checker.

Cette bibliothèque de fonctions utilitaires représente les conditions couramment utilisées dans le développement Web général et le développement de bas niveau sous forme de fonctions. Toutes les fonctions prennent une entrée et renvoient une valeur booléenne.

Au moment de la rédaction de cet article, il fournit une multitude de fonctions pour gérer les types de données tels que les chaînes, les nombres, les booléens et les valeurs nulles. Toutes les fonctions sont testées, documentées et faciles à utiliser.

Regardons quelques exemples concrets.

Les packages fournis par cette bibliothèque sont tous publiés sur JSR. Ils peuvent être facilement installés dans les projets NPM, PNPM, Yarn, Bun et Deno.

Ici, nous prendrons le package @checker/string comme exemple avec NPM.

  1. Installer le package

Exécutez la commande suivante dans le répertoire de votre projet :

  npx jsr add @checker/string
Copier après la connexion
  1. Utiliser les fonctions
  import { checkIsNotEmptyString, checkIsIndexFound } from "@checker/string";

  const value = "Hello";

  const formatted = value.trim();

  if (checkIsNotEmptyString(formatted)) {
    // formatted !== ''
    // When formatted is not an empty string
  }

  const index = value.indexOf("el");

  if (checkIsIndexFound(index)) {
    // index !== -1
    // When "el" is found in value
  }
Copier après la connexion

Je n'aime pas utiliser des opérateurs de négation logique comme !SOME_CONDITION pour inverser une valeur booléenne. En effet, c'est implicite et le simple fait d'inverser la valeur booléenne en l'ajoutant ou en l'omettant peut conduire à de nombreuses situations dangereuses.

Par conséquent, toutes les fonctions ont des fonctions checkIsNot~ correspondantes définies.

Encapsuler les conditions génériques dans des fonctions. De cette façon, le code devient plus lisible et les bugs plus faciles à repérer.

Merci d'avoir lu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal