SlideShare a Scribd company logo
1 of 16
Download to read offline
初心者向けScala勉強会
Trait
2015/02/10
!
Shuya Tsukamoto
Trait
• trait

【名】特徴、特質
• 出自

Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, and Andrew P. Black. Traits:
Composable Units of Behavior. Technical Report -2, Institut für Informatik, Universität Bern,
Switzerland, November 2002
• メソッド、フィールドの定義をまとめたもの
基本構文
!
!
• trait <トレイト名> {

// field, method

}
trait TraitA {
def printData():Unit
}
使い方
trait TraitA {
def printData():Unit
}
!
object Main extends TraitA {
def main(args: Array[String]):Unit = {
println("Main start.")
printData()
println("Main end.")
}
!
override def printData(): Unit = println("traitA")
}
使い方
trait TraitA {
def printData():Unit
}
!
object Main extends TraitA {
def main(args: Array[String]):Unit = {
println("Main start.")
printData()
println("Main end.")
}
!
override def printData(): Unit = println("traitA")
}
1. extendsする
2. 未定義のメンバは定義する
2つ以上の場合
object Main extends TraitA with TraitB {
!
• withで繋げる
• TraitAもtraitだけど、これはextends

最低1つ「extends」が必要
デフォルト実装
!
!
• mixinした側で定義する必要なし
trait TraitA {
def printData(): Unit = println("traitA")
}
field定義
!
!
• fieldも定義可能
trait TraitA {
val appName:String = "my-application"
}
インスタンス生成時にmixin
trait TraitA {
val appName: String = "my-application"
}
!
class Foo
!
object Main {
def main(args: Array[String]): Unit = {
println("Main start.")
!
val foo = new Foo with TraitA
println(foo.appName)
!
println("Main end.")
}
}
コンストラクタは左から
trait TraitA { println("constructor traitA") }
trait TraitB { println("constructor traitB") }
class SuperFoo { println("constructor foo") }
class SubBar extends SuperFoo { println("constructor bar") }
!
class Hoge extends SubBar with TraitA with TraitB
!
object Main {
def main(args: Array[String]): Unit = {
println("Main start.")
val hoge = new Hoge
println("Main end.")
}
} // start, foo, bar, traitA, traitB, end
traitの順番
!
!
!
• もしもHogeよりも上位であるSuperFooで既にwith
されていたら?
trait TraitA { println("constructor traitA") }
trait TraitB { println("constructor traitB") }
class SuperFoo { println("constructor foo") }
class SubBar extends SuperFoo with TraitA with TraitB
{ println("constructor bar") }
!
class Hoge extends SubBar with TraitA with TraitB
traitの順番
• Main start.

constructor foo

constructor traitA

constructor traitB

constructor bar

Main end.
• barの後で初期化は走らず
traitの処理変更
trait Sort {
def sort(seq: Seq[Long]) = seq.sortWith(_ < _)
}
trait ReverseSortStrategy extends Sort {
override def sort(seq: Seq[Long]) = seq.sortWith(_ > _)
}
!
class Foo extends Sort
object Main extends App {
val numbers = Seq[Long](5, 2, 8)
val foo = new Foo
println(foo.sort(numbers)) //2,5,8
val foo2 = new Foo with ReverseSortStrategy
println(foo2.sort(numbers)) //8,5,2
}
traitの処理変更
• withの有無で処理が変わる
traitの処理変更
trait Sort {
def sort(seq: Seq[Long]) = seq.sortWith(_ < _)
}
trait ReverseSortStrategy extends Sort {
override def sort(seq: Seq[Long]) = seq.sortWith(_ > _)
}
trait BugSortStrategy extends Sort {
override def sort(seq: Seq[Long]) = seq.map(_ * 100)
}
class Foo extends Sort
object Main extends App {
val numbers = Seq[Long](5, 2, 8)
val foo = new Foo with ReverseSortStrategy with
BugSortStrategy
println(foo.sort(numbers)) //500,200,800
}
traitの処理変更
• withの有無で処理が変わる
• constructorは左から、でも処理は右から

(左から定義されていって最終的に右のもので
overrideされた)

More Related Content

Viewers also liked

Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Shuya Tsukamoto
 
Automotive business-intelligence software - webinar slides
Automotive business-intelligence software - webinar slidesAutomotive business-intelligence software - webinar slides
Automotive business-intelligence software - webinar slidesPhocas Software
 
Apache hadoop yarn 勉強会 8. capacity scheduler in yarn
Apache hadoop yarn 勉強会 8. capacity scheduler in yarnApache hadoop yarn 勉強会 8. capacity scheduler in yarn
Apache hadoop yarn 勉強会 8. capacity scheduler in yarnShuya Tsukamoto
 
11 loại thực phẩm giết chết trí thông minh
11 loại thực phẩm giết chết trí thông minh11 loại thực phẩm giết chết trí thông minh
11 loại thực phẩm giết chết trí thông minhsjFHSIwhJyHK505
 
AdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canAdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canShuya Tsukamoto
 
The Present - the History of Business Intelligence
The Present - the History of Business IntelligenceThe Present - the History of Business Intelligence
The Present - the History of Business IntelligencePhocas Software
 
The Past - the History of Business Intelligence
The Past - the History of Business IntelligenceThe Past - the History of Business Intelligence
The Past - the History of Business IntelligencePhocas Software
 
The future of business intelligence
The future of business intelligence The future of business intelligence
The future of business intelligence Phocas Software
 

Viewers also liked (10)

bean-validation-scala
bean-validation-scalabean-validation-scala
bean-validation-scala
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
 
Automotive business-intelligence software - webinar slides
Automotive business-intelligence software - webinar slidesAutomotive business-intelligence software - webinar slides
Automotive business-intelligence software - webinar slides
 
Apache hadoop yarn 勉強会 8. capacity scheduler in yarn
Apache hadoop yarn 勉強会 8. capacity scheduler in yarnApache hadoop yarn 勉強会 8. capacity scheduler in yarn
Apache hadoop yarn 勉強会 8. capacity scheduler in yarn
 
11 loại thực phẩm giết chết trí thông minh
11 loại thực phẩm giết chết trí thông minh11 loại thực phẩm giết chết trí thông minh
11 loại thực phẩm giết chết trí thông minh
 
AdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canAdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-can
 
Kamonを理解する
Kamonを理解するKamonを理解する
Kamonを理解する
 
The Present - the History of Business Intelligence
The Present - the History of Business IntelligenceThe Present - the History of Business Intelligence
The Present - the History of Business Intelligence
 
The Past - the History of Business Intelligence
The Past - the History of Business IntelligenceThe Past - the History of Business Intelligence
The Past - the History of Business Intelligence
 
The future of business intelligence
The future of business intelligence The future of business intelligence
The future of business intelligence
 

Similar to Scala勉強会 2015 02_03

速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」SAKAUE, Tatsuya
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twmYuta Kashino
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdfTakuya Kubo
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swiftnecocen
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日Go Tanaka
 
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
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターsohta
 
CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011Shuyo Nakatani
 

Similar to Scala勉強会 2015 02_03 (20)

Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
Project lambda
Project lambdaProject lambda
Project lambda
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twm
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdf
 
Boost tour 1_44_0
Boost tour 1_44_0Boost tour 1_44_0
Boost tour 1_44_0
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
講座Java入門
講座Java入門講座Java入門
講座Java入門
 
CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 

Scala勉強会 2015 02_03