SlideShare une entreprise Scribd logo
1  sur  16
LL 魂 Lightning Talk
Power of Scala
筑波大学大学院
水島 宏太
Scala ?
 最近ときどき言及される言語
 cf. Matz にっき (2006-04-04)
 Actor ライブラリなどで注目を集めている?
 静的型付けオブジェクト指向関数型言語
 ベースはオブジェクト指向言語
 処理系は JVM 上で動作
 近代的な言語仕様
紹介する Scala の機能
 Structural subtyping
 Case class + pattern matching
 Lazy value
 Implicit conversion(Views)
 Singleton type
 Generic type
 Regular expression pattern
 Existential Type
 Abstract Type
 Trait
Structural subtyping
 静的型でダックタイピング ( 相当 ) ができ
るよ!
 nominal VS. structural
 2.6.0-RC1 で導入
def putsName(x :{ def name :String }) = println(x.name)
object Foo { def name = "Foo" }
object Bar { def name = "Bar" }
var x = List[{def name :String}](Foo, Bar)
for(p <- x) putsName(p)
 Foo
Bar
Case class + pattern matching
 関数型言語でおなじみ
 case class で使用するデータ構造を定義
 match 構文で pattern match を行う
abstract class Term
case class Num(x :int) extends Term
case class Plus(l :Term, r :Term) extends Term
...
Plus(Num(100), Num(200)) match {
case Num(a) => ...
case Plus(l, r) => println(l, r)
}  (Num(100),Num(200))
Lazy value
 遅延評価を簡単に実現するための機構
 2.6.0-RC1 で導入
lazy val hello = { println("Hello"); "" }
hello  Hello
hello  何も表示されない
 2.6.0-RC1 時点では buggy っぽいので注
意
 以下のコードで対話環境が落ちる
scala> lazy val hello = println("Hello")
 Exception in thread "main" ...
Implicit conversion(Views)
 ユーザが暗黙の型変換を定義可能
 定義した変換はコンパイラの型チェックをパ
スする
 標準でいくつかの暗黙の変換が定義
 int から long, int から double など
implicit def i2s(i :int) = i.toString
println(321.substring(1))  21
 用法・用量をよく守ってお使いください
 こんなことをしてはいけません
implicit def s2i(s :String) = Integer.parseInt(s)
var i :int = "hoge"
 java.lang.NumberFormatException: For input string: "hoge"
Singleton type
 特定のインスタンスを参照していることを
保証
 「自分自身」 (this) を返す型などが作れる
 カスケード呼び出しをするときなどに役立
つ
class Super {
def putsSuper() :this.type = { print("Super"); this }
}
class Sub extends Super {
def putsSub() :this.type = { println("Sub"); this }
}
...
new Sub().printSuper.printSub  SuperSub
Generic type
 Java generics と仕様は類似
 実は GJ の人 =Scala の人
class Stack[T] {
def push(e :T) = ...
def pop = ...
...
}
...
val s = new Stack[String]
s push "Foo"
println(s pop)  Foo
Regular expression pattern
 現在は限定的なサポート
 Sequence のパターンマッチで末尾に任意個
の要素が来る場合を扱える
var x = Array("Foo", "Bar", "Baz")
x match { case Array("Foo", _ )* => println("Foo") }
 これを書いたらエラーメッセージ が表示され
た orz
x match {
case Array("Foo", _ , "Baz") => println("Foo")*
}
 regular expressions not yet implemented
Existential type
 generic な型同士にサブタイプを導入でき
る
 Array[String] は Array[Any] のサブタイプ
ではない
var x:Array[T forSome {type T <: Any}] = Array("A", "B")
x = Array(1, 2)  OK!
x(0) + x(1)  error: type mismatch;
 Java Generics にも同等の機能が存在
 ワイルドカード
Abstract type
 型や値を未定義の抽象的な型を定義できる
abstract class Cell {
type T; val value :T
}
 未定義の実装を与えることでインスタンス
化
val cell = new Cell { type T = int ; val value = 100 }
println(cell.value)  100
 Family polymorphism を実現できる
 「クラスの集まり」を継承できる機能 ( 語弊
あり )
 まともな説明は Scala のドキュメントを参照
Trait
 Ruby のモジュールみたいなもの
 多重継承可能かつインスタンス化不可
