レコード構文
人物のデータ型を作る
data Person = Person String String Int Float String String deriving (Show)
フィールドは、名前、苗字、年齢、身長、電話番号、好きなアイスクリームの味 となっている。
人物を作成してみる
*Shapes> let guy = Person "VirtualNojyaLoli" "KitsuneMusumeYoutuberOjisan" 13 132.1 "999-000-99999" "Kemomimi" *Shapes> guy Person "VirtualNojyaLoli" "KitsuneMusumeYoutuberOjisan" 13 132.1 "999-000-99999" "Kemomimi"
人物の属性にアクセスするためには関数が必要
firstName :: Person -> String firstName (Person firstname _ _ _ _ _) = firstname lastName :: Person -> String lastName (Person _ lastname _ _ _ _) = lastname age :: Person -> Int age (Person _ _ age _ _ _) = age height :: Person -> Float height (Person _ _ _ height _ _) = height phoneNumber :: Person -> String phoneNumber (Person _ _ _ _ number _) = number flavor :: Person -> String flavor (Person _ _ _ _ _ flavor) = flavor
実行する
*Shapes> firstName guy "VirtualNojyaLoli" *Shapes> lastName guy "KitsuneMusumeYoutuberOjisan"
「でも、もっとマシな方法があるんでしょ!」と思ったかもしれませんね。お あいにくさまですが、ありません。 うそだよー、ありますよ! ハッハッハッ!
は?ぶっとばすぞ?
... Haskell にはデータ型を書くための構文がもう1つあるらしい。それをレコード構文という。
data Person = Person { firstName :: String , lastName :: String , age :: Int , height :: Float , phoneNumber :: String , flavor :: String } deriving (Show)
このように書くとさっき実装した6つの関数を自動的に作ってくれる。
*Shapes> :t height height :: Person -> Float *Shapes> :t age age :: Person -> Int
レコード構文を使うとインスタンスの自動導出(derive)した場合、型の表示の仕方が変わる。
従来のデータ型定義
*Shapes> Person "VirtualNojyaLoli" "KitsuneMusumeYoutuberOjisan" 13 132.1 "999-000-99999" "Kemomimi" Person "VirtualNojyaLoli" "KitsuneMusumeYoutuberOjisan" 13 132.1 "999-000-99999" "Kemomimi"
レコード構文で定義
*Shapes> Person "VirtualNojyaLoli" "KitsuneMusumeYoutuberOjisan" 13 132.1 "999-000-99999" "Kem omimi" Person {firstName = "VirtualNojyaLoli", lastName = "KitsuneMusumeYoutuberOjisan", age = 13, height = 132.1, phoneNumber = "999-000-99999", flavor = "Kemomimi"}
レコード構文を使うと、インスタンス化する場合にフィールドの順番を指定する必要が無くなる。ただし全てのフィールドを埋める必要はある。
所感
レコード構文のほうが便利そう。のじゃー

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る