F# 今日の勉強(パターンマッチ)


F# の復習

今日はパターンマッチに初めて触れました。

C#にもあるけど、F#らしい機能なんだなって感じました。

 

F# のパターンマッチ

これすごいなぁ。C#だとswitch式のパターンマッチが似てるって思ったけど、きっとF#からC#にいった機能なんだよね。

match式

match式はよく使うと思うのでしっかり覚えなきゃなー。

あとはorパターンとかasパターンとかパターンにも種類があるみたいなので、これもしっかり 記憶。

 

let testFunc param = 
    match param with
        | 'a' -> 0
        | 'b' -> 1
        | _ -> -1
       
let ret = testFunc 'b'
printfn "%A" ret

function式

簡単にいうとfun式とmatch式の合体らしいです。

functionなしでもifでも作れそうと思ったけど、どうなんやろ??

 

let testFunc = function 
    | value when value > 0 -> 1
    | value when value < 0 -> -1
    | _ -> 0

let ret = testFunc 2
printfn "%A" ret

レコード

C#でいったらclassにあたるのかな?

関数はなさそうやけど。

でも副作用をおこさないようにするなら、引数にレコード型をいれて作った方がいいのかな?

C#の拡張メソッド的に。

let favorite = { color = "ret"; number = 7; music = "Jazz" } 
let { color = favoriteColor; number = favoriteNumber; music = favoriteMusic} = favorite 
printfn "%s, %d, %s" favoriteColor favoriteNumber favoriteMusic

判別共用体

これ今のところ理解率やばいです。

enumが近いってことだけど、値の付随ってのがあるのでこれは使いこなすの難しそう。

でも上手く決まると気持ち良さそうな感じ。

 

type Fruits = 
    | Apple
    | Orange
    | Grape

let favoriteFruits = Apple

printfn "%A" favoriteFruits

 

ゆっくりやってるので今日はここまで。まだ本の半分までも読めてないけど、終わるのいつだーーー。


See also