Parcours
/
F#
F#
/
Exercices
/
Vérificateur de mot de passe
Vérificateur de mot de passe

Vérificateur de mot de passe

Exercice d'apprentissage

Introduction

Le type Result permet à une fonction de renvoyer une seule valeur qui indique tous les éléments suivants :

  • Si l'opération a réussi ou échoué
  • En cas de réussite, la valeur résultante de l'opération
  • En cas d'échec, la raison de l'échec

Utilisation

Le type Result est un type générique qui contient deux types sous-jacents :

  • Le type de la valeur résultante en cas de réussite de l'opération
  • Le type d'erreur en cas d'échec

Le type Result est aussi une [union discriminée][discriminated-union] avec les cas possibles suivants :

  • Ok <value> qui représente un résultat réussi
  • Error <reason> qui représente un échec

La fonction suivante montre comment créer une valeur de type Result :

let validateName (name: string) : Result<string, string> = 
    match name with
    | null -> Error "Name not found."
    | "" -> Error "Name is empty."
    | _ -> Ok name

Dans cet exemple, la valeur Ok est une string (le nom donné), et la valeur Error est aussi une string (la cause de l'erreur, sous une forme lisible par un humain).

Lis le contenu d'une valeur Result

Prenons la définition de type et la signature de fonction suivantes :

type FileOpenError = 
| NotFound
| AccessDenied
| FileLocked

let openFile (filename: string) : Result<int, FileOpenError> =

Le code qui appelle la fonction openFile peut recourir au filtrage par motif pour gérer les cas de réussite et d'échec, comme dans l'exemple suivant :

match openFile(filename) with
| Ok handle -> doSomethingWithFile(handle)
| Error NotFound -> printfn $"Error: file {filename} was not found."
| Error AccessDenied -> printfn $"Error: you do not have permission to open the file {filename}."
| Error FileLocked -> printfn $"Error: file {filename} is already in use."

Instructions

Ta tâche est de créer un vérificateur de mot de passe. Un vérificateur de mot de passe valide le mot de passe proposé par un utilisateur pour s'assurer qu'il répond à un ensemble d'exigences définies par l'organisation qui contrôle l'accès à la ressource en question.

Pour cet exercice, les exigences du mot de passe sont :

  • Doit comporter au moins 12 caractères
  • Doit contenir au moins une lettre majuscule
  • Doit contenir au moins une lettre minuscule
  • Doit contenir au moins un chiffre
  • Doit contenir au moins un symbole de l'ensemble !@#$%^&*

Ta solution doit utiliser un Result pour encapsuler le statut de succès ou d'échec. Dans le cas de succès, le Result doit transmettre le mot de passe validé sous forme de string. Dans le cas d'échec, le Result doit transmettre la règle qui a été violée.

Note

Pour cet exercice, le vérificateur de mot de passe sera simpliste : il indiquera uniquement quand une seule règle a été violée. Un exercice ultérieur explorera un vérificateur de mot de passe plus réaliste, qui peut indiquer quand plusieurs règles ont été violées en même temps.

1. Implémente la fonction checkPassword

La fonction checkPassword vérifie le mot de passe donné par rapport aux règles mentionnées ci-dessus. En cas d'échec, elle indique la règle qui a été violée en encapsulant l'une des valeurs de PasswordRule dans la valeur de résultat.

checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter

2. Implémente la fonction ``getStatusMessage`

La fonction getStatusMessage renvoie une string contenant un message lisible par un humain indiquant la signification du résultat renvoyé par checkPassword.

getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
F# Exercism

Prêt à commencer Vérificateur de mot de passe ?

Inscris-toi sur Exercism pour apprendre et maîtriser F# avec 18 concepts148 exercices, et un vrai mentorat humain, le tout gratuitement.