fugafuga.write

日々のログ

すごいH本 part39

レコード構文

人物のデータ型を作る

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"}

レコード構文を使うと、インスタンス化する場合にフィールドの順番を指定する必要が無くなる。ただし全てのフィールドを埋める必要はある。

所感

レコード構文のほうが便利そう。のじゃー

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

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