Part18: データクラス

ことり「今回はデータクラス。これまで見たクラスはデータを持つだけじゃなくて何かの振る舞いもするものだったけど、データクラスはデータを持つことに特化したクラスです」

凛「プロパティだけ定義したクラスじゃだめなの?」
ことり「それでもいいんだけど、dataってキーワードを付けるといろいろ便利なことがあるんだ」

SchoolIdol(name=Honoka Kosaka, age=16)
1456773062
SchoolIdol(name=Umi Sonoda, age=16)
false

ことり「SchoolIdolっていうデータクラスがあります。一見すると、名前と年齢を持ってるだけのクラスだけど、実はこれだけでいろいろできることがあるのです」
凛「関数定義してないのに関数が呼び出せてるにゃ」
ことり「データクラスでは、toStringhashCodeequalscopyの各関数が自動生成されます。だから、自分で定義しなくても使えるんだよ」

ことり「データクラスは、いくつか条件を満たす必要があります」

  • プライマリコンストラクタは最低1つの引数を取ること
  • プライマリコンストラクタの引数はすべてvarvalが明示されていること
  • abstractopensealedinnerではないこと
  • 他のクラスを継承していないこと、ただしインターフェイスの実装はOK

凛「データ入れる構造体みたいな使い方だと便利そうだにゃ」
ことり「PairとかTripleとか、標準ライブラリにもデータクラスはあるんだけど、データの意味を表すように自分で実装した方がいいかな」


凛「今回は簡単だったにゃ」
ことり「次回はジェネリクスだよ。これ、だめな人はとことんだめなんだよね」
凛「ひえ~っ!」


LINEで送る
Pocket


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です