A Result típus lehetővé teszi, hogy egy függvény egyetlen értéket adjon vissza, amely a következőket jelzi:
A Result típus egy generikus típus, amely két mögöttes típust tartalmaz:
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ölError <reason> egy sikertelenséget jelölA 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).
Result érték tartalmának kiolvasásaVizsgá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."
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:
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.
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.
checkPassword függvény megvalósításaA 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
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"
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.