Tracks
/
F#
F#
/
Übungen
/
Passwort-Prüfer
Passwort-Prüfer

Passwort-Prüfer

Lernübung

Einführung

Der Typ Result ermöglicht es einer Funktion, einen einzelnen Wert zurückzugeben, der alle folgenden Punkte angibt:

  • Ob die Operation erfolgreich war oder fehlgeschlagen ist
  • Bei Erfolg den resultierenden Wert der Operation
  • Im Fehlerfall den Grund für das Fehlschlagen

Verwendung

Der Typ Result ist ein generischer Typ, der zwei zugrunde liegende Typen enthält:

  • Den Typ des resultierenden Werts bei einer erfolgreichen Operation
  • Den Typ des Fehlers bei einem Fehlschlag

Der Typ Result ist außerdem eine [diskriminierte Union][discriminated-union] mit den folgenden möglichen Fällen:

  • Ok <value> steht für ein erfolgreiches Ergebnis
  • Error <reason> steht für einen Fehler

Die folgende Funktion zeigt, wie du einen Result-Wert erstellst:

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

In diesem Beispiel ist der Ok-Wert ein String (der angegebene Name), und der Error-Wert ist ebenfalls ein String (die Ursache des Fehlers, in für Menschen lesbarer Form).

Den Inhalt eines Result-Werts lesen

Betrachte die folgende Typdefinition und Funktionssignatur:

type FileOpenError = 
| NotFound
| AccessDenied
| FileLocked

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

Code, der die Funktion openFile aufruft, kann Musterabgleich verwenden, um die Erfolgs- und Fehlerfälle zu behandeln, wie im folgenden Beispiel:

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."

Anleitung

Deine Aufgabe ist es, einen Passwort-Checker zu erstellen. Ein Passwort-Checker überprüft das vorgeschlagene Passwort eines Benutzers. Er stellt sicher, dass es die Anforderungen erfüllt. Diese werden von der Organisation festgelegt, die den Zugriff auf die jeweilige Ressource kontrolliert.

Für diese Übung sind die Passwortanforderungen:

  • Muss mindestens 12 Zeichen haben
  • Muss mindestens einen Großbuchstaben enthalten
  • Muss mindestens einen Kleinbuchstaben enthalten
  • Muss mindestens eine Ziffer enthalten
  • Muss mindestens ein Symbol aus der Menge !@#$%^&* enthalten

Deine Lösung muss ein Result verwenden, um den Erfolgs- oder Fehlerstatus zu kapseln. Im Erfolgsfall muss das Result das validierte Passwort als String enthalten. Im Fehlerfall muss das Result die Regel enthalten, die verletzt wurde.

Note

Für diese Übung ist der Passwort-Checker einfach gehalten: Er zeigt nur an, wenn eine einzelne Regel verletzt wurde. Eine spätere Übung behandelt einen realistischeren Passwort-Checker, der anzeigen kann, wenn mehrere Regeln gleichzeitig verletzt wurden.

1. Implementiere die Funktion checkPassword

Die Funktion checkPassword prüft das angegebene Passwort gegen die oben genannten Regeln. Bei einem Fehler gibt sie die verletzte Regel an, indem sie einen der Werte von PasswordRule in den Ergebniswert einbettet.

checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter

2. Implementiere die Funktion ``getStatusMessage`

Die Funktion getStatusMessage gibt einen String zurück. Dieser enthält eine menschenlesbare Nachricht, die die Bedeutung des von checkPassword zurückgegebenen Ergebnisses angibt.

getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
F# Exercism

Bereit, mit Passwort-Prüfer zu starten?

Melde dich bei Exercism an, um F# mit 18 Konzepte148 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.