SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
Scalaで型クラス入門
AMoAd 福原真
2015-11-06 Adtech Scala Meetup
(2015-12-20 外部公開用に改定)
株式会社サイバーエージェント
アドテクスタジオ
AMoAd所属
福原 真
@fukuo33
-2011/08 (主にJava)
SIer として 金融、物流、外食、通信 etc様々なプロジェクトに参加
2011/09- (C言語 + Scala)
某アドネットワークシステム サーバサイドエンジニア
2013/04- (Scala + Java)
株式会社AMoAd サーバサイドエンジニア
自己紹介
このスライドについて
CyberAgent Adtech Studio内で定期的に開催して
いる「Adtech Scala Meetup」向けのスライドで
す。
* 対象
ScalaでHello worldが書ける人
型クラスについて全く知らない人
関数型とか分かんないけど、手っ取り早く型クラスを何か理解し
たい人
このスライドについて
* 概要
まずHaskellベースで型クラスとは何かを説明します。
次にScalaでその型クラスをどう実現するのか説明し
ます。
なるべく初心者向けに簡単に説明する所存です!
このスライドについて
* 話すこと
型
型クラス
アドホック多相
* 話さないこと
型引数
型コンストラクタ
Kind
Monoid
Functor
Applicative
Monad
前置き
型とは?
一旦、オブジェクト指向のクラスを忘れて、型について思い出しましょう。
※ 用語: 型 と データ型 は同意
int i = 123;
char c = 'a';
C言語
Java
int i = 123;
boolean b = true;
// String s = "abc" // String is Class, not data type.
Haskell
Prelude> :t True
True :: Bool
赤枠が"型"です。※クラスではありません。
型における値の範囲
型には取りうる値の範囲が決まっています。
Java
int: -2147483648 .. 2147483647
boolean: true | false
Haskell
Prelude> :i Int
data Int = GHC.Types.I# GHC.Prim.Int#
Prelude> :i Bool
data Bool = False | True
型における値の範囲
Haskellではデータ型を自分で定義できます
(JavaのEnumっぽい?)
Haskell
Prelude> data TrafficLight = Red | Yellow | Green
Prelude> :t Red
Red :: TrafficLight
※ RedはTrafficLight型の "値" です。
型クラスとは?
型クラスとは?
型クラスは、何らかの振る舞いを定義するインターフェースです。
ある型クラスのインスタンスである型は、その型クラスが記述する振
る舞いを実装します。
by 「すごいHaskellたのしく学ぼう!」
* 「型クラスはインターフェースを定義してる」とは?
* 「型クラスのインスタンスである型」とは?
「型クラスのインスタンスである型」とは?
Prelude> 123 == 123
True
Prelude> 'a' == 'b'
False
Prelude> :t (==)
(==) :: Eq a => a -> a -> Bool
Eq は型クラスです。
a は型です。
Eq a => はa型はEq型クラスのインスタンスである必要がある制約です。
(==)関数は、引数にEq型クラスのインスタンスa型を2つとり、Bool型を返し
ます。
Javaのinterfaceに似てるかも?
Haskell
「型クラスのインスタンスである型」とは?
Prelude> :i Int
data Int = GHC.Types.I# GHC.Prim.Int# -- Defined in ‘GHC.Types’
..
instance Eq Int -- Defined in ‘GHC.Classes’
..
Prelude> :i Char
data Char = GHC.Types.C# GHC.Prim.Char# -- Defined in ‘GHC.Types’
..
instance Eq Char -- Defined in ‘GHC.Classes’
..
Int型も、Char型も、Eq型クラスのインスタンスで
す。
「型クラスはインターフェースを定義してる」とは?
Prelude> :i Eq
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not(x/=y)
x /= y = not(x==y)
== 関数 と /= 関数が実装すべき関数(インターフェース)です。
※ Eq型クラスはデフォルト実装が定義されているので、 (==)
を実装すれば最小完全定義を満たせる
「型クラスはインターフェースを定義してる」とは?
Prelude> :i TrafficLight
data TrafficLight = Red | Yellow | Green
Prelude> Red == Red
No instance for (Eq TrafficLight) arising from a use of ‘==’
Prelude> :set +m
Prelude> instance Eq TrafficLight where
Prelude| Red == Red = True
Prelude| Green == Green = True
Prelude| Yellow == Yellow = True
Prelude| _ == _ = False
Prelude|
Prelude> :i TrafficLight
data TrafficLight = Red | Yellow | Green
instance Eq TrafficLight
Prelude> Red == Red
True
自分で定義した型をEq型クラスのインスタンスにしてみる
↑この時点では (==) は使えない
←Eq型クラスのインスタンスにしたので
(==) が使えるようになった!
オブジェクト志向のクラスと何が違うのか?
オブジェクト指向言語(Java, Python, C++)でクラスといえば、何
らかの動作をするオブジェクトを作るための青写真のことです。
でも、Haskellのクラスは、データを作る道具ではありません。
そうではなく、まずデータ型を作り、それから「このデータには何がで
きるんだろう?」と考えるのです。
by 「すごいHaskellたのしく学ぼう!」
つまりdata型宣言時に"特徴"を与えるのではなく
アドホック(場当たり的)に型クラスのインスタンスであることを宣言する。
型クラスはアドホック多相(adhoc polymorphism)を実現していると言えます。
型クラスとは?
型クラスについて聞かれたら「あーアドホック多相
のことねー」と言っとけばなんとかなります!(多
分)
ここからはアドホック多相をScalaでどう実現する
のかを説明します!
多相
(Polymorphis
m)とは?
多相(Polymorphism)とは?
ポリモーフィズムあるいはポリモルフィズム(Polymorphism)と
は、プログラミング言語の型システムの性質を表すもので、プログ
ラミング言語の各要素(定数、変数、式、オブジェクト、関数、メ
ソッドなど)についてそれらが複数の型に属することを許すという
性質を指す。
by Wikipedia
アドホック多相にいく前に、多相覚えてますか?
多相(Polymorphism)とは?
普段、オブジェクト指向言語で使ってるのは
派生型多相(Subtype Polymorphism)
abstract class Animal {
def bark(): String
}
class Cat extends Animal {
def bark() = "にゃあ"
}
class Dog extends Animal {
def bark() = "わん"
}
val animal1 = new Cat()
val animal2 = new Dog()
animal1.bark // "にゃあ"
animal2.bark // "わん"
Scala
多相(Polymorphism)とは?
型パラメータを使うのは
パラメトリック多相(Parametric Polymorphism)
JavaではGenericsって呼ばれますね。
scala> def concat[A](l1: List[A], l2: List[A]) = l1 ++ l2
concat: [A](l1: List[A], l2: List[A])List[A]
scala> concat(List(1, 2, 3), List(4, 5, 6))
res0: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> concat(List("aa", "bb", "cc"), List("dd", "ee", "ff"))
res1: List[String] = List(aa, bb, cc, dd, ee, ff)
Scala
多相(Polymorphism)とは?
オーバーロードはポリモーフィズムの一種
※自信なしです。各自調べてください
class Clazz {
def foo() = "foo"
def foo(b: Boolean) = s"foo: $b"
def foo(s: String) = s"foo: $s"
}
val c = new Clazz()
c.foo() // "foo"
c.foo(true) // "foo: true"
c.foo("huga") // "foo: huga"
Scala
Scalaで
アドホック多
相を実現する
には?
Implicits
Implicit (暗黙の∼∼)は、Scalaで型クラスを実現する
ために導入されたらしい
Poor Man's Type Classs
Martin Odersky
http://lampwww.epfl.ch/~odersky/talks/wg2.8-
boston06.pdf
implicit conversion
暗黙の型変換を使って、アドホックに多相を実現する
scala> c.foo(123)
<console>:13: error: overloaded method value foo with alternatives:
(s: String)String <and>
(b: Boolean)String
cannot be applied to (Int)
c.foo(123)
^
scala> implicit def intToString(i: Int): String = i.toString
warning: there was one feature warning; re-run with -feature for details
intToString: (i: Int)String
scala> c.foo(123)
res8: String = foo: 123
Scala P22の続き
↑この時点ではClazz#foo(Int)は使えない
←暗黙の型変換を定義することによって、
Clazz#foo(Int)が使えるようになった!
implicit parameter
package sample.typeclass