trait Comparable[T <: Comparable[T]] {
def compareTo(o :T) :int
def <(o :T) = compareTo(o) < 0 ...
}
class Person(n :String) ... with Comparable[String] {
def name = n
override def compareTo(o :T) = n compareTo o.name
}
val bar = new Person("Bar"); val foo = new Person("Foo")
println(foo < bar)  false
まとめ
 Structural subtyping
 Case class + pattern matching
 Lazy value
 Implicit conversion(Views)
 Singleton type
 Generic type
 Regular expression pattern
 Existential Type
 Abstract Type
 Trait
Scala サイ
コー
参考資料
 公式 Web ページ
 http://www.scala-lang.org/
 置いてあるドキュメントを読めば大体の機能はわ
かる
 ただし最新の機能に追従できてない場合あり
 最新機能は処理系に付属の pdf 読んだ方がいいかも
ちょっと宣伝
 プログラミング言語 Onion 作ってます
 http://www.onion-lang.org/ で公開中
 JVM で動作する静的型付けオブジェクト指向
言語
 絶賛開発停滞中
 少しずつ ( 本当に少しずつ ) 開発進めてます
 次のバージョンをリリースできるのはいつの
日か

Contenu connexe

Tendances

Material
MaterialMaterial
Material_TUNE_
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in iemaeken2010
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話bleis tift
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)parrotstudio
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2Kenta Hattori
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたblackenedgold
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLispKent Ohashi
 

Tendances (20)

Material
MaterialMaterial
Material
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2
 
Haxeについて
HaxeについてHaxeについて
Haxeについて
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 

Similaire à Power of Scala

BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎tetsu6
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章Yuta Yokoi
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】株式会社ランチェスター
 
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字ynupc
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)Takashi Ishio
 
第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪Naoki Kitora
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)Masahiro Hayashi
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 
Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Eugene Yokota
 
2013-12-08 西区プログラム勉強会
2013-12-08 西区プログラム勉強会2013-12-08 西区プログラム勉強会
2013-12-08 西区プログラム勉強会Takatoshi Murakami
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
Rubyインスタンス変数
Rubyインスタンス変数Rubyインスタンス変数
Rubyインスタンス変数Masayuki Nishida
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 

Similaire à Power of Scala (20)

BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Haxe
HaxeHaxe
Haxe
 
Scala東北紹介
Scala東北紹介Scala東北紹介
Scala東北紹介
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
 
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)
 
第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)
 
2013-12-08 西区プログラム勉強会
2013-12-08 西区プログラム勉強会2013-12-08 西区プログラム勉強会
2013-12-08 西区プログラム勉強会
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Rubyインスタンス変数
Rubyインスタンス変数Rubyインスタンス変数
Rubyインスタンス変数
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 

Plus de Kota Mizushima

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状Kota Mizushima
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Kota Mizushima
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning TipsKota Mizushima
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラスKota Mizushima
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingKota Mizushima
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesKota Mizushima
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足Kota Mizushima
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 

Plus de Kota Mizushima (20)

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
kollectionの紹介
kollectionの紹介kollectionの紹介
kollectionの紹介
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
 
Macros in nemerle
Macros in nemerleMacros in nemerle
Macros in nemerle
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning Tips
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful libraries
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
Scalaz
ScalazScalaz
Scalaz
 

Dernier

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Dernier (8)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

