型クラスとインスタンスとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 型クラスとインスタンスの意味・解説 

型クラスとインスタンス

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)

Haskell」の記事における「型クラスとインスタンス」の解説

型クラス相異なるデータ型共通したインターフェイスを持つ関数定義する例えば、順序づけることができる要素をもつリストソートできる関数 sort定義することを考える。リストの要素データ型関数 sort定義するときには不明であり、その要素どのように順序付けるかを予め決定しておくことはできない数値型文字列型それぞれのデータ順序付けることができるであろうが、共通してデータ順序返す抽象的な関数 order定義することができれば、それを用いてソートすることができる。 まず型クラス Comparer を定義して順序付け関数 order形式定義する。値の順序調べ関数 order x y は x → y が昇順のときは負の値、降順の時は正の値、x と y が等しいときは 0 を返すものとする。ここで class型クラス宣言であることを示す予約語である。 class Comparer a where order :: a -> a -> Int 型クラス実装するには、対象データ型に対してインスタンス宣言を行う。次は型 a の型クラス Comparer に対すインスタンス宣言したのである。このインスタンス宣言により、Enumインスタンスである任意の型のリスト辞書順比較できる例えば、文字列 CharEnumインスタンスCharリストであり、このインスタンス定義により order適用することができるようになる。ここで関数 fromEnum c は文字 c を数値変換する関数である。Comparer のインスタンス定義する型 a を Eq および Enumインスタンスを持つものに限定しているので((Eq a, Enum a) => の部分)、インスタンス定義の内部Eq関数である (/=) や Enum関数である fromEnum を使うことができている。 instance (Eq a, Enum a) => Comparer [a] where order [] [] = 0 order _ [] = 1 order [] _ = -1 order (x:xs) (y:ys) | x /= y = fromEnum x - fromEnum y | otherwise = order xs ys 次にリストクイックソートする関数 sort を示す。型クラス用いて順序付け関数 order抽象化したため、このように型クラス Comparer のインスタンスを持つ全ての型の値に適用できる一般化されソート関数定義できるのであるsort :: Comparer a => [a] -> [a] sort [] = [] sort (x:xs) = sort [e | e <- xs, order e x < 0] ++ [x] ++ sort [e | e <- xs, order e x >= 0] この関数 sort次のように使う。 main = do print (sort ["foo", "bar", "baz"]) -- ["bar", "baz", "foo"] と出力されるprint (sort [[5, 9], [1, 2], [5, 6]]) -- [[1, 2], [5, 6], [5, 9]] と出力されるHaskellインスタンス宣言複数の型に共通する操作定義するという点で JavaC# の「インターフェイス」と似ているが、Haskell では既存任意の型についてもインスタンス定義できる点でもインターフェイス比べて柔軟である。

※この「型クラスとインスタンス」の解説は、「Haskell」の解説の一部です。
「型クラスとインスタンス」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。

ウィキペディア小見出し辞書の「型クラスとインスタンス」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「型クラスとインスタンス」の関連用語

1
2% |||||

型クラスとインスタンスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



型クラスとインスタンスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのHaskell (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS