͓ ͢͠ Δ ͜ ͱ w ͳͥ#FUUFS+BWBͷઌͳͷ͔ʁ4DBMBΒ͠͞ͷԸܙͱ w ύλʔϯϚονͷύλʔϯΩϟετΛͳͯ҆͘͠શʹ w λϓϧΛආ͚Δͦͷࣈʹҙຯ͋Δ͔ʁ w 4DBMBͳྫ֎ॲཧޭɾࣦഊΛͱͯ͠දݱ͢Δ w DBTFDMBTTʹ੍Λ࣋ͨͤΔSFRVJSFͷར༻ w TFBMFEUSBJUͰཏੑΛ୲อ͢ΔίϯύΠϥʹ͓ئ͍
͓ ͢͠ Δ ͜ ͱ w ͳͥ#FUUFS+BWBͷઌͳͷ͔ʁ4DBMBΒ͠͞ͷԸܙͱ w ύλʔϯϚονͷύλʔϯΩϟετΛͳͯ҆͘͠શʹ w λϓϧΛආ͚Δͦͷࣈʹҙຯ͋Δ͔ʁ w 4DBMBͳྫ֎ॲཧޭɾࣦഊΛͱͯ͠දݱ͢Δ w DBTFDMBTTʹ੍Λ࣋ͨͤΔSFRVJSFͷར༻ w TFBMFEUSBJUͰཏੑΛ୲อ͢ΔίϯύΠϥʹ͓ئ͍ ˠ 4 D B M B Λ ֶ ͼ ࢝ Ί ͨ ࠒ ͷ ࣗ ʹ ɹ ڭ ͑ͯ ͋ ͛ ͨ ͍ ༰
1 def isBlank(str: String): Boolean = 2 Option(str).fold(true)(_.forall(Character.isWhitespace)) w ͘ಡΈ͘͢ w ذ͕গͳ͘ w ঢ়ଶΛؾʹ͢Δඞཁͳ͘ 4 D B M B Β ͠ ͍ ελ Πϧ
1 def isBlank(str: String): Boolean = 2 Option(str).fold(true)(_.forall(Character.isWhitespace)) w ͘ಡΈ͘͢ w ذ͕গͳ͘ w ঢ়ଶΛؾʹ͢Δඞཁͳ͘ 4 D B M B Β ͠ ͍ ελ Πϧ ☺ όάͷࠞೖͷՄೳੑ͕Լ͕Δ
ί ϯε τ ϥ Ϋ λύ λ ʔϯ 1 val user = User("Martin", Place("Tokyo", "Shibuya")) 2 3 user match { 4 case User(name, Place(pref, _)) => "$name in $pref" 5 case _ => 6 } 7 // => Martin lives in Tokyo!
ܕ ফ ڈ ʹ ҙ 1 def detectType(x: Any): String = x match { 2 case x: List[Int] => "This is List of Int!" 3 case _ => "What?" 4 } 5 6 detectType(List("string!")) // => This is List of Int!
ܕ ফ ڈ ʹ ҙ 1 def detectType(x: Any): String = x match { 2 case x: List[Int] => "This is List of Int!" 3 case _ => "What?" 4 } 5 6 detectType(List("string!")) // => This is List of Int! +BWBͱಉ༷ɺίϨΫγϣϯͷཁૉܕͷใ ࣮ߦ࣌ʹཧ͞Εͳ͍ ˞"SSBZΛআ͘
' B J M V S F ʹ ͳ Δ ͷ / P O ' B U B M ͳ ͷ • VirtualMachineError • ThreadDeath • InterruptedException • LinkageError • ControlThrowable 'BUBMͳΤϥʔɾྫ֎ͦͷ··εϩʔ͞ΕΔ
5S Z ͱ G P S ࣜ 1 // TryΛforࣜͰ߹͢Δ 2 val result = for { 3 result1 <- Try(someMethod) 4 result2 <- Try(anotherMethod) 5 } yield result1 + result2 6 7 result match { 8 case Success(result) => println(result) 9 case Failure(e) => println(s"Opps: ", e) 10 }
5S Z ͱ G P S ࣜ 1 // TryΛforࣜͰ߹͢Δ 2 val result = for { 3 result1 <- Try(someMethod) 4 result2 <- Try(anotherMethod) 5 } yield result1 + result2 6 7 result match { 8 case Success(result) => println(result) 9 case Failure(e) => println(s"Opps: ", e) 10 } ʮ"ͱ#͕྆ํޭͨ͠ͱ͖ͷΈ9͢Δʯ ͳͲ͕͔Γ͘͢දݱͰ͖Δ ☺
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 if(age < 0) throw new IllegalArgumentException("Age must be natural!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 if(age < 0) throw new IllegalArgumentException("Age must be natural!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T ࣄલ݅Ͱ͋Δ͜ͱΛ ͬͱ໌֬ʹ͍͑ͨ
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 require(age >= 0, "Age must be natural number!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T ࣄલ݅Λຬͨ͞ͳ͍߹ͷ Τϥʔϝοηʔδ
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 require(age >= 0, "Age must be natural number!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T 1 val joe = Person("Joe Cool", -2))
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 require(age >= 0, "Age must be natural number!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T 1 val joe = Person("Joe Cool", -2)) 2 // => java.lang.IllegalArgumentException: requirement failed: Age must be natural number!
1 case class Person( 2 name: String, 3 age: Int 4 ) { 5 require(age >= 0, "Age must be natural number!") 6 } ੍ Λ ͨ ͤ ͨ D B T F D M B T T &JUIFS5SZͱΈ߹ΘͤΔͱ͏Ε͍͠ ☺ 1 val joe = Person("Joe Cool", -2)) 2 // => java.lang.IllegalArgumentException: requirement failed: Age must be natural number!
Ϣ ʔ β ʔϓ ϥ ϯ Λ ύ λ ʔϯ Ϛ ο ν 1 case class User(name: String, age: Int) 2 3 trait Plan 4 case class Free(user: User) extends Plan // ແྉϓϥϯ 5 case class Premium(user: User) extends Plan // ϓϨϛΞϜϓϥϯ
Ϣ ʔ β ʔϓ ϥ ϯ Λ ύ λ ʔϯ Ϛ ο ν 1 case class User(name: String, age: Int) 2 3 trait Plan 4 case class Free(user: User) extends Plan // ແྉϓϥϯ 5 case class Premium(user: User) extends Plan // ϓϨϛΞϜϓϥϯ 6 7 val userA = Free(User("Taro", 23)) 8 val userB = Premium(User("Jiro", 25)) 9
ϓ ϥ ϯ Λ ૿ ͢ 1 case class User(name: String, age: Int) 2 3 trait Plan 4 case class Free(user: User) extends Plan 5 case class Premium(user: User) extends Plan
ϓ ϥ ϯ Λ ૿ ͢ 1 case class User(name: String, age: Int) 2 3 trait Plan 4 case class Free(user: User) extends Plan 5 case class Premium(user: User) extends Plan 6 case class Campaign(user: User) extends Plan 7 8 val userA = Free(User("Taro", 23)) 9 val userB = Premium(User("Jiro", 25)) 10 val userC = Campaign(User("Saburo", 28))
ϓ ϥ ϯ Λ ૿ ͢ 1 case class User(name: String, age: Int) 2 3 trait Plan 4 case class Free(user: User) extends Plan 5 case class Premium(user: User) extends Plan 6 case class Campaign(user: User) extends Plan 7 8 val userA = Free(User("Taro", 23)) 9 val userB = Premium(User("Jiro", 25)) 10 val userC = Campaign(User("Saburo", 28)) 11 12 Seq(userA, userB, userC) foreach { 13 case Free(User(name, _)) => println(s"Hi, $name.") 14 case Premium(User(name, _)) => println(s"Hello, $name!") 15 }
4 F B M F E म ০ ࢠ Ͱ ཏ ੑ Λ ୲ อ ͢ Δ 1 case class User(name: String, age: Int) 2 3 sealed trait Plan w ಉ͡ϑΝΠϧͰܧঝՄೳ w ผͷϑΝΠϧ͔ΒܧঝෆՄ ͜ͷϑΝΠϧͰఆٛ͞ΕͨͷҎ֎ʹ 1MBOଘࡏ͠ͳ͍͜ͱ͕อূ͞ΕΔ
4 F B M F E म ০ ࢠ Ͱ ཏ ੑ Λ ୲ อ ͢ Δ 1 case class User(name: String, age: Int) 2 3 sealed trait Plan 4 case class Free(user: User) extends Plan 5 case class Premium(user: User) extends Plan 6 case class Campaign(user: User) extends Plan 7 8 val userA = Free(User("Taro", 23)) 9 val userB = Premium(User("Jiro", 25)) 10 val userC = Campaign(User("Saburo", 28)) 11 12 Seq(userA, userB, userC) foreach { 13 case Free(User(name, _)) => println(s"Hi, $name.") 14 case Premium(User(name, _)) => println(s"Hello, $name!") 15 }
[warn] It would fail on the following input: Campaign(_) [warn] Seq(userA, userB, userC) foreach { [warn] ^ [warn] one warning found 4 F B M F E म ০ ࢠ Ͱ ཏ ੑ Λ ୲ อ ͢ Δ ίϯύΠϧ͢Δͱʜ ʮ$BNQBJHO͕དྷͨΒམͪΔͰʂʯͱ ίϯύΠϥ͕ڭ͑ͯ͘ΕΔ ☺
[warn] It would fail on the following input: Campaign(_) [warn] Seq(userA, userB, userC) foreach { [warn] ^ [warn] one warning found 4 F B M F E म ০ ࢠ Ͱ ཏ ੑ Λ ୲ อ ͢ Δ ίϯύΠϧ͢Δͱʜ ʮ$BNQBJHO͕དྷͨΒམͪΔͰʂʯͱ ίϯύΠϥ͕ڭ͑ͯ͘ΕΔ ☺ 8BSOJOHແࢹ͠ͳ͍ͰͶ ☺