Power of Scala

  • 1. LL 魂 Lightning Talk Power of Scala 筑波大学大学院 水島 宏太
  • 2. Scala ?  最近ときどき言及される言語  cf. Matz にっき (2006-04-04)  Actor ライブラリなどで注目を集めている?  静的型付けオブジェクト指向関数型言語  ベースはオブジェクト指向言語  処理系は JVM 上で動作  近代的な言語仕様
  • 3. 紹介する Scala の機能  Structural subtyping  Case class + pattern matching  Lazy value  Implicit conversion(Views)  Singleton type  Generic type  Regular expression pattern  Existential Type  Abstract Type  Trait
  • 4. Structural subtyping  静的型でダックタイピング ( 相当 ) ができ るよ!  nominal VS. structural  2.6.0-RC1 で導入 def putsName(x :{ def name :String }) = println(x.name) object Foo { def name = "Foo" } object Bar { def name = "Bar" } var x = List[{def name :String}](Foo, Bar) for(p <- x) putsName(p)  Foo Bar
  • 5. Case class + pattern matching  関数型言語でおなじみ  case class で使用するデータ構造を定義  match 構文で pattern match を行う abstract class Term case class Num(x :int) extends Term case class Plus(l :Term, r :Term) extends Term ... Plus(Num(100), Num(200)) match { case Num(a) => ... case Plus(l, r) => println(l, r) }  (Num(100),Num(200))
  • 6. Lazy value  遅延評価を簡単に実現するための機構  2.6.0-RC1 で導入 lazy val hello = { println("Hello"); "" } hello  Hello hello  何も表示されない  2.6.0-RC1 時点では buggy っぽいので注 意  以下のコードで対話環境が落ちる scala> lazy val hello = println("Hello")  Exception in thread "main" ...
  • 7. Implicit conversion(Views)  ユーザが暗黙の型変換を定義可能  定義した変換はコンパイラの型チェックをパ スする  標準でいくつかの暗黙の変換が定義  int から long, int から double など implicit def i2s(i :int) = i.toString println(321.substring(1))  21  用法・用量をよく守ってお使いください  こんなことをしてはいけません implicit def s2i(s :String) = Integer.parseInt(s) var i :int = "hoge"  java.lang.NumberFormatException: For input string: "hoge"
  • 8. Singleton type  特定のインスタンスを参照していることを 保証  「自分自身」 (this) を返す型などが作れる  カスケード呼び出しをするときなどに役立 つ class Super { def putsSuper() :this.type = { print("Super"); this } } class Sub extends Super { def putsSub() :this.type = { println("Sub"); this } } ... new Sub().printSuper.printSub  SuperSub
  • 9. Generic type  Java generics と仕様は類似  実は GJ の人 =Scala の人 class Stack[T] { def push(e :T) = ... def pop = ... ... } ... val s = new Stack[String] s push "Foo" println(s pop)  Foo
  • 10. Regular expression pattern  現在は限定的なサポート  Sequence のパターンマッチで末尾に任意個 の要素が来る場合を扱える var x = Array("Foo", "Bar", "Baz") x match { case Array("Foo", _ )* => println("Foo") }  これを書いたらエラーメッセージ が表示され た orz x match { case Array("Foo", _ , "Baz") => println("Foo")* }  regular expressions not yet implemented
  • 11. Existential type  generic な型同士にサブタイプを導入でき る  Array[String] は Array[Any] のサブタイプ ではない var x:Array[T forSome {type T <: Any}] = Array("A", "B") x = Array(1, 2)  OK! x(0) + x(1)  error: type mismatch;  Java Generics にも同等の機能が存在  ワイルドカード
  • 12. Abstract type  型や値を未定義の抽象的な型を定義できる abstract class Cell { type T; val value :T }  未定義の実装を与えることでインスタンス 化 val cell = new Cell { type T = int ; val value = 100 } println(cell.value)  100  Family polymorphism を実現できる  「クラスの集まり」を継承できる機能 ( 語弊 あり )  まともな説明は Scala のドキュメントを参照
  • 13. Trait  Ruby のモジュールみたいなもの  多重継承可能かつインスタンス化不可 trait Comparable[T <: Comparable[T]] { def compareTo(o :T) :int def <(o :T) = compareTo(o) < 0 ... } class Person(n :String) ... with Comparable[String] { def name = n override def compareTo(o :T) = n compareTo o.name } val bar = new Person("Bar"); val foo = new Person("Foo") println(foo < bar)  false
  • 14. まとめ  Structural subtyping  Case class + pattern matching  Lazy value  Implicit conversion(Views)  Singleton type  Generic type  Regular expression pattern  Existential Type  Abstract Type  Trait Scala サイ コー
  • 15. 参考資料  公式 Web ページ  http://www.scala-lang.org/  置いてあるドキュメントを読めば大体の機能はわ かる  ただし最新の機能に追従できてない場合あり  最新機能は処理系に付属の pdf 読んだ方がいいかも
  • 16. ちょっと宣伝  プログラミング言語 Onion 作ってます  http://www.onion-lang.org/ で公開中  JVM で動作する静的型付けオブジェクト指向 言語  絶賛開発停滞中  少しずつ ( 本当に少しずつ ) 開発進めてます  次のバージョンをリリースできるのはいつの 日か