Slide 1

Slide 1 text

Scala 入門 ゆきやん

Slide 2

Slide 2 text

教材

Slide 3

Slide 3 text

Scala をやる動機 データエンジニアリングをしていると Scala や Java 製のプロダクトを利用することが多い ● 大規模分散処理系のプロダクトで採用事例が多い ○ apache/spark ○ apache/kafka ○ apache/flink ○ apache/beam ● データ処理に便利 ○ NULL 安全なエラーハンドリング (大規模データ処理で数時間待ってヌルポはきつい ) ○ 型を生かした豊富なコレクションライブラリ ○ 柔軟な非同期処理 ● Java の資産を利用できる ○ treasure-data/digdag, embulk/embulk のプラグインを Scala で書ける ○ spotify/scio

Slide 4

Slide 4 text

● jenv/jenv ● scalaenv/scalaenv ● Language Server ○ scalameta/metals ○ R.I.P ENSIME IDE は必ずしも必要ではない REPL もちゃんとある (sbt console) 環境構築

Slide 5

Slide 5 text

基本的な文法

Slide 6

Slide 6 text

面白かった機能 ● ケースクラス ● トレイト ● 高階関数 ● implicit parameter ● パターンマッチ ● Option, Either, Try ● コレクション(for 内包表記)

Slide 7

Slide 7 text

ケースクラス ● Value Object 使うときに役立つ

Slide 8

Slide 8 text

トレイト ● Java のインターフェースみたいなやつ ● 複数のトレイトを 1つのクラスやトレイトにミックスインできる ● 直接インスタンス化できない

Slide 9

Slide 9 text

トレイト

Slide 10

Slide 10 text

高階関数

Slide 11

Slide 11 text

高階関数

Slide 12

Slide 12 text

implicit parameter メタ情報のような使うか使わないか分からん情報を、引数でひたすら引き回す手間を省ける (DBコネクションとか) 「引数の省略ができる」というメリットはあるけど、場合によっては可読性が下がるので次スライドの活用法のほ うが多用される

Slide 13

Slide 13 text

implicit parameter リファクタリング前

Slide 14

Slide 14 text

implicit parameter まずは trait でリファクタリング 要素の型で自明なのに HogeAddr 書くのが無駄

Slide 15

Slide 15 text

implicit parameter さらに implicit parameter で リファクタリング

Slide 16

Slide 16 text

型クラス(≒implicit parameter)は、うまく使うと、後付けのデータ型に対して既存のアルゴリズムを型安全に 適用するのに使うことができます。 この特徴は、特にライブラリ設計のときに重要になってきます。 ライブラリ設計時点で定義されていないデータ型に対していかにしてライブラリのアルゴリズムを適用する か、つまり、拡張性が高いように作るかというのは、なかなか難しい問題です。 簡潔に書けることを重視すると、拡張性が狭まりがちですし、拡張性が高いように作ると、デフォルトの動作で いいところを毎回書かなくてはいけなくて利用者にとって不便です。 型クラスを使ったライブラリを提供することによって、この問題をある程度緩和することができます。 皆さんも、型クラスを使って、既存の問題をより簡潔に、拡張性が高く解決できないか考えてみてください。 型クラスへの誘い · Scala研修テキスト implicit parameter

Slide 17

Slide 17 text

パターンマッチ

Slide 18

Slide 18 text

パターンマッチ

Slide 19

Slide 19 text

パターンマッチ

Slide 20

Slide 20 text

パターンマッチ

Slide 21

Slide 21 text

Option, Either, Try

Slide 22

Slide 22 text

Option, Either, Try

Slide 23

Slide 23 text

Option, Either, Try

Slide 24

Slide 24 text

Option, Either, Try

Slide 25

Slide 25 text

コレクション(for 内包表記) for 内包表記が便利

Slide 26

Slide 26 text

コレクション(for 内包表記)

Slide 27

Slide 27 text

● ジェネリクス ○ class Foo[A] ● 変位指定 ○ class Foo[+A] ○ class Foo[-A] ● 型境界 ○ class Foo[A <: B] ○ class Foo[A >: B] ● Future ○ andThen ○ recover, recoverWith ○ result, ready ...etc 次回予告