trait Plus[A] {

def plus(a1: A, a2: A): A

}
暗黙のパラメータを使って、アドホックに多相を実現する
package sample



import sample.typeclass.Plus



package object implicits {

implicit object IntPlus extends Plus[Int] {

def plus(a1: Int, a2: Int) = a1 + a2

}

implicit object StringPlus extends Plus[String] {

def plus(a1: String, a2: String) = a1 + a2

}

}
package sample



import sample.typeclass.Plus



package object implicits2 {

implicit object IntPlus extends Plus[Int] {

def plus(a1: Int, a2: Int) = (a1 + a2) + (a1 + a2)

}

implicit object StringPlus extends Plus[String] {

def plus(a1: String, a2: String) = (a1 + a2) + (a1
+ a2)

}

}
sample/typeclass/Plus.scala
sample/implicits/package.scala sample/implicits2/package.scala
Haskellの例(P12)と比較すると
Plus[A] は型クラス。
IntPlus, StringPlus は型。
implicit object IntPlus extends Plus[Int] は、IntPlusは
Plus[A]型クラスのインスタンス。
implicit parameter
scala> import sample.typeclass.Plus
import sample.typeclass.Plus
scala> def plus[A: Plus](a1: A, a2: A)(implicit a: Plus[A]): A =
a.plus(a1, a2)
plus: [A](a1: A, a2: A)(implicit evidence$1:
sample.typeclass.Plus[A], implicit a: sample.typeclass.Plus[A])A
scala> plus(123, 200)
<console>:10: error: could not find implicit value for evidence
parameter of type sample.typeclass.Plus[Int]
plus(123, 200)
^
scala> import sample.implicits._
import sample.implicits._
scala> plus(123, 200)
res1: Int = 323
↓この時点では plus は使えない
← 型クラスインスタンスが定義されたパッケージを
importすることによって、plus()が使えるようになった!
implicit parameter
scala> import sample.implicits2._
import sample.implicits2._
scala> plus(123, 200)
res2: Int = 646
↑ Scalaではimportを切り替えることに
よって、実装が切り替えられる!
Scalaでアドホック多相を使う嬉しさ
よく言う話としては、ライブラリで定義されたfinal classをアドホック
多相にて拡張することができる。
サブタイプ多相のみでも解決できることは多いと思いますが、継承関係
には手を加えずテスト時のみ動作を変えるとか利点があると思います。
※ あとは各自調べて(汗)
開放/閉鎖原則(かいほうへいさげんそく。open/closed principle、OCP)
とは、オブジェクト指向プログラミングにおいて、クラス(およびその他のプ
ログラム単位)は
拡張に対して開いて (open) いなければならず、
修正に対して閉じて (closed) いなければならない
という設計上の原則である。
by Wikipedia
参考
主要な型クラスの紹介 @gakuzzz
https://gist.github.com/gakuzzzz/8d497609012863b3ea50
怖くない型クラス @kmizu
http://www.slideshare.net/kmizushima/ss-28707326
Scala の implicit parameter は型クラスの一種とはどういうことなのか
@nkgt_chkonk
http://nekogata.hatenablog.com/entry/2014/06/30/062342

