Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Scalaの型クラスを完全に理解する
Search
Jun Tomioka
August 23, 2018
Technology
2.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scalaの型クラスを完全に理解する
Jun Tomioka
August 23, 2018
More Decks by Jun Tomioka
See All by Jun Tomioka
Dotty で軽量な DI ライブラリをかいてみた
jooohn
1
390
ソフトウェアエンジニアとしてモナドを完全に理解する / make-perfect-sense-of-monad
jooohn
14
8.1k
ScalaのコンパイラにFizzBuzzを解いてもらう(Dottyもあるよ)
jooohn
1
1.2k
Write stack safe non-tailrec recursive functions
jooohn
4
1k
Introduction to Clean Architecture
jooohn
1
620
人類には早すぎる、謎の計算ロジックに立ち向かう / Strugle with the most complicated logic ever
jooohn
1
1.8k
Work at M3 USA
jooohn
0
1.5k
クラウド電子カルテを支えるテクノロジーの光と闇
jooohn
0
1.4k
怖くないCats
jooohn
0
940
Other Decks in Technology
See All in Technology
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
410
Agent × Maestro で始める モバイル E2E 端末準備からテスト実行・結果確認まで
sansantech
PRO
0
230
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
160
Vibe-to-Spec開発_実践ガイド
happysamurai294
0
110
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
410
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
270
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
300
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
13k
CTO Night & Day Morning Session_AI-DLC:生成 AI 時代の開発プロセス変革
pikosan0000
0
120
VLA-JEPA: Enhancing Vision-Language-Action Models with Latent World Models
takmin
0
360
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.8k
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
0
230
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
890
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
A Modern Web Designer's Workflow
chriscoyier
699
190k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
600
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Utilizing Notion as your number one productivity tool
mfonobong
4
630
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
540
Transcript
Scalaの型クラスを 完全に理解する @jooohn1234
M3, Inc. @jooohn1234 じょんと呼んでください!
型クラス (Type Classes)
型クラス is
型のクラス
型クラス is 型のクラス
うんうん、わかるわかる!
None
None
型クラスは 同様の型のひとまとまり
雰囲気 0, 100, -50 Int ??? データ 型 型クラス インスタンス
インスタンス クラス クラス
Wikipedia
“a type class is a type system construct that supports
ad hoc polymorphism. ”
うんうん、わかるわかる!
“... is also known as function overloading or operator overloading.
”
型クラスは 同様の型のまとまりで Function Overloadingを実現す る型システム上の機構
JsonEncoder 型クラスのイメージ • def toJson(value: ???): Json • こんなことができそう ◦
toJson(1) ◦ toJson(“hoge”) ◦ toJson(User(userId = 1, name = “jooohn”))
Scalaでの型クラス
1. 型クラスとなるtraitを宣言
1. 型クラスとなるtraitを宣言 型パラメータで型クラスの インスタンスの型を受け取 るようにする
1. 型クラスとなるtraitを宣言 JsonEncoder[A]の値が 存在するとき AはJsonEncoder型クラ スのインスタンス
2. 型クラスのインスタンスを作成 (implicit)
2. 型クラスのインスタンスを作成 (implicit) StringはJsonEncode型 クラスのインスタンス
3. 型クラスをimplicitに利用するメソッドを定義
3. 型クラスをimplicitに利用するメソッドを定義 JsonEncode[A] 型の値を implicitスコープから参照
4. 値(の型)によっていい感じに処理をoverload
わからないでもない!
それで、subtypingと比べて なにがうれしいの?
これでもいいような
Scalaで型クラスを使うn個の理由 1. finalな型の拡張 2. 値に依存しない関数の定義 3. scopeのコントロール 4. インスタンスの導出 5.
解決する課題の違い
1. finalな型の拡張
1. Final なクラスの拡張 • Scala標準ライブラリなどで定義されている クラスなんかも拡張できる
2. 値に依存しない関数の定義
2. 値に依存しない関数の定義 • JsonDecoderを普通のtraitの使い方では 作れない。(Json => A のシグネチャ)
2. 値に依存しない関数の定義
3. スコープのコントロール
3. scopeのコントロール
4. インスタンスの導出
4. インスタンスの導出 • implicit def を用いた動的なインスタンス生 成
4. インスタンスの導出 • implicit def を用いた動的なインスタンス生 成
4. インスタンスの導出 • (Advanced) shapelessを用いたcase classか らのインスタンス導出
4. インスタンスの導出 • (Advanced) shapelessを用いたcase classか らのインスタンス導出
5. 解決する課題の違い
5. 解決する課題の違い モチベーション 利用時の型 subtyping 複数の型のインスタン スを、抽象型として扱い たい。 abstract: val
strategy: Strategy = SimpleStrategy type classes 任意の型に関して行う 共通処理を提供した い。 concrete: toJson(1: Long)
5. 解決する課題の違い 0, 100, -50 Int JsonEncoder データ 型 型クラス
インスタンス インスタンス クラス クラス subtyping
完全に理解した!