第5章 記録 レコードを扱う
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Java 14では、プレビュー機能として新しいタイプのデータ構造が導入された。1レコードは、単なる典型的なJavaの型やテクニックではない:レコードは、単にJavaの典型的な型やテクニックとして使えるものではなく、シンプルでありながら豊富な機能を持つデータ・アグリゲータを最小限のボイラープレートで提供する、まったく新しい言語機能である。
データ集計の種類
一般的な観点からすると、データ集約とは、複数のソースからデータを収集し、意図された目的やより好ましい使い方に役立つ形式に組み立てるプロセスである。 おそらく、データ集約の種類として最もよく知られているのは、タプルであろう。
タプル
数学的に言えば、タプルは「要素の有限順序シーケンス」であり、プログラミング言語で言えば、タプルは複数の値やオブジェクトを集約したデータ構造である。
タプルには2つの種類がある。構造タプルは、コンテナの要素の順番にのみ依存するため、以下のPythonで見られるように、インデックス付けによってのみアクセスできる。2コードで見ることができる:
apple=("apple","green")banana=("banana","yellow")cherry=("cherry","red")fruits=[apple,banana,cherry]forfruitinfruits:"The",fruit[0],"is",fruit[1]
名前付きタプルはデータにアクセスするためにインデックスを使わず、次のSwiftコードに見られるように、代わりにコンポーネント名を使う:
typealiasFruit=(name:String,color:String)letfruits:[Fruit]=[(name:"apple",color:"green"),(name:"banana",color:"yellow"),(name:"cherry",color:"red")]forfruitinfruits{println("The\(fruit.name)is\(fruit.color)")}
Recordが何を提供するのかを示すために、まず古典的なPOJOから不変性のあるPOJOに移行する方法を見てもらい、次に同じ機能をRecordで再現する方法を紹介する。
シンプルなPOJO
まず、Recordが何を提供するのかを理解するために、Javaにおけるデータ集約の「Record以前」の状態を見てみよう。 例として、単純な「ユーザ」型を「古典的な」POJOとして作成し、それを「不変性」POJOに進化させ、最後にRecordを作成する。例5-1に見られるように、ユーザ名、アクティビティ状態、最終ログイン・タイムスタンプ、そして典型的なJavaコードに付随する通常の定型文を持つ単純な型となる。
例 5-1. 単純なUser POJO
publicfinalclassUser{privateStringusername;privatebooleanactive;privateLocalDateTimelastLogin;publicUser(){}public ...