Weitere ähnliche Inhalte

Was ist angesagt?

Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめtakezoe
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Scott Wlaschin
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 

Was ist angesagt? (20)

Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 

Andere mochten auch

こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラスKota Mizushima
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話Yasuyuki Maeda
 
Epps project revised
Epps project revisedEpps project revised
Epps project revisedjustmy40
 
Cooltur bea-e-giulia
Cooltur bea-e-giuliaCooltur bea-e-giulia
Cooltur bea-e-giuliaAlexandra St
 
Animasi pada-presentasi (1) call uhamka
Animasi pada-presentasi (1) call uhamkaAnimasi pada-presentasi (1) call uhamka
Animasi pada-presentasi (1) call uhamkapresident_natsir_ok
 
Epps project revised
Epps project revisedEpps project revised
Epps project revisedjustmy40
 
סולמות
סולמותסולמות
סולמותfirenc102
 
Swiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラスSwiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラスNobukazu Hanada
 
Javaから始めるscalaっぽい書き方
Javaから始めるscalaっぽい書き方Javaから始めるscalaっぽい書き方
Javaから始めるscalaっぽい書き方Kenji Doi
 
Programming haskell chapter10
Programming haskell chapter10Programming haskell chapter10
Programming haskell chapter10Kousuke Ruichi
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Scala lens: An introduction
Scala lens: An introductionScala lens: An introduction
Scala lens: An introductionKnoldus Inc.
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 

Andere mochten auch (20)

こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話
 
Epps project revised
Epps project revisedEpps project revised
Epps project revised
 
Cooltur bea-e-giulia
Cooltur bea-e-giuliaCooltur bea-e-giulia
Cooltur bea-e-giulia
 
Animasi pada-presentasi (1) call uhamka
Animasi pada-presentasi (1) call uhamkaAnimasi pada-presentasi (1) call uhamka
Animasi pada-presentasi (1) call uhamka
 
Orakom
OrakomOrakom
Orakom
 
Grammar book
Grammar bookGrammar book
Grammar book
 
Epps project revised
Epps project revisedEpps project revised
Epps project revised
 
Grammar book
Grammar bookGrammar book
Grammar book
 
סולמות
סולמותסולמות
סולמות
 
Pythonのすすめ
PythonのすすめPythonのすすめ
Pythonのすすめ
 
Swiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラスSwiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラス
 
Javaから始めるscalaっぽい書き方
Javaから始めるscalaっぽい書き方Javaから始めるscalaっぽい書き方
Javaから始めるscalaっぽい書き方
 
Programming haskell chapter10
Programming haskell chapter10Programming haskell chapter10
Programming haskell chapter10
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Scala lens: An introduction
Scala lens: An introductionScala lens: An introduction
Scala lens: An introduction
 
Scalaで実装するGC
Scalaで実装するGCScalaで実装するGC
Scalaで実装するGC
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Python3でwebアプリ
Python3でwebアプリPython3でwebアプリ
Python3でwebアプリ
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 

Ähnlich wie Scalaで型クラス入門

ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットTaisuke Oe
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行guest5f4320
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについてdekosuke
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2lyrical_logical
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!bitter_fox
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 

Ähnlich wie Scalaで型クラス入門 (20)

ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 

Kürzlich hochgeladen

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Kürzlich hochgeladen (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

Scalaで型クラス入門