Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Scala
Search
Yukiyan
April 21, 2020
Technology
0
87
Introduction to Scala
2020/04/21 社内LT
Scala入門
Yukiyan
April 21, 2020
Tweet
Share
More Decks by Yukiyan
See All by Yukiyan
Introduction to Scala about type parameter
yukiyan
0
160
digdagで支えるデータパイプライン / Building a data pipeline with digdag
yukiyan
1
5.7k
機械学習基盤を一人で構築するということ / Hitori ml team
yukiyan
3
3.7k
ECSのデプロイツールを試している話
yukiyan
0
2.5k
Replace a batch application to ECS
yukiyan
1
1.6k
Introduction to Docker
yukiyan
0
5.8k
Other Decks in Technology
See All in Technology
.NET 10のEntity Framework Coreの新機能
htkym
0
110
巨大モノリスのリプレイス──機能整理とハイブリッドアーキテクチャで挑んだ再構築戦略
zozotech
PRO
0
280
大規模プロダクトで実践するAI活用の仕組みづくり
k1tikurisu
5
1.8k
社内外から"使ってもらえる"データ基盤を支えるアーキテクチャの秘訣/登壇資料(飯塚 大地・高橋 一貴)
hacobu
PRO
0
6.3k
Dev Containers と Skaffold で実現する クラウドネイティブ開発環境 ローカルのみという制約に挑む / Cloud-Native Development with Dev Containers and Skaffold: Tackling the Local-Only Constraint
bitkey
PRO
0
130
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
140
AIエージェントによるエンタープライズ向けスライド検索!
shibuiwilliam
4
690
雲勉LT_Amazon Bedrock AgentCoreを知りAIエージェントに入門しよう!
ymae
2
200
組織の“見えない壁”を越えよ!エンタープライズシフトに必須な3つのPMの「在り方」変革 #pmconf2025
masakazu178
1
820
pmconf 2025 大阪「生成AI時代に未来を切り開くためのプロダクト戦略:圧倒的生産性を実現するためのプロダクトサイクロン」 / The Product Cyclone for Outstanding Productivity
yamamuteki
3
2.4k
国産クラウドを支える設計とチームの変遷 “技術・組織・ミッション”
kazeburo
4
8.2k
Building AI Applications with Java, LLMs, and Spring AI
thomasvitale
1
230
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
340
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Fireside Chat
paigeccino
41
3.7k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Raft: Consensus for Rubyists
vanstee
140
7.2k
For a Future-Friendly Web
brad_frost
180
10k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Documentation Writing (for coders)
carmenintech
76
5.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Facilitating Awesome Meetings
lara
57
6.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Transcript
Scala 入門 ゆきやん
教材
Scala をやる動機 データエンジニアリングをしていると Scala や Java 製のプロダクトを利用することが多い • 大規模分散処理系のプロダクトで採用事例が多い ◦
apache/spark ◦ apache/kafka ◦ apache/flink ◦ apache/beam • データ処理に便利 ◦ NULL 安全なエラーハンドリング (大規模データ処理で数時間待ってヌルポはきつい ) ◦ 型を生かした豊富なコレクションライブラリ ◦ 柔軟な非同期処理 • Java の資産を利用できる ◦ treasure-data/digdag, embulk/embulk のプラグインを Scala で書ける ◦ spotify/scio
• jenv/jenv • scalaenv/scalaenv • Language Server ◦ scalameta/metals ◦
R.I.P ENSIME IDE は必ずしも必要ではない REPL もちゃんとある (sbt console) 環境構築
基本的な文法
面白かった機能 • ケースクラス • トレイト • 高階関数 • implicit parameter
• パターンマッチ • Option, Either, Try • コレクション(for 内包表記)
ケースクラス • Value Object 使うときに役立つ
トレイト • Java のインターフェースみたいなやつ • 複数のトレイトを 1つのクラスやトレイトにミックスインできる • 直接インスタンス化できない
トレイト
高階関数
高階関数
implicit parameter メタ情報のような使うか使わないか分からん情報を、引数でひたすら引き回す手間を省ける (DBコネクションとか) 「引数の省略ができる」というメリットはあるけど、場合によっては可読性が下がるので次スライドの活用法のほ うが多用される
implicit parameter リファクタリング前
implicit parameter まずは trait でリファクタリング 要素の型で自明なのに HogeAddr 書くのが無駄
implicit parameter さらに implicit parameter で リファクタリング
型クラス(≒implicit parameter)は、うまく使うと、後付けのデータ型に対して既存のアルゴリズムを型安全に 適用するのに使うことができます。 この特徴は、特にライブラリ設計のときに重要になってきます。 ライブラリ設計時点で定義されていないデータ型に対していかにしてライブラリのアルゴリズムを適用する か、つまり、拡張性が高いように作るかというのは、なかなか難しい問題です。 簡潔に書けることを重視すると、拡張性が狭まりがちですし、拡張性が高いように作ると、デフォルトの動作で いいところを毎回書かなくてはいけなくて利用者にとって不便です。 型クラスを使ったライブラリを提供することによって、この問題をある程度緩和することができます。 皆さんも、型クラスを使って、既存の問題をより簡潔に、拡張性が高く解決できないか考えてみてください。
型クラスへの誘い · Scala研修テキスト implicit parameter
パターンマッチ
パターンマッチ
パターンマッチ
パターンマッチ
Option, Either, Try
Option, Either, Try
Option, Either, Try
Option, Either, Try
コレクション(for 内包表記) for 内包表記が便利
コレクション(for 内包表記)
• ジェネリクス ◦ class Foo[A] • 変位指定 ◦ class Foo[+A]
◦ class Foo[-A] • 型境界 ◦ class Foo[A <: B] ◦ class Foo[A >: B] • Future ◦ andThen ◦ recover, recoverWith ◦ result, ready ...etc 次回予告