Kurzusok
/
F#
F#
/
Feladatok
/
Jelszóellenőrző
Jelszóellenőrző

Jelszóellenőrző

Tanulófeladat

Bevezetés

A Result típus lehetővé teszi, hogy egy függvény egyetlen értéket adjon vissza, amely a következőket jelzi:

  • Hogy a művelet sikeres volt-e vagy sikertelen
  • Sikeres művelet esetén a művelet eredményértéke
  • Sikertelen művelet esetén a hiba oka

Használat

A Result típus egy generikus típus, amely két mögöttes típust tartalmaz:

  • A sikeres művelet eredményének típusa
  • A hiba típusa sikertelenség esetén

A Result típus emellett egy [diszkriminált unió][discriminated-union], amelynek a következő lehetséges esetei vannak:

  • Ok <value> egy sikeres eredményt jelöl
  • Error <reason> egy sikertelenséget jelöl

A következő függvény bemutatja, hogyan hozhatsz létre Result értéket:

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

Ebben a példában az Ok érték egy string (a megadott név), az Error érték pedig szintén egy string (a hiba oka, ember által olvasható formában).

A Result érték tartalmának kiolvasása

Vizsgáld meg a következő típusdefiníciót és függvényszignatúrát:

type FileOpenError = 
| NotFound
| AccessDenied
| FileLocked

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

Az openFile függvényt meghívó kód mintaillesztéssel kezelheti a sikeres és sikertelen eseteket, ahogy a következő példában:

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

Utasítások

A feladatod, hogy készíts egy jelszóellenőrzőt. A jelszóellenőrző a felhasználó által javasolt jelszót ellenőrzi, hogy megfelel-e azoknak a követelményeknek, amelyeket az adott erőforráshoz való hozzáférést szabályozó szervezet határozott meg.

Ebben a feladatban a jelszó követelményei a következők:

  • Legalább 12 karakterből kell állnia
  • Tartalmaznia kell legalább egy nagybetűt
  • Tartalmaznia kell legalább egy kisbetűt
  • Tartalmaznia kell legalább egy számjegyet
  • Tartalmaznia kell legalább egy szimbólumot a következő halmazból: !@#$%^&*

A megoldásodnak egy Result típust kell használnia, hogy magába foglalja a siker vagy a kudarc állapotát. Siker esetén a Result a stringként érvényesített jelszót tartalmazza. Kudarc esetén a Result azt a szabályt tartalmazza, amelyet a jelszó megsértett.

Note

Ebben a feladatban a jelszóellenőrző leegyszerűsített lesz, és csak akkor jelez, ha egyetlen szabályt sértettek meg. Egy következő feladatban egy valósághűbb jelszóellenőrzőt nézünk meg, amely azt is jelezni tudja, ha egyszerre több szabályt sértettek meg.

1. A checkPassword függvény megvalósítása

A checkPassword függvény a megadott jelszót a fent említett szabályok alapján ellenőrzi. Hiba esetén úgy jelzi a megsértett szabályt, hogy az eredményértékbe beágyazza az egyik PasswordRule értéket.

checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter

2. A ``getStatusMessage` függvény megvalósítása

A getStatusMessage függvény egy olyan stringet ad vissza, amely egy ember számára olvasható üzenetet tartalmaz, és megmutatja, mit jelent a checkPassword által visszaadott eredmény.

getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) Jelszóellenőrző feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) F# nyelvet 18 fogalom148 feladat segítségével, valódi emberi mentorálással, mindez ingyen.