Øvelse – funktionsmønstre

Fuldført

I denne øvelse skal du fokusere på at anvende nogle af de funktionelle mønstre, du blev undervist i. Du kan også arbejde på den kode, der er skrevet af dine kolleger, og sammensmelte den med en pipelineoperator.

Opret en app

Som nævnt har dine kolleger haft travlt med at skrive kode. Her er det:

let cards = [21; 3; 1; 7; 9; 23]
let cardFace card = 
    let no = card % 13
    if no = 1 then "Ace"
    elif no = 0 then "King"
    elif no = 12 then "Queen"
    elif no = 11 then "Jack"
    else string no

let suit card =
    let no = card / 13
    if no = 0 then "Hearts"
    elif no = 1 then "Spades"
    elif no = 2 then "Diamonds"
    else "Clubs"

let shuffle list =
    let random = System.Random()
    list |> List.sortBy (fun x -> random.Next())

let printCard card = printfn "%s of %s" (cardFace card) (suit card)

let printAll list = List.iter(fun x -> printCard(x)) list

let take (no:int) (list) = List.take no list 

Koden består af forskellige dele, der hjælper dig med at implementere et kortspil. Så hvad er opgaven? Din opgave er at tage et sæt kort, blande det, tage de tre øverste kort og derefter udskrive resultaterne.

  1. Opret et nyt projekt med:

    dotnet new console --language F# -o Cards
    cd Cards
    
  2. Erstat koden i filen Program.fs med den kode, du har fået.

  3. Opret en pipeline ved at tilføje følgende linje i slutningen:

    cards |> shuffle |> take 3 |> printAll
    

    Denne kode kalder funktionerne shuffle(), take()og printAll() i en sekvens fra venstre mod højre. Outputresultaterne varierer, fordi metoden shuffle() introducerer et tilfældigt element.

  4. Kør projektet ved at kalde dotnet run.

    dotnet run
    

    Du bør kunne se, at tre kort udskrives med deres korrekte beskrivelse og dragt. Her er et eksempel på, hvordan det kan se ud:

    Ace of Hearts
    9 of Hearts
    7 of Hearts
    

Tillykke! Du og dit team har bygget starten på et kortprogram. Du har også anvendt en pipeline, der giver dig mulighed for at kalde funktioner i en sekvens, som alle gælder for en liste over kort.