2019年9月6日金曜日

Learning Scala(本)勉強といくつかの整理02] 一級関数、コレクション、クラスとオブジェクト、ケースクラス、トレイトなど

1. 一級関数

• 関数を一級(first-class)オブジェクトとして扱う
 - 関数型プログラミングの基本的価値観の一つ
 - 関数が宣言されて呼び出されること以外にも、他のデータタイプのように言語の多様な部分に使用することができる
 - 識別子(identifier)に割り当てられていなくても、リテラルの形で生成可能
 - 値、変数またはデータ構造のようにコンテナに保存可能。
 - 他の関数のパラメータとして使用されたり、他の関数の変換値として使用可能

• 高階関数(higher-order function)
 - 他の関数をパラメータとして受け入れるか、または戻り値として関数を使用する関数
 - プログラムが何になるべきか(what)を記述する観点でプログラムを作成可能→宣言型プログラミング



_____________________________________________________________
2. コレクション

• コレクション(collection)フレームワーク
 - 指定されたタイプを持つ一つまたはそれ以上の値を収集するデータ構造を提供:配列、リスト、マップ、セット、トリなど

• 不変のコレクション
 - リスト(List)、集合(Set)、マップ(Map)

•可変コレクション
 - バッファ(Buffer)、集合(Set)、マップ(Map)
 - 配列
 - ストリーム
  + 一つ以上の始まりの要素と再帰関数で生成された遅延(lazy)コレクション
  + 他の不変のコレクションは、その内容の100%を初期化時に受けるが、ストリームの構成要素は、最初にアクセスするとき、コレクションに追加される
  + 生成された構成要素は、後で抽出される場合に備えて、キャッシュに保存され、各要素が一度だけ生成されることを保証
  + 無限に大きくなれることができ、理論的にはコンポーネントがアクセス時のみ現実化される無限のコレクション
 - モナディックコレクション
  + 複数の要素を含めることはできないコレクション
  + Optionコレクション:サイズが1を超えないコレクション。単一の値の存在、または不在を示す。null値の代替材として使用可能
 + Tryコレクション:エラー処理を支援するコレクション
 + futureコレクション:バックグラウンドタスクを開始するコレクション


不変のタイプ                         対応タイプ(可変的な)
collection.immutable.List       collection.mutable.Buffer
collection.immutable.Set       collection.mutable.Set
collection.immutable.Map     collection.mutable.Map




_____________________________________________________________
3.クラス、オブジェクト

• クラス(class)
 - データ構造と関数の組み合わせ


 - ゲッター、セッターの自動生成

• オブジェクト(object)
 - 複数のインスタンスを持つことができない形態のクラス
 - newキーワードでインスタンスを生成する代わりに、名前で直接オブジェクトにアクセス



_____________________________________________________________
4.ケースクラス、トレイト

• ケースクラス(case class)
 - 自動的に生成されたメソッドのいくつかを含むインスタンスを生成することができるクラス
 - 自動的に生成される同伴オブジェクトを含み、この同伴オブジェクトも、自動生成された自分だけのメソッドを持っている

• トレイト
 - 多重継承を可能にするクラスタイプの一種
 - クラス、ケースクラス、オブジェクト、トレイトのすべては、複数のクラスを拡張することはできないが、同時に複数のトレイトを拡張することはできる
 - トレイトをミックスインする順序に従って呼ばれるメソッドが決定される
 - 線形化(linearization)

_____________________________________________________________

• スカラは関数型プログラミングの基本的価値観の一つである一級の関数をサポートし、これにより、宣言的にプログラミングをすることができる。

• スカラは不変と可変コレクションの構造を提供し、相互に転換することができる。

• スカラは、基本的なクラス以外にも、オブジェクト、ケースクラス、トレイトを提供し、これにより、より構造的かつ効率的なオブジェクト指向プログラミングが可能になる。

0 件のコメント:

コメントを投稿