演習 - 関数のパターン
この演習では、教わったいくつかの関数パターンを適用することに焦点を当てます。 また、同僚によって記述されたコードを処理し、パイプライン演算子で融合させます。
アプリを作成する
既に説明したように、同僚はコードの記述に追われています。 次のとおりです。
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
このコードは、カード ゲームを実装するのに役立つさまざまな部分で構成されています。 では、何をすればいいでしょう。 あなたの仕事は、カードのデッキを受け取り、それをシャッフルし、上から 3 枚のカードを取って、結果を出力することです。
次を使用して新しいプロジェクトを作成します。
dotnet new console --language F# -o Cards cd CardsProgram.fs のコードを、指定されたコードに置き換えます。
末尾に次の行を追加して、パイプラインを作成します。
cards |> shuffle |> take 3 |> printAllこのコードは、関数
shuffle()、take()、printAll()を左から右に順番に呼び出します。shuffle()メソッドによってランダムな要素が導入されるので、出力結果は変化します。dotnet runを呼び出してプロジェクトを実行します。dotnet run適切な説明とスーツが含まれた 3 枚のカードが出力されるのを確認できます。 出力例を次に示します。
Ace of Hearts 9 of Hearts 7 of Hearts
おめでとうございます。 あなたとあなたのチームは、カード アプリケーションの開始部分を構築しました。 また、シーケンス内の関数を呼び出すパイプラインの適用も成功しました。そのすべてがカードの一覧に適用されます。