Your SlideShare is downloading. ×
0
DDD + Scala        (@j5ik2o)
DDD   , Scala       , DSL   ,    ...DDD             2     (4,5,6 )@j5ik2o
agendaScala    DDD Scala DDD + Scala                        DSL JavaBeans
Scala
ScalaScala    .scala   .class    Java
Scala vs Java  Money            Scala                 }                                         public BigDecimal getAmoun...
Hello, World!!object HelloWorld{    def main(args: Array[String]):Unit = {        println(“Hello, World!!”)    }}
valscala> val name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> name = "JUNICHI KATO"<console>:6: error: re...
varscala> var name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> name = "JUNICHI KATO"name: java.lang.String...
typescala> val name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> val name:String = "Junichi Kato"name: Stri...
methoddef add(a:Int, b:Int):Int = {    return a + b}def add(a:Int, b:Int):Int = a + bdef add(a:Int, b:Int) = a + bhoge.add...
if & forifval a = 10val ret = if (a % 2 == 0) true else falseval ret = if (a % 2 == 0) { println(“     ”); true }else { pr...
classclass PersonName(fn: String, ln: String){    require(fn.length > 0) //           IAE    require(ln.length > 0) //    ...
classclass PersonName(val firstName:String, vallastName: String){require(firstName.length > 0)require(lastName.length > 0)de...
classval pn = new PersonName(“Junichi”, “Kato”)println(pn.fullName)val pn2 = new PersonName(“”, “Kato”) / IAE             ...
objectobject EmployeeDao {    val DEFAULT_NAME = ...    def findAll = ...}val result = EmployeeDao.findAllval defaultName = ...
{               ,                }class Money(val amount:BigDecimal, val currency: Currency) ...object Money {    val JPY ...
matchdef numberMatch(n:Int) = n match {    case 1 => “one”    case 2 | 3 => “t wo or three”    case _ => “other”}println(n...
matchval pattern = """([a-z]+)""".r               case Array(1,2,3) => println(“def matchTest(word: Any) = word           ...
(a:Int) => a * aval square: (Int) => Int = (a:Int) => a * aval square = (a:Int) => a * aval result = square(2) / 4        ...
object MyMath {  def add(a:Int, b:Int) = a + b}val f1 = MyMath.add _val f2: (Int,Int) => Int = MyMath.add
Collectionval il1 = List(1,2,3)val il2 = list :+ 4 / 1,2,3,4                     /val im1 = Map(1 -> “ 2 -> “b”, 3 -> “c”)...
Collectionval numbers = List(1,2,3,45)numbers.foreach((n:Int) => println(n) ) / (1)                                       ...
Collectionval evens = numbers.filter(_ % 2 == 0) //numbersval list = List(1,2,3).map(_ * 2) / 2,4,6                        ...
CollectionRange         ( (Seq)                     )val range = 1 to 10; range.foreach(println)for(i <- 1 to 10 by 2) pri...
traittrait Greeting { def greet:Unit }class JapaneseGreeting extends Greeting { def greet = println(“            ”)}class ...
DDD + Scala
Domain Object &   Lifecycle
Entitytrait Entity {    val id: String //               OK    def equals(other: Any) = other match {        case that: Ent...
Entityclass Employee(val id: String, val name:String)extends Entityval kato1 = new Employee(“1”, “Junichi Kato”)val kato2 ...
Entity with Factoryclass Employee         object Employee{(val id:String,         def apply(id:String,                    ...
Entity with Factoryval kato = Employee(“KATO”,Department(“DEV”))
Value Object with Factoryclass Money                         override def toString =                                   "Mo...
Value Object with FactoryVOassert(Money(100, Money.JPY) == Money(100, Money.JPY))assert(Money(100, Money.JPY) != Money(105...
Value Object(case class)case class Money(amount: BigDecimal, currency:Currency)     apply, unapply                        ...
ValueObject Buildercase class PersonName(firstName: String, lastName:String)class PersonNameBuilder extendsValueObjectBuidl...
Serviceobject TransferSer vice { def transfer(money: Money,from:BankAccount, to:BankAccount) =    to.push(from.pull(money)...
Aggregateclass Employee(val id:String, var name:String, var dept:Department) extends Entity  Employee                     ...
Aggregate          Department (               )class Employee(val id:String, var name:String, var dept:Department) extends...
Aggregate(Cloneable)@cloneable                                          }class Department(val id: String, var name:       ...
Aggregate(clone)clone     Mix-in@cloneabletrait EntityCloneable[T <: Entity] {    this: Entity =>    override def clone: T...
Aggregate(clone)class Employee (val id: String, var name: String)  extends Entity withEntityCloneable[Employee]val emp = E...
Aggregate(Factory)                   Factoryobject Department {    def apply(dept: Department) =     new Department(dept, ...
Repositorytrait EntityResolver[T <: Entity] extends Iterable[T]{    def resolve(id: String): T    def apply(id: String) = ...
Repositoryclass EmployeeResolver extends   val er = new EmployeeResolverEntityResolver[Employee] {                        ...
Repositorytrait Repository[T <: Entity] extendsEntityResolver[T] {    def store(entity: T) def update(identifier: Identifier...
Repositoryclass EmployeeRepository           / resolve, iterator ...                                    /extendsRepository...
(         )=id(4a74c322-08ab-450b-b674-793e1d7f399a) = classDepartment {    package = dept    fields {        name = java.l...
package dept;public class Department {    private java.lang.String name;    public void setName(java.lang.String name){   ...
(.ftl)<#if classMeta.getPackageName()??>            <#assign getter = "is"/>package ${classMeta.getPackageName()};        ...
codegen -hcodegen -c sample.config -t template -e exportcodegen -c [4a74c322-08ab-450b-b674-793e1d7f399a]@sample.config -tte...
ClassMeta              FieldMeta          CodeGenSer viceFactory          ClassMetaRepository
ClassMeta Entitypackage codegen.domainclass ClassMeta(@BeanProperty val identifier: Identifier, @BeanProperty val name:Strin...
ClassMeta Objectobject ClassMeta { def apply(identifier: Identifier, name: String, packageName: Option[String],fieldMetas: Li...
FieldMeta VO & VO Factorycase class FieldMeta(@BeanProperty name:String, @BeanProperty typeName: String)
ClassMetaRepositorypackage codegen.domainclass ClassMetaRepository(configSource: BufferedSource)extends EntityResolver[Clas...
CodeGenSer vicepackage codegen.domain                                   val exportClassDir =                              ...
Applicationpackage codegen.application                               getExportDir(parameters),object Application extends L...
Application private def generate(configFile: File,                   CodeGenSer vice.generate(exportDir, templateDir,      ...
ddd+scala
Upcoming SlideShare
Loading in...5
×

ddd+scala

3,264

Published on

DDDをScalaでどうやって実装していくかという話題。前半はScalaの適当な紹介と、その後にDDDのビルディングブロックをScalaコード上に反映するにはどうするかって話です。残りのサンプルは時間がなくて説明していません。すみません。

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,264
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
29
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide
  • &amp;#x672C;&amp;#x65E5;&amp;#x306F;&amp;#x4F11;&amp;#x65E5;&amp;#x306B;&amp;#x3082;&amp;#x95A2;&amp;#x308F;&amp;#x3089;&amp;#x305A;&amp;#x8DB3;&amp;#x3092;&amp;#x904B;&amp;#x3093;&amp;#x3067;&amp;#x3044;&amp;#x305F;&amp;#x3060;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x3042;&amp;#x308A;&amp;#x304C;&amp;#x3068;&amp;#x3046;&amp;#x3054;&amp;#x3056;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x967D;&amp;#x3068;&amp;#x9670;&amp;#x306E;&amp;#x3001;&amp;#x9670;&amp;#x306E;&amp;#x62C5;&amp;#x5F53;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x30DE;&amp;#x30CB;&amp;#x30A2;&amp;#x30C3;&amp;#x30AF;&amp;#x306B;Scala&amp;#x3067;DDD&amp;#x3092;&amp;#x3084;&amp;#x308B;&amp;#x306B;&amp;#x306F;&amp;#x3069;&amp;#x3046;&amp;#x3059;&amp;#x308B;&amp;#x304B;&amp;#x3063;&amp;#x3066;&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x3067;&amp;#x3044;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • DDD&amp;#x7FFB;&amp;#x8A33;&amp;#x7248;&amp;#x306E;&amp;#x51FA;&amp;#x7248;&amp;#x304A;&amp;#x3081;&amp;#x3067;&amp;#x3068;&amp;#x3046;&amp;#x3054;&amp;#x3056;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x6628;&amp;#x5E74;&amp;#x306E;DevLOVE&amp;#x3067;&amp;#x548C;&amp;#x7530;&amp;#x3055;&amp;#x3093;&amp;#x306B;&amp;#x304A;&amp;#x9858;&amp;#x3044;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x548C;&amp;#x667A;&amp;#x3055;&amp;#x3093;&amp;#x3092;&amp;#x7D39;&amp;#x4ECB;&amp;#x3057;&amp;#x3066;&amp;#x8CB0;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x79C1;&amp;#x3068;&amp;#x96A3;&amp;#x3067;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x90FD;&amp;#x5143;&amp;#x3055;&amp;#x3093;&amp;#x3067;2&amp;#x90E8;(4,5,6&amp;#x7AE0;)&amp;#x306E;&amp;#x30EC;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x3092;&amp;#x62C5;&amp;#x5F53;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n
  • Scala&amp;#x3067;DDD&amp;#x3092;&amp;#x3084;&amp;#x308B;&amp;#x306B;&amp;#x306F;&amp;#x3069;&amp;#x3046;&amp;#x3057;&amp;#x305F;&amp;#x3089;&amp;#x3088;&amp;#x3044;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x3067;&amp;#x8A71;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305A;&amp;#x306F;&amp;#x3001;&amp;#x307F;&amp;#x306A;&amp;#x3055;&amp;#x3093;Java&amp;#x304C;&amp;#x308F;&amp;#x304B;&amp;#x308B;&amp;#x524D;&amp;#x63D0;&amp;#x3067;Scala&amp;#x65E9;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3067;&amp;#x3056;&amp;#x3063;&amp;#x304F;&amp;#x308A;&amp;#x3068;&amp;#x89E3;&amp;#x8AAC;&amp;#x3002;\n&amp;#x305D;&amp;#x306E;&amp;#x5F8C;&amp;#x3001;DDD+Scala&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x4E3B;&amp;#x306B;DDD&amp;#x306E;2&amp;#x90E8;&amp;#x306E;&amp;#x8A71;&amp;#x3092;&amp;#x4E2D;&amp;#x5FC3;&amp;#x306B;Scala&amp;#x3067;&amp;#x3069;&amp;#x3046;&amp;#x5B9F;&amp;#x8DF5;&amp;#x3059;&amp;#x308B;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x3067;&amp;#x8A71;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • Scala&amp;#x65E9;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3002;&amp;#x7406;&amp;#x5C48;&amp;#x306F;&amp;#x305D;&amp;#x3053;&amp;#x305D;&amp;#x3053;&amp;#x306B;&amp;#x3001;&amp;#x3056;&amp;#x3063;&amp;#x304F;&amp;#x308A;&amp;#x3068;&amp;#x3069;&amp;#x3093;&amp;#x306A;&amp;#x611F;&amp;#x3058;&amp;#x3067;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x66F8;&amp;#x3051;&amp;#x3070;&amp;#x3088;&amp;#x3044;&amp;#x304B;&amp;#x52D8;&amp;#x6240;&amp;#x3092;&amp;#x7D39;&amp;#x4ECB;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6700;&amp;#x8FD1;&amp;#x6D41;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;Scala&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x4ECA;&amp;#x79C1;&amp;#x3082;&amp;#x65E5;&amp;#x7D4C;&amp;#x30BD;&amp;#x30D5;&amp;#x30C8;&amp;#x30A6;&amp;#x30A8;&amp;#x30A2;&amp;#x3067;Scala&amp;#x306E;&amp;#x7279;&amp;#x96C6;&amp;#x8A18;&amp;#x4E8B;&amp;#x3082;&amp;#x66F8;&amp;#x3044;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3050;&amp;#x3089;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x304B;&amp;#x3089;&amp;#x3001;&amp;#x6CE8;&amp;#x76EE;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x8A00;&amp;#x8A9E;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6CE8;&amp;#x76EE;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x7406;&amp;#x7531;&amp;#x306F;&amp;#x3044;&amp;#x308D;&amp;#x3044;&amp;#x308D;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;,Scala&amp;#x306F;&amp;#x3001;&amp;#x95A2;&amp;#x6570;&amp;#x578B;&amp;#x8A00;&amp;#x8A9E;&amp;#x306E;&amp;#x6A5F;&amp;#x80FD;&amp;#x3092;&amp;#x53D6;&amp;#x308A;&amp;#x8FBC;&amp;#x3080;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x7C21;&amp;#x6F54;&amp;#x3067;&amp;#x660E;&amp;#x77AD;&amp;#x306A;&amp;#x30B3;&amp;#x30FC;&amp;#x30C7;&amp;#x30A3;&amp;#x30F3;&amp;#x30B0;&amp;#x3001;&amp;#x8A00;&amp;#x8A9E;&amp;#x81EA;&amp;#x4F53;&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x6027;&amp;#x3001;&amp;#x30D0;&amp;#x30B0;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x8FBC;&amp;#x307F;&amp;#x306B;&amp;#x304F;&amp;#x3044;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x30B9;&amp;#x30BF;&amp;#x30A4;&amp;#x30EB;&amp;#x3001;&amp;#x4E26;&amp;#x884C;&amp;#x51E6;&amp;#x7406;&amp;#x5411;&amp;#x304D;&amp;#x306A;&amp;#x3069;&amp;#x3001;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x6307;&amp;#x5411;&amp;#x3068;&amp;#x306F;&amp;#x7570;&amp;#x306A;&amp;#x308B;&amp;#x7279;&amp;#x5FB4;&amp;#x3092;&amp;#x6301;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3042;&amp;#x307E;&amp;#x308A;&amp;#x8A73;&amp;#x3057;&amp;#x304F;&amp;#x8AAC;&amp;#x660E;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3053;&amp;#x308C;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x7D42;&amp;#x308F;&amp;#x3063;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3046;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x30BB;&amp;#x30C3;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x5FC5;&amp;#x8981;&amp;#x6700;&amp;#x4F4E;&amp;#x9650;&amp;#x306E;&amp;#x77E5;&amp;#x8B58;&amp;#x3060;&amp;#x3051;&amp;#x3092;&amp;#x3044;&amp;#x308C;&amp;#x3066;Scala&amp;#x3068;DDD&amp;#x3092;&amp;#x8003;&amp;#x3048;&amp;#x3066;&amp;#x307F;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;\n
  • &amp;#x304A;&amp;#x91D1;&amp;#x3092;&amp;#x8868;&amp;#x3059;Money&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;(amount&amp;#x306F;&amp;#x304A;&amp;#x91D1;&amp;#x306E;&amp;#x91CF;, currency&amp;#x306F;&amp;#x901A;&amp;#x8CA8;&amp;#x5358;&amp;#x4F4D;)\nScala&amp;#x306F;Java&amp;#x306E;&amp;#x4E16;&amp;#x754C;&amp;#x306B;&amp;#x660E;&amp;#x77AD;&amp;#x3067;&amp;#x7C21;&amp;#x6F54;&amp;#x3092;&amp;#x3082;&amp;#x305F;&amp;#x3089;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x304A;&amp;#x306A;&amp;#x3058;&amp;#x307F;&amp;#x306A;HelloWorld&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3002;\n&amp;#x307E;&amp;#x305A;object&amp;#x304C;&amp;#x51FA;&amp;#x3066;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;Java&amp;#x306B;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x4F55;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;&amp;#x4E00;&amp;#x3064;&amp;#x3057;&amp;#x304B;&amp;#x4F5C;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;Scala&amp;#x3067;&amp;#x306F;static&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\ndef&amp;#x304B;&amp;#x3089;&amp;#x59CB;&amp;#x307E;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;Ruby, Python&amp;#x306B;&amp;#x8FD1;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;main&amp;#x3082;static&amp;#x306A;&amp;#x3057;&amp;#x3067;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5F15;&amp;#x6570;&amp;#x306F;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x540D;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B;&amp;#x66F8;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x578B;&amp;#x540D;&amp;#x306F;&amp;#x5909;&amp;#x6570;&amp;#x540D;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x914D;&amp;#x5217;&amp;#x306F;Array&amp;#x578B;&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;[]&amp;#x306E;&amp;#x30D6;&amp;#x30E9;&amp;#x30B1;&amp;#x30C3;&amp;#x30C8;&amp;#x306F;&amp;#x30B8;&amp;#x30A7;&amp;#x30CD;&amp;#x30EA;&amp;#x30C3;&amp;#x30AF;&amp;#x30B9;&amp;#x306E;&amp;#x578B;&amp;#x5909;&amp;#x6570;&amp;#x3092;&amp;#x6307;&amp;#x5B9A;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x306E;&amp;#x578B;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x95A2;&amp;#x6570;&amp;#x306E;&amp;#x672C;&amp;#x4F53;&amp;#x306F;&amp;#xFF1D;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B;&amp;#x7D9A;&amp;#x3051;&amp;#x3066;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;public&amp;#x30AD;&amp;#x30FC;&amp;#x30EF;&amp;#x30FC;&amp;#x30C9;&amp;#x304C;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30C7;&amp;#x30D5;&amp;#x30A9;&amp;#x30EB;&amp;#x30C8;&amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x8846;&amp;#x529B;&amp;#x3057;&amp;#x306F;public&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x308F;&amp;#x3056;&amp;#x308F;&amp;#x3056;&amp;#x4ED8;&amp;#x3051;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n
  • Scala&amp;#x3067;&amp;#x306F;val&amp;#x3068;var&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x5909;&amp;#x6570;&amp;#x3092;&amp;#x5BA3;&amp;#x8A00;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nval&amp;#x306F;Java&amp;#x306E;final&amp;#x5909;&amp;#x6570;&amp;#x3068;&amp;#x540C;&amp;#x3058;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x518D;&amp;#x4EE3;&amp;#x5165;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x5B9A;&amp;#x6570;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n\n
  • var&amp;#x306F;&amp;#x901A;&amp;#x5E38;&amp;#x306E;&amp;#x5909;&amp;#x6570;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x518D;&amp;#x4EE3;&amp;#x5165;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x95A2;&amp;#x6570;&amp;#x578B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x306E;&amp;#x30B9;&amp;#x30BF;&amp;#x30A4;&amp;#x30EB;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x5834;&amp;#x5408;&amp;#x306F;val&amp;#x304C;&amp;#x57FA;&amp;#x672C;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x4E0D;&amp;#x5909;&amp;#x6027;&amp;#x3092;&amp;#x91CD;&amp;#x8996;&amp;#x3057;&amp;#x305F;&amp;#x30B9;&amp;#x30BF;&amp;#x30A4;&amp;#x30EB;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x9006;&amp;#x306B;Java&amp;#x306A;&amp;#x3069;&amp;#x306E;&amp;#x72B6;&amp;#x614B;&amp;#x3092;&amp;#x6271;&amp;#x3046;&amp;#x547D;&amp;#x4EE4;&amp;#x578B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x306E;&amp;#x30B9;&amp;#x30BF;&amp;#x30A4;&amp;#x30EB;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;var&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x308C;&amp;#x3089;&amp;#x306F;&amp;#x3069;&amp;#x3061;&amp;#x3089;&amp;#x304C;&amp;#x3044;&amp;#x3044;&amp;#x3068;&amp;#x304B;&amp;#x60AA;&amp;#x3044;&amp;#x3068;&amp;#x304B;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x9069;&amp;#x6750;&amp;#x9069;&amp;#x6240;&amp;#x3060;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x306E;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3084;&amp;#x3059;&amp;#x3055;&amp;#x3001;&amp;#x4E0D;&amp;#x5177;&amp;#x5408;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x3053;&amp;#x307E;&amp;#x306A;&amp;#x3044;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x304B;&amp;#x3001;&amp;#x4E26;&amp;#x884C;&amp;#x6027;&amp;#x3092;&amp;#x91CD;&amp;#x8996;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;val&amp;#x304C;&amp;#x57FA;&amp;#x672C;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x304F;&amp;#x308B;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • name&amp;#x306F;&amp;#x6587;&amp;#x5B57;&amp;#x5217;&amp;#x3002;&amp;#x6587;&amp;#x5B57;&amp;#x5217;&amp;#x578B;&amp;#x306F;java.lang.String&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3002;\n&amp;#x578B;&amp;#x306F;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30A4;&amp;#x30E9;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x63A8;&amp;#x8AD6;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x3002;\n&amp;#x578B;&amp;#x30A2;&amp;#x30CE;&amp;#x30C6;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x660E;&amp;#x793A;&amp;#x7684;&amp;#x306B;&amp;#x6307;&amp;#x5B9A;&amp;#x3067;&amp;#x304D;&amp;#x308B;\n
  • HelloWorld&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x305F;&amp;#x901A;&amp;#x308A;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x8DB3;&amp;#x3057;&amp;#x7B97;&amp;#x3059;&amp;#x308B;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x3059;&amp;#x3002;return a + b&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x6700;&amp;#x5F8C;&amp;#x306E;&amp;#x5F0F;&amp;#x306E;&amp;#x5024;&amp;#x304C;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;return&amp;#x30AD;&amp;#x30FC;&amp;#x30EF;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x4E0D;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x5F0F;&amp;#x3067;&amp;#x7D42;&amp;#x308F;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x4E2D;&amp;#x62EC;&amp;#x5F27;&amp;#x306F;&amp;#x4E0D;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x3001;&amp;#x5F0F;&amp;#x304B;&amp;#x3089;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x304C;&amp;#x578B;&amp;#x63A8;&amp;#x8AD6;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x306E;&amp;#x578B;&amp;#x3082;&amp;#x7701;&amp;#x7565;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • if&amp;#x5F0F;&amp;#x3068;for&amp;#x5F0F;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6587;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x5F0F;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5F0F;&amp;#x306F;&amp;#x5024;&amp;#x3092;&amp;#x8A55;&amp;#x4FA1;&amp;#x3057;&amp;#x8FD4;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nif&amp;#x5F0F;&amp;#x306F;Java&amp;#x306E;&amp;#x4E09;&amp;#x9805;&amp;#x6F14;&amp;#x7B97;&amp;#x5B50;&amp;#x307F;&amp;#x305F;&amp;#x3044;&amp;#x306A;&amp;#x611F;&amp;#x3058;&amp;#x3002;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;=&amp;#x306B;&amp;#x7D9A;&amp;#x3051;&amp;#x3066;&amp;#x7C21;&amp;#x6F54;&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nfor&amp;#x5F0F;&amp;#x306F;Java&amp;#x3068;&amp;#x540C;&amp;#x69D8;&amp;#x7E70;&amp;#x308A;&amp;#x8FD4;&amp;#x3057;&amp;#x51E6;&amp;#x7406;&amp;#x3067;&amp;#x4F7F;&amp;#x3048;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;yield(&amp;#x30A4;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;)&amp;#x3067;&amp;#x8FD4;&amp;#x3057;&amp;#x305F;&amp;#x5024;&amp;#x3092;&amp;#x683C;&amp;#x7D0D;&amp;#x3057;&amp;#x305F;&amp;#x30B3;&amp;#x30EC;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x540D;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x306E;&amp;#x5F15;&amp;#x6570;&amp;#x30EA;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x66F8;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x30D6;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x304C;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x30D6;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x3053;&amp;#x306B;&amp;#x5BA3;&amp;#x8A00;&amp;#x3057;&amp;#x305F;&amp;#x5909;&amp;#x6570;&amp;#x304C;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;firstName&amp;#x3068;lastName&amp;#x304C;public&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • \n
  • Java&amp;#x3068;&amp;#x540C;&amp;#x69D8;&amp;#x306B;new&amp;#x3057;&amp;#x3066;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • HelloWorld&amp;#x3067;&amp;#x3082;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x305F;object&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;new&amp;#x305B;&amp;#x305A;&amp;#x306B;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x4F7F;&amp;#x3048;&amp;#x307E;&amp;#x3059;&amp;#x3002;static&amp;#x306E;&amp;#x4EE3;&amp;#x308F;&amp;#x308A;&amp;#x306B;&amp;#x4F7F;&amp;#x3048;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x306F;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n
  • Scala&amp;#x306B;&amp;#x306F;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3068;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x6A5F;&amp;#x80FD;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x540C;&amp;#x3058;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x304B;&amp;#x540C;&amp;#x3058;&amp;#x30D1;&amp;#x30C3;&amp;#x30B1;&amp;#x30FC;&amp;#x30B8;&amp;#x306B;&amp;#x3042;&amp;#x308B;&amp;#x540C;&amp;#x3058;&amp;#x540D;&amp;#x524D;&amp;#x306E;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3068;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;\nJava&amp;#x3060;&amp;#x3068;&amp;#x540D;&amp;#x524D;&amp;#x7A7A;&amp;#x9593;&amp;#x3067;&amp;#x885D;&amp;#x7A81;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;Scala&amp;#x3067;&amp;#x306F;&amp;#x3057;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x304A;&amp;#x91D1;&amp;#x306E;Money&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x3001;Money&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x3001;JPY&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5B9A;&amp;#x6570;&amp;#x3084;&amp;#x3001;apply&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x63D0;&amp;#x4F9B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;Money.JPY&amp;#x306F;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x5074;&amp;#x306B;&amp;#x306F;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306B;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x3001;apply&amp;#x306F;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;\nappy&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x7CD6;&amp;#x8863;&amp;#x69CB;&amp;#x6587;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x7701;&amp;#x7565;&amp;#x3057;&amp;#x3066;&amp;#x8A18;&amp;#x8FF0;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;new&amp;#x3059;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x306A;&amp;#x304F;&amp;#x306A;&amp;#x308A;&amp;#x3001;&amp;#x8A18;&amp;#x8FF0;&amp;#x6027;&amp;#x304C;&amp;#x9AD8;&amp;#x307E;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • Scala&amp;#x3067;&amp;#x306F;match&amp;#x5F0F;&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x69D8;&amp;#x3005;&amp;#x306A;&amp;#x3082;&amp;#x306E;&amp;#x3092;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;Java&amp;#x306E;swtich&amp;#x6587;&amp;#x306B;&amp;#x4F3C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x8D85;&amp;#x8D8A;&amp;#x3057;&amp;#x305F;&amp;#x5F0F;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x308C;&amp;#x306F;switch&amp;#x6587;&amp;#x3067;&amp;#x304A;&amp;#x99B4;&amp;#x67D3;&amp;#x307F;&amp;#x306E;&amp;#x6570;&amp;#x5024;&amp;#x306E;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x30F3;&amp;#x30B0;&amp;#x3067;&amp;#x3059;&amp;#x3002;n&amp;#x3092;&amp;#x30BB;&amp;#x30EC;&amp;#x30AF;&amp;#x30BF;&amp;#x30FC;&amp;#x3068;&amp;#x3044;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;match&amp;#x5F0F;&amp;#x306E;&amp;#x4E2D;&amp;#x306E;case&amp;#x305D;&amp;#x308C;&amp;#x305E;&amp;#x308C;&amp;#x304C;&amp;#x6761;&amp;#x4EF6;&amp;#x3067;&amp;#x3059;&amp;#x3002;=&gt;&amp;#x4EE5;&amp;#x964D;&amp;#x306B;&amp;#x5F0F;&amp;#x3092;&amp;#x66F8;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x5F0F;&amp;#x306F;&amp;#x8A55;&amp;#x4FA1;&amp;#x3055;&amp;#x308C;&amp;#x3066;match&amp;#x5F0F;&amp;#x306E;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6570;&amp;#x5024;&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x3082;&amp;#x6587;&amp;#x5B57;&amp;#x5217;&amp;#x3084;&amp;#x3001;&amp;#x578B;&amp;#x3001;&amp;#x30B3;&amp;#x30EC;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3001;&amp;#x6B63;&amp;#x898F;&amp;#x8868;&amp;#x73FE;&amp;#x306B;&amp;#x3082;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3055;&amp;#x305B;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x304B;&amp;#x306A;&amp;#x308A;&amp;#x5F37;&amp;#x529B;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;Scala&amp;#x3067;&amp;#x306F;if&amp;#x5F0F;&amp;#x306F;&amp;#x307B;&amp;#x3068;&amp;#x3093;&amp;#x3069;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n
  • &amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x7D10;&amp;#x3065;&amp;#x304F;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x3001;&amp;#x95A2;&amp;#x6570;&amp;#x306F;&amp;#x72EC;&amp;#x7ACB;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#xFF11;&amp;#x3064;&amp;#x4EE5;&amp;#x4E0A;&amp;#x306E;&amp;#x5F15;&amp;#x6570;&amp;#x3092;&amp;#x3068;&amp;#x308A;&amp;#xFF11;&amp;#x3064;&amp;#x306E;&amp;#x7D50;&amp;#x679C;&amp;#x3092;&amp;#x751F;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x30DE;&amp;#x30C3;&amp;#x30D4;&amp;#x30F3;&amp;#x30B0;&amp;#x306A;&amp;#x3069;&amp;#x3068;&amp;#x4F8B;&amp;#x3048;&amp;#x3089;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nScala&amp;#x3067;&amp;#x306F;&amp;#x95A2;&amp;#x6570;&amp;#x30EA;&amp;#x30C6;&amp;#x30E9;&amp;#x30EB;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x8A18;&amp;#x8FF0;&amp;#x65B9;&amp;#x6CD5;&amp;#x3067;&amp;#x95A2;&amp;#x6570;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;a&amp;#x3092;&amp;#x4E8C;&amp;#x4E57;&amp;#x3059;&amp;#x308B;&amp;#x95A2;&amp;#x6570;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x540D;&amp;#x524D;&amp;#x304C;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x7121;&amp;#x540D;&amp;#x95A2;&amp;#x6570;&amp;#x3068;&amp;#x3082;&amp;#x547C;&amp;#x3070;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x7121;&amp;#x540D;&amp;#x95A2;&amp;#x6570;&amp;#x3092;&amp;#x5909;&amp;#x6570;&amp;#x306B;&amp;#x4EE3;&amp;#x5165;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4ED6;&amp;#x306E;&amp;#x95A2;&amp;#x6570;&amp;#x3084;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x3084;&amp;#x5F15;&amp;#x6570;&amp;#x306B;&amp;#x53D6;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x95A2;&amp;#x6570;&amp;#x578B;&amp;#x8A00;&amp;#x8A9E;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x95A2;&amp;#x6570;&amp;#x5358;&amp;#x4F53;&amp;#x3092;&amp;#x5236;&amp;#x9650;&amp;#x306A;&amp;#x304F;&amp;#x5229;&amp;#x7528;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x4E00;&amp;#x4EBA;&amp;#x524D;&amp;#x306E;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x3044;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nsquare&amp;#x306F;&amp;#x95A2;&amp;#x6570;&amp;#x540D;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x7121;&amp;#x540D;&amp;#x95A2;&amp;#x6570;&amp;#x3078;&amp;#x306E;&amp;#x53C2;&amp;#x7167;&amp;#x306E;&amp;#x540D;&amp;#x524D;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x95A2;&amp;#x6570;&amp;#x306E;&amp;#x578B;&amp;#x306F;&amp;#x578B;&amp;#x63A8;&amp;#x8AD6;&amp;#x3067;&amp;#x7701;&amp;#x7565;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3082;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n\n
  • &amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x7D10;&amp;#x3065;&amp;#x304F;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x95A2;&amp;#x6570;&amp;#x306B;&amp;#x5909;&amp;#x63DB;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x306F;&amp;#x7C21;&amp;#x5358;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x540D;&amp;#x306E;&amp;#x5F8C;&amp;#x308D;&amp;#x306B; _&amp;#x3092;&amp;#x4ED8;&amp;#x3051;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3082;&amp;#x3057;&amp;#x304F;&amp;#x306F;&amp;#x95A2;&amp;#x6570;&amp;#x306E;&amp;#x578B;&amp;#x30A2;&amp;#x30CE;&amp;#x30C6;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x6307;&amp;#x5B9A;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3088;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x30B3;&amp;#x30EC;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306F;&amp;#x4E0D;&amp;#x5909;&amp;#x3068;&amp;#x53EF;&amp;#x5909;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x8981;&amp;#x7D20;&amp;#x306E;&amp;#x7E70;&amp;#x308A;&amp;#x8FD4;&amp;#x3057;&amp;#x51E6;&amp;#x7406;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n(1)foreach&amp;#x306F;&amp;#x95A2;&amp;#x6570;&amp;#x3092;&amp;#x5F15;&amp;#x6570;&amp;#x306B;&amp;#x53D6;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5F15;&amp;#x6570;&amp;#x304C;&amp;#x8981;&amp;#x7D20;&amp;#x578B;&amp;#x3067;&amp;#x623B;&amp;#x308A;&amp;#x5024;&amp;#x306F;Unit&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x8981;&amp;#x7D20;&amp;#x6BCE;&amp;#x306B;&amp;#x305D;&amp;#x306E;&amp;#x95A2;&amp;#x6570;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;(2)&amp;#x5F15;&amp;#x6570;&amp;#x306E;&amp;#x578B;&amp;#x6307;&amp;#x5B9A;&amp;#x3068;&amp;#x62EC;&amp;#x5F27;&amp;#x306F;&amp;#x7701;&amp;#x7565;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;(3)&amp;#x5F15;&amp;#x6570;&amp;#x3092;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30B9;&amp;#x30DB;&amp;#x30EB;&amp;#x30C0;&amp;#x306B;&amp;#x7F6E;&amp;#x304D;&amp;#x63DB;&amp;#x3048;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;(4)&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30B9;&amp;#x30DB;&amp;#x30EB;&amp;#x30C0;&amp;#x304C;&amp;#x4E00;&amp;#x5EA6;&amp;#x3057;&amp;#x304B;&amp;#x51FA;&amp;#x3066;&amp;#x3053;&amp;#x306A;&amp;#x3044;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x5F15;&amp;#x6570;=&gt;&amp;#x3092;&amp;#x7701;&amp;#x7565;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;(5)println&amp;#x6587;&amp;#x306E;&amp;#x5F15;&amp;#x6570;&amp;#x304C;&amp;#xFF11;&amp;#x3064;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30B9;&amp;#x30DB;&amp;#x30EB;&amp;#x30C0;&amp;#x81EA;&amp;#x4F53;&amp;#x3092;&amp;#x7701;&amp;#x7565;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x3061;&amp;#x306A;&amp;#x307F;&amp;#x306B;&amp;#x3001;map&amp;#x3082;&amp;#x7E70;&amp;#x308A;&amp;#x8FD4;&amp;#x3057;&amp;#x64CD;&amp;#x4F5C;&amp;#x304C;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;Java&amp;#x306E;Map.Entry&amp;#x306B;&amp;#x76F8;&amp;#x5F53;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;_1&amp;#x304C;&amp;#x30AD;&amp;#x30FC;&amp;#x3067;&amp;#x3001;_2&amp;#x304C;&amp;#x5024;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x8907;&amp;#x6570;&amp;#x306E;&amp;#x5024;&amp;#x3092;&amp;#x3072;&amp;#x3068;&amp;#x307E;&amp;#x3068;&amp;#x3081;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x30BF;&amp;#x30D7;&amp;#x30EB;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;Map&amp;#x306F;&amp;#x30BF;&amp;#x30D7;&amp;#x30EB;&amp;#x306E;Iterable&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x3067;List&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x6271;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x4ED6;&amp;#x306B;&amp;#x3082;&amp;#x4FBF;&amp;#x5229;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x6761;&amp;#x4EF6;&amp;#x306E;&amp;#x8981;&amp;#x7D20;&amp;#x3060;&amp;#x3051;&amp;#x3092;&amp;#x53D6;&amp;#x5F97;&amp;#x3059;&amp;#x308B;&amp;#x30D5;&amp;#x30A3;&amp;#x30EB;&amp;#x30BF;&amp;#x30FC;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3084;&amp;#x3001;&amp;#x7570;&amp;#x306A;&amp;#x308B;&amp;#x30B3;&amp;#x30EC;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3078;&amp;#x306E;&amp;#x5909;&amp;#x63DB;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x308B;map&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3061;&amp;#x306A;&amp;#x307F;&amp;#x306B;Range&amp;#x3067;&amp;#x6570;&amp;#x5217;&amp;#x3092;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x3064;&amp;#x304F;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;Range&amp;#x3068;map&amp;#x3068;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;FizzBuzz&amp;#x304C;6&amp;#x884C;&amp;#x3067;&amp;#x66F8;&amp;#x3051;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • \n
  • &amp;#x6B21;&amp;#x306F;trait&amp;#x3067;&amp;#x3059;&amp;#x3002;trait&amp;#x306F;&amp;#x5B9F;&amp;#x88C5;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3082;&amp;#x66F8;&amp;#x3051;&amp;#x308B;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3060;&amp;#x3068;&amp;#x601D;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x3089;&amp;#x3063;&amp;#x3066;OK&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x66F8;&amp;#x304F;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x5B9F;&amp;#x88C5;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x65AD;&amp;#x7247;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x4ED6;&amp;#x306E;trait&amp;#x3084;class&amp;#x306B;mix-in&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • \n
  • \n
  • &amp;#x305D;&amp;#x308C;&amp;#x305E;&amp;#x308C;&amp;#x306E;&amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x8AAC;&amp;#x660E;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x62BD;&amp;#x8C61;&amp;#x7684;&amp;#x306A;&amp;#x578B;&amp;#x3092;trait&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305A;&amp;#x6700;&amp;#x521D;&amp;#x306F; DDD&amp;#x306E;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x99C6;&amp;#x52D5;&amp;#x958B;&amp;#x767A;&amp;#x306E;&amp;#x8A71;&amp;#x306E;&amp;#x6700;&amp;#x521D;&amp;#x306B;&amp;#x51FA;&amp;#x3066;&amp;#x304F;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x3001;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3092;&amp;#x8868;&amp;#x3059;trait&amp;#x3067;&amp;#x3059;&amp;#x3002;\ntrait&amp;#x306F;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x8A00;&amp;#x3048;&amp;#x3070;&amp;#x5B9F;&amp;#x88C5;&amp;#x3082;&amp;#x66F8;&amp;#x3051;&amp;#x308B;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;equals&amp;#x3068;hashCode&amp;#x306E;&amp;#x5B9F;&amp;#x88C5;&amp;#x304C;&amp;#x8A18;&amp;#x8FF0;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;id&amp;#x3082;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;id&amp;#x306F;&amp;#x62BD;&amp;#x8C61;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3068;&amp;#x3044;&amp;#x3063;&amp;#x3066;&amp;#x5B9F;&amp;#x88C5;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3067;&amp;#x5B9A;&amp;#x7FA9;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306F;&amp;#x3001;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x4E0A;&amp;#x3067;&amp;#x8B58;&amp;#x5225;&amp;#x3092;&amp;#x76EE;&amp;#x7684;&amp;#x3068;&amp;#x3059;&amp;#x308B;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x8B58;&amp;#x5225;&amp;#x3068;&amp;#x306F;&amp;#x300C;&amp;#x7269;&amp;#x4E8B;&amp;#x306E;&amp;#x7A2E;&amp;#x985E;&amp;#x3084;&amp;#x6027;&amp;#x8CEA;&amp;#x306A;&amp;#x3069;&amp;#x3092;&amp;#x898B;&amp;#x5206;&amp;#x3051;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x300D;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x8A00;&amp;#x3044;&amp;#x63DB;&amp;#x3048;&amp;#x308B;&amp;#x3068;&amp;#x3001;&amp;#x898B;&amp;#x5206;&amp;#x3051;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x304C;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306E;&amp;#x540C;&amp;#x4E00;&amp;#x6027;&amp;#x306F;&amp;#x3001;&amp;#x5C5E;&amp;#x6027;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x8B58;&amp;#x5225;&amp;#x5B50;&amp;#x304C;&amp;#x540C;&amp;#x4E00;&amp;#x304B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x5224;&amp;#x5B9A;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;equals&amp;#x3067;&amp;#x306F;match&amp;#x5F0F;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;id&amp;#x3092;&amp;#x5224;&amp;#x5B9A;&amp;#x3059;&amp;#x308B;&amp;#x5B9F;&amp;#x88C5;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x7D99;&amp;#x627F;(Mix-in)&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3088;&amp;#x3044;&amp;#x308F;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x306E;Entity&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x305F;Employee&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;Entity&amp;#x306E;&amp;#x30C8;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x306E;id&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x304C;&amp;#x3042;&amp;#x3063;&amp;#x305F;&amp;#x306E;&amp;#x3067;&amp;#x3001;Employee&amp;#x3067;&amp;#x3082;id&amp;#x5C5E;&amp;#x6027;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306E;&amp;#x6982;&amp;#x5FF5;&amp;#x7684;&amp;#x306A;&amp;#x540C;&amp;#x4E00;&amp;#x6027;&amp;#x306F;&amp;#x3001;id&amp;#x306E;&amp;#x307F;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x884C;&amp;#x308F;&amp;#x308C;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306E;&amp;#x5C5E;&amp;#x6027;&amp;#x306F;&amp;#x5909;&amp;#x5316;&amp;#x3057;&amp;#x3066;&amp;#x3082;&amp;#x3001;&amp;#x8B58;&amp;#x5225;&amp;#x5B50;&amp;#x304C;&amp;#x5909;&amp;#x308F;&amp;#x3089;&amp;#x306A;&amp;#x3051;&amp;#x308C;&amp;#x3070;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3092;&amp;#x898B;&amp;#x5206;&amp;#x3051;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5F93;&amp;#x696D;&amp;#x54E1;&amp;#x306E;&amp;#x8B58;&amp;#x5225;&amp;#x3092;&amp;#x5C5E;&amp;#x6027;&amp;#x3067;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3068;&amp;#x3001;&amp;#x8EAB;&amp;#x9577;&amp;#x3084;&amp;#x4F53;&amp;#x91CD;&amp;#x3084;&amp;#x540D;&amp;#x524D;&amp;#x306A;&amp;#x3069;&amp;#x304C;&amp;#x5909;&amp;#x308F;&amp;#x3063;&amp;#x305F;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x8B58;&amp;#x5225;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x304F;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x56DE;&amp;#x907F;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n\n
  • &amp;#x540C;&amp;#x6642;&amp;#x306B;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x3082;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x8907;&amp;#x96D1;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x304C;&amp;#x3061;&amp;#x306A;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x751F;&amp;#x6210;&amp;#x51E6;&amp;#x7406;&amp;#x3092;&amp;#x62C5;&amp;#x3046;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x4F8B;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x8ECA;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x8ECA;&amp;#x81EA;&amp;#x8EAB;&amp;#x3092;&amp;#x4F5C;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306F;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x3084;&amp;#x306F;&amp;#x308A;&amp;#x3001;&amp;#x81EA;&amp;#x52D5;&amp;#x8ECA;&amp;#x5DE5;&amp;#x5834;&amp;#x304C;&amp;#x8ECA;&amp;#x3092;&amp;#x751F;&amp;#x7523;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x304C;&amp;#x81EA;&amp;#x7136;&amp;#x3060;&amp;#x3057;&amp;#x3001;&amp;#x8ECA;&amp;#x306E;&amp;#x8CFC;&amp;#x5165;&amp;#x8005;&amp;#x306F;&amp;#x5DE5;&amp;#x5834;&amp;#x5185;&amp;#x306E;&amp;#x8907;&amp;#x96D1;&amp;#x306A;&amp;#x751F;&amp;#x7523;&amp;#x5DE5;&amp;#x7A0B;&amp;#x3092;&amp;#x6C17;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x672C;&amp;#x6765;&amp;#x306E;&amp;#x5F79;&amp;#x5272;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x8907;&amp;#x96D1;&amp;#x306A;&amp;#x751F;&amp;#x6210;&amp;#x51E6;&amp;#x7406;&amp;#x3092;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306B;&amp;#x4EFB;&amp;#x305B;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3084;&amp;#x30D0;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x6271;&amp;#x3044;&amp;#x3084;&amp;#x3059;&amp;#x304F;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nScala&amp;#x306E;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x307E;&amp;#x3055;&amp;#x306B;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x8CAC;&amp;#x52D9;&amp;#x3092;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x304B;&amp;#x3089;&amp;#x5206;&amp;#x96E2;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x306B;&amp;#x3061;&amp;#x3087;&amp;#x3046;&amp;#x3069;&amp;#x3044;&amp;#x3044;&amp;#x5834;&amp;#x6240;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;apply&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306B;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3066;&amp;#x304F;&amp;#x3060;&amp;#x3055;&amp;#x3044;&amp;#x3002;\n
  • &amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3059;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x3001;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x305D;&amp;#x306E;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x59CB;&amp;#x3081;&amp;#x306B;&amp;#x7D39;&amp;#x4ECB;&amp;#x3057;&amp;#x305F;Money&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;Money&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306F;&amp;#x30D0;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3002;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x5024;&amp;#x3092;&amp;#x8868;&amp;#x3059;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x6982;&amp;#x5FF5;&amp;#x7684;&amp;#x306A;&amp;#x540C;&amp;#x4E00;&amp;#x6027;&amp;#x3092;&amp;#x6301;&amp;#x3061;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x7269;&amp;#x4E8B;&amp;#x3092;&amp;#x8868;&amp;#x3059;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x4F8B;&amp;#x3048;&amp;#x3070;&amp;#x3001;100&amp;#x5186;&amp;#x304C;&amp;#x305D;&amp;#x308C;&amp;#x305E;&amp;#x308C;&amp;#x306B;&amp;#x3042;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x3001;100&amp;#x5186;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x4FA1;&amp;#x5024;&amp;#x3092;&amp;#x8868;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308C;&amp;#x3070;&amp;#x3088;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3042;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x500B;&amp;#x3005;&amp;#x306E;100&amp;#x5186;&amp;#x306E;&amp;#x8B58;&amp;#x5225;&amp;#x306B;&amp;#x95A2;&amp;#x5FC3;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x308F;&amp;#x3051;&amp;#x3067;&amp;#x306F;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x4F55;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x304B;&amp;#x3060;&amp;#x3051;&amp;#x304C;&amp;#x554F;&amp;#x984C;&amp;#x3067;&amp;#x3001;&amp;#x8AB0;&amp;#x3068;&amp;#x304B;&amp;#x3001;&amp;#x3069;&amp;#x308C;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x304B;&amp;#x306F;&amp;#x554F;&amp;#x308F;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x8A2D;&amp;#x8A08;&amp;#x306E;&amp;#x8981;&amp;#x7D20;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x69D8;&amp;#x3005;&amp;#x306A;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x5171;&amp;#x6709;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3001;&amp;#x4E0D;&amp;#x5909;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x306F;val&amp;#x3067;&amp;#x5BA3;&amp;#x8A00;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5171;&amp;#x6709;&amp;#x3059;&amp;#x308B;&amp;#x306A;&amp;#x3089;&amp;#x4E0D;&amp;#x5909;&amp;#x3002;&amp;#x6027;&amp;#x80FD;&amp;#x9762;&amp;#x3092;&amp;#x8003;&amp;#x616E;&amp;#x3057;&amp;#x3066;&amp;#x53EF;&amp;#x5909;&amp;#x3068;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x3082;&amp;#x3042;&amp;#x308B;&amp;#x304C;&amp;#x3001;&amp;#x539F;&amp;#x5247;&amp;#x7684;&amp;#x306B;&amp;#x4E0D;&amp;#x5909;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305F;&amp;#x3001;equals&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x4E00;&amp;#x822C;&amp;#x7684;&amp;#x306B;ID&amp;#x3088;&amp;#x308A;&amp;#x7B49;&amp;#x4FA1;&amp;#x5224;&amp;#x5B9A;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x5C5E;&amp;#x6027;&amp;#x304C;&amp;#x540C;&amp;#x3058;&amp;#x304B;&amp;#x3069;&amp;#x3046;&amp;#x304B;&amp;#x306E;&amp;#x5224;&amp;#x5B9A;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3068;&amp;#x540C;&amp;#x69D8;&amp;#x306B;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306F;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;unapply&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x62BD;&amp;#x51FA;&amp;#x5B50;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x5F8C;&amp;#x3067;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n
  • &amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x7B49;&amp;#x4FA1;&amp;#x5224;&amp;#x5B9A;&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306F;DDD&amp;#x306B;&amp;#x9650;&amp;#x3089;&amp;#x305A;&amp;#x4E00;&amp;#x822C;&amp;#x5951;&amp;#x7D04;&amp;#x306B;&amp;#x57FA;&amp;#x3065;&amp;#x304D;&amp;#x5B9F;&amp;#x88C5;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nunapply&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x62BD;&amp;#x51FA;&amp;#x5B50;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x3001;apply&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x9006;&amp;#x306E;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3001;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3092;&amp;#x62BD;&amp;#x51FA;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x69CB;&amp;#x9020;&amp;#x306B;&amp;#x4F9D;&amp;#x5B58;&amp;#x305B;&amp;#x305A;&amp;#x306B;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x60C5;&amp;#x5831;&amp;#x306B;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x3001;match&amp;#x5F0F;&amp;#x3068;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x308B;&amp;#x3068;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x306B;&amp;#x5229;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306B;&amp;#x3082;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • Scala&amp;#x306B;&amp;#x306F;&amp;#x30D0;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x4F5C;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x6A5F;&amp;#x80FD;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;case class&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x5BA3;&amp;#x8A00;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x524D;&amp;#x4F8B;&amp;#x3068;&amp;#x540C;&amp;#x3058;&amp;#x3082;&amp;#x306E;&amp;#x304C;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30A4;&amp;#x30E9;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5358;&amp;#x7D14;&amp;#x306A;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306A;&amp;#x3089;&amp;#x3053;&amp;#x308C;&amp;#x3067;&amp;#x5341;&amp;#x5206;&amp;#x3060;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305F;&amp;#x3001;&amp;#x7279;&amp;#x306B;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306E;&amp;#x578B;&amp;#x3092;&amp;#x30C8;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x3067;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x3001;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x3089;&amp;#x30DE;&amp;#x30FC;&amp;#x30AB;&amp;#x30FC;&amp;#x30C8;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3088;&amp;#x3044;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n\n
  • &amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x4E0D;&amp;#x5909;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5B8C;&amp;#x5168;&amp;#x306B;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x7F6E;&amp;#x304D;&amp;#x63DB;&amp;#x3048;&amp;#x308B;&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x5909;&amp;#x66F4;&amp;#x306E;&amp;#x624B;&amp;#x6BB5;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x552F;&amp;#x4E00;&amp;#x306E;&amp;#x30C7;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#x3068;&amp;#x3082;&amp;#x547C;&amp;#x3070;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x983B;&amp;#x7E41;&amp;#x306B;&amp;#x66F4;&amp;#x65B0;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x30D3;&amp;#x30EB;&amp;#x30C0;&amp;#x30FC;&amp;#x304C;&amp;#x6B32;&amp;#x3057;&amp;#x304F;&amp;#x306A;&amp;#x308B;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x5B9F;&amp;#x88C5;&amp;#x65B9;&amp;#x6CD5;&amp;#x306F;&amp;#x79C1;&amp;#x306E;&amp;#x30D6;&amp;#x30ED;&amp;#x30B0;&amp;#x306E;&amp;#x65B9;&amp;#x306B;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x3067;ValueObjectBuilder&amp;#x3067;&amp;#x691C;&amp;#x7D22;&amp;#x3057;&amp;#x3066;&amp;#x307F;&amp;#x3066;&amp;#x304F;&amp;#x3060;&amp;#x3055;&amp;#x3044;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x30B5;&amp;#x30FC;&amp;#x30D3;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3084;&amp;#x30D0;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x500B;&amp;#x5225;&amp;#x306B;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x5834;&amp;#x5408;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x3002;\n&amp;#x3057;&amp;#x304B;&amp;#x3057;&amp;#x3001;&amp;#x3059;&amp;#x3079;&amp;#x3066;&amp;#x306E;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x304C;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3084;&amp;#x30D0;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306B;&amp;#x5C5E;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x306F;&amp;#x9650;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x9006;&amp;#x306B;&amp;#x5C5E;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x4E0D;&amp;#x81EA;&amp;#x7136;&amp;#x306A;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x3082;&amp;#x3042;&amp;#x308B;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x30B5;&amp;#x30FC;&amp;#x30D3;&amp;#x30B9;&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x4F8B;&amp;#x306F;&amp;#x53E3;&amp;#x5EA7;&amp;#x9593;&amp;#x306E;&amp;#x9001;&amp;#x91D1;&amp;#x3092;&amp;#x8868;&amp;#x3057;&amp;#x305F;&amp;#x30B5;&amp;#x30FC;&amp;#x30D3;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30B5;&amp;#x30FC;&amp;#x30D3;&amp;#x30B9;&amp;#x3067;&amp;#x306F;&amp;#x539F;&amp;#x5247;&amp;#x7684;&amp;#x306B;&amp;#x72B6;&amp;#x614B;&amp;#x3092;&amp;#x6301;&amp;#x305F;&amp;#x305A;&amp;#x306B;&amp;#x3001;&amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x305F;&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x632F;&amp;#x821E;&amp;#x3046;&amp;#x3002;&amp;#x591A;&amp;#x304F;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;object&amp;#x3067;&amp;#x5B9F;&amp;#x88C5;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3088;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x30A2;&amp;#x30B0;&amp;#x30EA;&amp;#x30B2;&amp;#x30FC;&amp;#x30C8;&amp;#x3002;&amp;#x30A2;&amp;#x30B0;&amp;#x30EA;&amp;#x30B2;&amp;#x30FC;&amp;#x30C8;&amp;#x306F;&amp;#x96E3;&amp;#x3057;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x30EB;&amp;#x30FC;&amp;#x30C8;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306F;&amp;#x3001;&amp;#x4E0D;&amp;#x5909;&amp;#x6761;&amp;#x4EF6;&amp;#x306E;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x3001;&amp;#x30B0;&amp;#x30ED;&amp;#x30FC;&amp;#x30D0;&amp;#x30EB;&amp;#x306A;&amp;#x540C;&amp;#x4E00;&amp;#x6027;&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x3002;&amp;#x30ED;&amp;#x30FC;&amp;#x30AB;&amp;#x30EB;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306F;&amp;#x96C6;&amp;#x7D04;&amp;#x5185;&amp;#x3067;&amp;#x306E;&amp;#x540C;&amp;#x4E00;&amp;#x6027;&amp;#x3092;&amp;#x4FDD;&amp;#x8A3C;&amp;#x3002;\n&amp;#x5916;&amp;#x90E8;&amp;#x306E;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x3001;&amp;#x5883;&amp;#x754C;&amp;#x5185;&amp;#x90E8;&amp;#x306E;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x53C2;&amp;#x7167;&amp;#x3092;&amp;#x4FDD;&amp;#x6301;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x30ED;&amp;#x30FC;&amp;#x30AB;&amp;#x30EB;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3092;&amp;#x4ED6;&amp;#x306E;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306B;&amp;#x6E21;&amp;#x305B;&amp;#x308B;&amp;#x304C;&amp;#x4E00;&amp;#x6642;&amp;#x7684;&amp;#x306A;&amp;#x53C2;&amp;#x7167;&amp;#x3002;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x4E0D;&amp;#x5909;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x53C2;&amp;#x7167;&amp;#x3092;&amp;#x6E21;&amp;#x305B;&amp;#x308B;&amp;#x3001;&amp;#x53EF;&amp;#x5909;&amp;#x306A;&amp;#x3089;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x3002;\n&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x306A;&amp;#x3069;&amp;#x304B;&amp;#x3089;&amp;#x306E;&amp;#x5165;&amp;#x51FA;&amp;#x529B;&amp;#x306F;&amp;#x3001;&amp;#x96C6;&amp;#x7D04;&amp;#x30EB;&amp;#x30FC;&amp;#x30C8;&amp;#x306E;&amp;#x5358;&amp;#x4F4D;&amp;#x3068;&amp;#x306A;&amp;#x308B;&amp;#x3002;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x3001;&amp;#x30C8;&amp;#x30E9;&amp;#x30F3;&amp;#x30B6;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x5883;&amp;#x754C;&amp;#x3002;\n
  • &amp;#x3059;&amp;#x3079;&amp;#x3066;&amp;#x306E;&amp;#x5909;&amp;#x66F4;&amp;#x306F;Employee&amp;#x3092;&amp;#x901A;&amp;#x3059;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x304C;&amp;#x3001;&amp;#x5909;&amp;#x66F4;&amp;#x3067;&amp;#x304D;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3046;&amp;#x3002;(1)&amp;#x3067;&amp;#x306F;&amp;#x5916;&amp;#x90E8;&amp;#x306E;Department&amp;#x306E;&amp;#x53C2;&amp;#x7167;&amp;#x3092;&amp;#x6301;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3067;&amp;#x3001;(2)&amp;#x3067;&amp;#x306F;&amp;#x5185;&amp;#x90E8;&amp;#x306E;Department&amp;#x306E;&amp;#x53C2;&amp;#x7167;&amp;#x3092;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001; &amp;#x4E0D;&amp;#x5909;&amp;#x6761;&amp;#x4EF6;&amp;#x304C;&amp;#x7DAD;&amp;#x6301;&amp;#x3067;&amp;#x304D;&amp;#x3066;&amp;#x3044;&amp;#x306A;&amp;#x3044;&amp;#x3002;\n
  • &amp;#x305D;&amp;#x3053;&amp;#x3067;&amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x89E3;&amp;#x6C7A;&amp;#x7B56;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306F;&amp;#x3001;Java&amp;#x3067;&amp;#x306F;Cloneable(&amp;#x30AF;&amp;#x30ED;&amp;#x30FC;&amp;#x30CA;&amp;#x30D6;&amp;#x30EB;)&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3066;&amp;#x9632;&amp;#x5FA1;&amp;#x7684;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x3092;&amp;#x751F;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x4E0D;&amp;#x5909;&amp;#x6761;&amp;#x4EF6;&amp;#x3092;&amp;#x7DAD;&amp;#x6301;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x65B9;&amp;#x6CD5;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;Scala&amp;#x3067;&amp;#x306F;@cloneable&amp;#x3092;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x4FEE;&amp;#x98FE;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3001;clone&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(1)&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x304B;&amp;#x3089;&amp;#x5916;&amp;#x90E8;&amp;#x306E;dept&amp;#x3092;&amp;#x53D7;&amp;#x3051;&amp;#x53D6;&amp;#x3063;&amp;#x305F;&amp;#x3089;&amp;#x3001;clone&amp;#x3067;&amp;#x8907;&amp;#x88FD;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(2)&amp;#x5916;&amp;#x90E8;&amp;#x3078;dept&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x5834;&amp;#x5408;&amp;#x3082;clone&amp;#x3067;&amp;#x8907;&amp;#x88FD;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(3)&amp;#x5916;&amp;#x90E8;&amp;#x304B;&amp;#x3089;dept&amp;#x3092;&amp;#x53D6;&amp;#x308A;&amp;#x8FBC;&amp;#x3080;&amp;#x5834;&amp;#x5408;&amp;#x3082;clone&amp;#x3067;&amp;#x8907;&amp;#x88FD;&amp;#x3092;&amp;#x4F5C;&amp;#x3063;&amp;#x3066;&amp;#x53D6;&amp;#x308A;&amp;#x8FBC;&amp;#x307F;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x3046;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;Employee&amp;#x304C;&amp;#x96C6;&amp;#x7D04;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306E;&amp;#x4E0D;&amp;#x5909;&amp;#x6761;&amp;#x4EF6;&amp;#x3092;&amp;#x7DAD;&amp;#x6301;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305F;&amp;#x3001;Employe&amp;#x81EA;&amp;#x8EAB;&amp;#x3082;&amp;#x53EF;&amp;#x5909;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306A;&amp;#x3069;&amp;#x3067;clone&amp;#x3092;&amp;#x63D0;&amp;#x4F9B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;dept&amp;#x3092;&amp;#x30C7;&amp;#x30A3;&amp;#x30FC;&amp;#x30D7;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x3059;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3057;&amp;#x306A;&amp;#x3051;&amp;#x308C;&amp;#x3070;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;(4)\n
  • &amp;#x578B;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x30C8;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3088;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;Cloneable&amp;#x3092;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306B;&amp;#x30DF;&amp;#x30C3;&amp;#x30AF;&amp;#x30B9;&amp;#x30A4;&amp;#x30F3;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x30C8;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • \n
  • Cloneable&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x306F;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x3067;&amp;#x8907;&amp;#x88FD;&amp;#x3092;&amp;#x4F5C;&amp;#x308B;&amp;#x65B9;&amp;#x6CD5;&amp;#x3082;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x3061;&amp;#x3089;&amp;#x306E;&amp;#x307B;&amp;#x3046;&amp;#x304C;&amp;#x69CB;&amp;#x9020;&amp;#x304C;&amp;#x30B7;&amp;#x30F3;&amp;#x30D7;&amp;#x30EB;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5177;&amp;#x8C61;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x3067;&amp;#x3057;&amp;#x304B;&amp;#x8907;&amp;#x88FD;&amp;#x304C;&amp;#x4F5C;&amp;#x308C;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x5177;&amp;#x8C61;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x4F9D;&amp;#x5B58;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x5834;&amp;#x5408;&amp;#x306F;clone&amp;#x306E;&amp;#x65B9;&amp;#x304C;&amp;#x6709;&amp;#x5229;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;\n
  • &amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x306F;&amp;#x3001;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x8CAF;&amp;#x8535;&amp;#x5EAB;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x610F;&amp;#x5473;&amp;#x3002;\n&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x306F;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x5F8C;&amp;#x306B;&amp;#x7834;&amp;#x68C4;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x307E;&amp;#x3067;&amp;#x306E;&amp;#x9593;&amp;#x3001;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3084;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3001;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x30FC;&amp;#x306A;&amp;#x3069;&amp;#x306B;&amp;#x4E00;&amp;#x6642;&amp;#x7684;&amp;#x306B;&amp;#x6C38;&amp;#x7D9A;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x591A;&amp;#x3044;&amp;#x3002;&amp;#x3057;&amp;#x304B;&amp;#x3057;&amp;#x3001;&amp;#x6C38;&amp;#x7D9A;&amp;#x5316;&amp;#x306F;&amp;#x8907;&amp;#x96D1;&amp;#x306A;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3042;&amp;#x308A;&amp;#x3001;&amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x306E;&amp;#x672C;&amp;#x8CEA;&amp;#x3067;&amp;#x3082;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x305D;&amp;#x306E;&amp;#x6C38;&amp;#x7D9A;&amp;#x5316;&amp;#x3092;&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x304C;&amp;#x62C5;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x672C;&amp;#x8CEA;&amp;#x7684;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x8907;&amp;#x96D1;&amp;#x3055;&amp;#x3092;&amp;#x6392;&amp;#x9664;&amp;#x3059;&amp;#x308B;&amp;#x3002;\n&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x306F;&amp;#x307E;&amp;#x305A;&amp;#x30EA;&amp;#x30FC;&amp;#x30C9;&amp;#x30AA;&amp;#x30F3;&amp;#x30EA;&amp;#x30FC;&amp;#x306A;&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;EntityResolver&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x591A;&amp;#x304F;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;Scala&amp;#x306E;Iterable&amp;#x306E;&amp;#x529B;&amp;#x3092;&amp;#x501F;&amp;#x308A;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;resolve&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3092;\n
  • &amp;#x3053;&amp;#x306E;&amp;#x4F8B;&amp;#x306F;&amp;#x30AA;&amp;#x30F3;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x3067;&amp;#x7BA1;&amp;#x7406;&amp;#x3059;&amp;#x308B;&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001; resolve&amp;#x3068;iterator&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3059;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x5B8C;&amp;#x6210;&amp;#x3067;&amp;#x3059;&amp;#x3002;Iterable&amp;#x3067;&amp;#x30B3;&amp;#x30EC;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x4F7F;&amp;#x3048;&amp;#x308B;&amp;#x69D8;&amp;#x3005;&amp;#x306A;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x304C;&amp;#x5229;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;foreach&amp;#x3084;exists&amp;#x3084;map&amp;#x306A;&amp;#x3069;&amp;#x304C;&amp;#x4F7F;&amp;#x3048;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x66F8;&amp;#x8FBC;&amp;#x307F;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x3067;&amp;#x3059;&amp;#x3002;store&amp;#x3068;&amp;#x304B;delete&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • \n
  • \n
  • \n
  • &amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x3001;JavaBeans&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x751F;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x5168;&amp;#x90E8;&amp;#x3092;&amp;#x5410;&amp;#x304D;&amp;#x51FA;&amp;#x3059;&amp;#x306E;&amp;#x306F;&amp;#x9AA8;&amp;#x304C;&amp;#x6298;&amp;#x308C;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;Freemarker&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x64CD;&amp;#x4F5C;&amp;#x65B9;&amp;#x6CD5;&amp;#x306F;&amp;#x3053;&amp;#x3093;&amp;#x306A;&amp;#x611F;&amp;#x3058;&amp;#x3002;\n
  • \n
  • ClassMeta&amp;#x306B;&amp;#x306F;ID&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x3001;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x540D;&amp;#x3084;&amp;#x30D1;&amp;#x30C3;&amp;#x30B1;&amp;#x30FC;&amp;#x30B8;&amp;#x540D;&amp;#x3001;FieldMeta&amp;#x306E;&amp;#x30EA;&amp;#x30B9;&amp;#x30C8;&amp;#x306A;&amp;#x3069;&amp;#x304C;&amp;#x4FDD;&amp;#x6301;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x30A8;&amp;#x30F3;&amp;#x30C6;&amp;#x30A3;&amp;#x30C6;&amp;#x30A3;&amp;#x3067;&amp;#x3059;&amp;#x3002;@BeanProperty&amp;#x3084;&amp;#x4ED6;&amp;#x306E;getter&amp;#x306F;JavaBeans&amp;#x3092;&amp;#x524D;&amp;#x63D0;&amp;#x306B;&amp;#x3059;&amp;#x308B;Freemarker&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3061;&amp;#x306A;&amp;#x307F;&amp;#x306B;ID&amp;#x306F;String&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;Identifier&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • ClassMeta&amp;#x306E;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30CB;&amp;#x30AA;&amp;#x30F3;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n1&amp;#x756A;&amp;#x76EE;&amp;#x304C;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3001;2&amp;#x756A;&amp;#x76EE;&amp;#x306F;ID&amp;#x306E;&amp;#x81EA;&amp;#x52D5;&amp;#x751F;&amp;#x6210;&amp;#x3002;\n3&amp;#x756A;&amp;#x76EE;&amp;#x304C;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x7528;&amp;#x306E;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3002;\n4&amp;#x756A;&amp;#x76EE;&amp;#x304C;&amp;#x62BD;&amp;#x51FA;&amp;#x5B50;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • FieldMeta&amp;#x306F;ClassMeta&amp;#x306B;&amp;#x5F93;&amp;#x5C5E;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3001;&amp;#x8B58;&amp;#x5225;&amp;#x304C;&amp;#x4E0D;&amp;#x8981;&amp;#x306A;&amp;#x5024;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;case class&amp;#x3067;&amp;#x3055;&amp;#x304F;&amp;#x3063;&amp;#x3068;&amp;#x4F5C;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;BeanProperty&amp;#x306F;Freemarker&amp;#x5BFE;&amp;#x5FDC;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x30EA;&amp;#x30DD;&amp;#x30B8;&amp;#x30C8;&amp;#x30EA;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x4ECA;&amp;#x56DE;&amp;#x306F;&amp;#x30EA;&amp;#x30FC;&amp;#x30C9;&amp;#x30AA;&amp;#x30F3;&amp;#x30EA;&amp;#x30FC;&amp;#x306A;&amp;#x306E;&amp;#x3067;EntityResolver&amp;#x306E;&amp;#x307F;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n\n
  • &amp;#x6B21;&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x751F;&amp;#x6210;&amp;#x30B5;&amp;#x30FC;&amp;#x30D3;&amp;#x30B9;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • &amp;#x6700;&amp;#x5F8C;&amp;#x306F;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • \n
  • Transcript of "ddd+scala"

    1. 1. DDD + Scala (@j5ik2o)
    2. 2. DDD , Scala , DSL , ...DDD 2 (4,5,6 )@j5ik2o
    3. 3. agendaScala DDD Scala DDD + Scala DSL JavaBeans
    4. 4. Scala
    5. 5. ScalaScala .scala .class Java
    6. 6. Scala vs Java Money Scala } public BigDecimal getAmount() {case class Money(amount :BigDecimal, currency : Currency) return amount; Money Java }public class Money { public Currency getCurrency() { private final BigDecimal amount; return currency; } private final Currency currency; public Money(BigDecimal amnt, / equals, hashCode /Currency creny) { (ry amount = amt; } currency = creny;
    7. 7. Hello, World!!object HelloWorld{ def main(args: Array[String]):Unit = { println(“Hello, World!!”) }}
    8. 8. valscala> val name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> name = "JUNICHI KATO"<console>:6: error: reassignment to val name = "JUNICHI KATO"
    9. 9. varscala> var name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> name = "JUNICHI KATO"name: java.lang.String = JUNICHI KATO
    10. 10. typescala> val name = "Junichi Kato"name: java.lang.String = Junichi Katoscala> val name:String = "Junichi Kato"name: String = Junichi Katoscala> val num:Number = 100Lnum: java.lang.Number = 100
    11. 11. methoddef add(a:Int, b:Int):Int = { return a + b}def add(a:Int, b:Int):Int = a + bdef add(a:Int, b:Int) = a + bhoge.add(1, 2) / 3 /
    12. 12. if & forifval a = 10val ret = if (a % 2 == 0) true else falseval ret = if (a % 2 == 0) { println(“ ”); true }else { println(“ ”); false }def isEven(n: Int) = if (n % 2 == 0) true else falseforfor(i <- 1 to 3) println(i) / 1,2,3 /for(i <- Array(1,2,3)) println(i) / 1,2,3 /val numbers = for(i <- 1 to 10) yield i
    13. 13. classclass PersonName(fn: String, ln: String){ require(fn.length > 0) // IAE require(ln.length > 0) // IAE val firstName = fn val lastName = ln def fullName = “%s, %s”.format(firstName, lastName)}
    14. 14. classclass PersonName(val firstName:String, vallastName: String){require(firstName.length > 0)require(lastName.length > 0)def fullName = “%s, %s”.format(firstName,lastName)
    15. 15. classval pn = new PersonName(“Junichi”, “Kato”)println(pn.fullName)val pn2 = new PersonName(“”, “Kato”) / IAE /
    16. 16. objectobject EmployeeDao { val DEFAULT_NAME = ... def findAll = ...}val result = EmployeeDao.findAllval defaultName = EmployeeDao.DEFAULT_NAME
    17. 17. { , }class Money(val amount:BigDecimal, val currency: Currency) ...object Money { val JPY = Currency.getInstance(“JPY”) def apply(amount: BigDecimal, currency: Currency) = newMoney(amount, currency)}val money:Money = Money(100, Money. JPY)/ val money:Money = Money.apply(100, Money.JPY) /
    18. 18. matchdef numberMatch(n:Int) = n match { case 1 => “one” case 2 | 3 => “t wo or three” case _ => “other”}println(numberMatch(1)) / one /println(numberMatch(2)) / t wo or three /println(numberMatch(3)) / t wo or three /println(numberMatch(4)) / other /
    19. 19. matchval pattern = """([a-z]+)""".r case Array(1,2,3) => println(“def matchTest(word: Any) = word 1,2,3 ”)match { case _ => throw new case “ABC” => println(“ABC ”) IllegalArgumentException case pattern(s) => println(" } = "+s) matchTest(“ABC”) / ABC / case s: String => println(“ matchTest("aaaa") // = = (%s)”.format(s)) (aaaa) case n: Int if (n >= 2) => println(“2 matchTest(10) / 2 / ”) matchTest(Array(1,2,3)) // 1,2,3
    20. 20. (a:Int) => a * aval square: (Int) => Int = (a:Int) => a * aval square = (a:Int) => a * aval result = square(2) / 4 /
    21. 21. object MyMath { def add(a:Int, b:Int) = a + b}val f1 = MyMath.add _val f2: (Int,Int) => Int = MyMath.add
    22. 22. Collectionval il1 = List(1,2,3)val il2 = list :+ 4 / 1,2,3,4 /val im1 = Map(1 -> “ 2 -> “b”, 3 -> “c”) a”,val im2 = m1 + (4 -> “d”) / 1 -> “ 2 -> “b”, 3 -> “c”, 4 -> “d” / a”,val ml = ListBuffer(1,2,3)ml += 4val mm = collection.mutalble.Map(1 -> “ 2 -> “b”, 3 -> “c”) a”,mm += (4 -> “d”)
    23. 23. Collectionval numbers = List(1,2,3,45)numbers.foreach((n:Int) => println(n) ) / (1) /numbers.foreach(n => println(n)) / (2) /numbers.foreach(_ => println(_)) / (3) /numbers.foreach(println(_)) / (4) /numbers.foreach(println) / (5) /varl map = Map(1 -> “ 2 -> “b”) a”,map.foreach(entry => println(“key = %s, value =%s”.format(entry._1,entry._2)))
    24. 24. Collectionval evens = numbers.filter(_ % 2 == 0) //numbersval list = List(1,2,3).map(_ * 2) / 2,4,6 /
    25. 25. CollectionRange ( (Seq) )val range = 1 to 10; range.foreach(println)for(i <- 1 to 10 by 2) println(i) / 1 3 5 7 9 /6 FizzBuzz(1 to 100).map{ case n if (n % 15 == 0) => “FizzBuzz” case n if (n % 3 == 0) => “Fizz” case n if (n % 5 == 0) => “Buzz” case n => n}.foreach(println)
    26. 26. traittrait Greeting { def greet:Unit }class JapaneseGreeting extends Greeting { def greet = println(“ ”)}class EnglishGreeting extends Greeting { def greet = println(“Hello”)}mix-intrait Logging { def log(msg: String) = println(msg) }class Employee(name:String) extends AbstractEmployee withLogging { log(“name = “+name)}
    27. 27. DDD + Scala
    28. 28. Domain Object & Lifecycle
    29. 29. Entitytrait Entity { val id: String // OK def equals(other: Any) = other match { case that: Entity => id == that.id case _ => false } def hashCode = id.hashCode}
    30. 30. Entityclass Employee(val id: String, val name:String)extends Entityval kato1 = new Employee(“1”, “Junichi Kato”)val kato2 = new Employee(“2”, “Junichi Kato”)val kato3 = new Employee(“3”, “JUNICHI KATO”)assert(kato1 != kato2)assert(kato1 == kato3)
    31. 31. Entity with Factoryclass Employee object Employee{(val id:String, def apply(id:String, name:String,var name:String, dept:Department) = newvar dept:Department) Employee(id, name, dept)extends Entity }
    32. 32. Entity with Factoryval kato = Employee(“KATO”,Department(“DEV”))
    33. 33. Value Object with Factoryclass Money override def toString = "Money(%s, %s)".format(amount,(val amount: BigDecimal, currency)val currency: Currency){ } override def equals(that: Any): object Money {Boolean = that match { def apply(amount: BigDecimal, case other: Money => amount == currency: Currency) = newother.amount && currency == Money(amount, currency)other.currency def unapply(money: Money) = case _ => false Some(money.amount, } money.currency) override def hashCode = }amount.hashCode +currency.hashCode
    34. 34. Value Object with FactoryVOassert(Money(100, Money.JPY) == Money(100, Money.JPY))assert(Money(100, Money.JPY) != Money(105, Money.JPY))assert(Money(100, Money.JPY) != Money(100, Money.USD)) unapplyval Money(amt, cry) = money1_100yenprintln(“ amount = %s, currency = %s”.format(amt, cry))money1_100yen match { / match /case Money(amt, cry) => println(“ amount = %s, currency = %s”.format(amt,cry))case _ => ()}
    35. 35. Value Object(case class)case class Money(amount: BigDecimal, currency:Currency) apply, unapply val toString, equals, hashCodeVO case class Money(amount:BigDecimal, currency: Currency) extends ValueObject
    36. 36. ValueObject Buildercase class PersonName(firstName: String, lastName:String)class PersonNameBuilder extendsValueObjectBuidler[PersonName, PersonNameBuilder] { ... } VOval personName1 = newPersonNameBuilder().withFirstName("Junichi").withLastName("Kato").buildval personName2 = newPersonNameBuilder().withLastName(lastName.toUpperCase).build(personName1)
    37. 37. Serviceobject TransferSer vice { def transfer(money: Money,from:BankAccount, to:BankAccount) = to.push(from.pull(money))}TransferService.transfer(Money(1000,JPY),BankAccount(“012345”),BankAccount(“543210”))
    38. 38. Aggregateclass Employee(val id:String, var name:String, var dept:Department) extends Entity Employee id, name, dept
    39. 39. Aggregate Department ( )class Employee(val id:String, var name:String, var dept:Department) extends Entityclass Department(val id: String, var name: String) extends Entityval dept = Department(“1:1”, “DEV)val emp = Employee(“1”, “KATO”, dept) / (1) /dept.name = “SALES” / (1) /val dept = emp.dept / (2) /dept.name = “SALES” / (2) /
    40. 40. Aggregate(Cloneable)@cloneable }class Department(val id: String, var name: override def clone = { / (4) /String) extends Entity { val result = override def clone = super.clone.asInstanceOf[Employee]super.clone.asInstanceOf[Department] result.dpt = dpt.clone} }@cloneable }class Employee(val id:String, var val dept = Department(“1:1”, “DEV”)name:String, _dpt: Department) extendsEntity { val emp = Employee(“1”, “KATO”, dept) / (1) / private var dpt = _dpt.clone / (1) / dept.name = “SALES” def dept = dpt.clone / getDept / (2) val dept = emp.dept / (2) / def dept_= (value: Deaprtment) { // dept.name = “SALES”setDept emp.dept = Department(“1:1”, “SALES”) / (3) / dpt = value.clone / (3) / val cloneEmp = emp.clone / (4) /
    41. 41. Aggregate(clone)clone Mix-in@cloneabletrait EntityCloneable[T <: Entity] { this: Entity => override def clone: T = super.clone.asInstanceOf[T]}
    42. 42. Aggregate(clone)class Employee (val id: String, var name: String) extends Entity withEntityCloneable[Employee]val emp = Employee(“1”, “Kato”)val cloneEmp = emp.clone
    43. 43. Aggregate(Factory) Factoryobject Department { def apply(dept: Department) = new Department(dept, dept.name)}object Employee { def apply(emp: Employee) = new Employee(emp.id, emp.name, Department(emp.dept))}val emp = Employee(“1”, “KATO”, Department(“1:1”, “DEV”))val cloneEmp = Employee(emp)
    44. 44. Repositorytrait EntityResolver[T <: Entity] extends Iterable[T]{ def resolve(id: String): T def apply(id: String) = resolve(id) def contains(id: String): Boolean = exists(_.id == id) def contains(entity: T): Boolean = exists(_ == entity)}
    45. 45. Repositoryclass EmployeeResolver extends val er = new EmployeeResolverEntityResolver[Employee] { val employee = er.resolve(id) private val employees = val employee = er(id) / er.apply /Map(“1” -> Employee(“1”, -> resolve“KATO”, Department(“1:1”,“DEV”))) val employee = er.contains(id) def resolve(id: String) = val exists = er.exists(_.name ==employees(id) “KATO”) def iterator = val employees =employees.map(e => er.filter(_.name.startWith(“K”))e._2.clone).iterator er.foreach(println)}
    46. 46. Repositorytrait Repository[T <: Entity] extendsEntityResolver[T] { def store(entity: T) def update(identifier: Identifier, entity:T) =store(entity) def delete(identity: Identifier) def delete(entity: T)}
    47. 47. Repositoryclass EmployeeRepository / resolve, iterator ... /extendsRepository[Employee] { } private val employees = val er = newcollection.mutalble.Map.emp EmployeeRepositoryty[String, Employee] val emp = Employee(id, def store(emp: Employee) = “KATO”, Department(“DEV))employees += (emp.id -> emp) er.store(emp) def delete(id: String) = er(id) = empemployee -= emp.id er.delete(id) def delete(emp: Employee) =delete(emp.id) er.delete(emp)
    48. 48. ( )=id(4a74c322-08ab-450b-b674-793e1d7f399a) = classDepartment { package = dept fields { name = java.lang.String }}
    49. 49. package dept;public class Department { private java.lang.String name; public void setName(java.lang.String name){ this.name = name; } public java.lang.String getName(){ return name; }}
    50. 50. (.ftl)<#if classMeta.getPackageName()??> <#assign getter = "is"/>package ${classMeta.getPackageName()}; <#elseif f.getTypeName() == "java.lang.Boolean"></#if> <#assign getter = "is"/>public class ${classMeta.getName()} { <#else><#list classMeta.getFieldMetas() as f> <#assign getter = "get"/> private ${f.getTypeName()} ${f.getName()}; </#if> public void set${f.getName()?cap_first} public ${f.getTypeName()} ${getter}$(${f.getTypeName()} ${f.getName()}){ {f.getName()?cap_first}(){ this.${f.getName()} = $ return ${f.getName()};{f.getName()}; } } </#list> }<#if f.getTypeName() == "boolean">
    51. 51. codegen -hcodegen -c sample.config -t template -e exportcodegen -c [4a74c322-08ab-450b-b674-793e1d7f399a]@sample.config -ttemplate -e export
    52. 52. ClassMeta FieldMeta CodeGenSer viceFactory ClassMetaRepository
    53. 53. ClassMeta Entitypackage codegen.domainclass ClassMeta(@BeanProperty val identifier: Identifier, @BeanProperty val name:String, val packageName: Option[String], val fieldMetas: List[FieldMeta])extends Entity { override def toString: String = "ClassMeta(%s, %s, %s,%s)".format(identifier, name, packageName, fieldMetas) def getPackageName(): String = if (packageName.isEmpty) null elsepackageName.get def getFieldMetas(): java.util.List[FieldMeta] = fieldMetas.asJava}
    54. 54. ClassMeta Objectobject ClassMeta { def apply(identifier: Identifier, name: String, packageName: Option[String],fieldMetas: List[FieldMeta]) = new ClassMeta(identifier, name, packageName, fieldMetas)def apply(name: String, packageName: Option[String], fieldMetas:List[FieldMeta]): ClassMeta = apply(Identifier(), name, packageName, fieldMetas) def apply(classMeta: ClassMeta): ClassMeta = apply(classMeta.identifier, classMeta.name, classMeta.packageName,classMeta.fieldMetas) def unapply(classMeta: ClassMeta) = Some(classMeta.identifier, classMeta.name, classMeta.packageName,classMeta.fieldMetas)}
    55. 55. FieldMeta VO & VO Factorycase class FieldMeta(@BeanProperty name:String, @BeanProperty typeName: String)
    56. 56. ClassMetaRepositorypackage codegen.domainclass ClassMetaRepository(configSource: BufferedSource)extends EntityResolver[ClassMeta] { private val classMetas = newModelParser().parse(configSource) private val classMetaMap = classMetas.map(classMeta =>(classMeta.identifier, classMeta)).toMap def iterator: Iterator[ClassMeta] =classMetaMap.map(classMeta => ClassMeta(_._2)).iterator def resolve(identifier: Identifier): ClassMeta =ClassMeta(classMetaMap(identifier))}
    57. 57. CodeGenSer vicepackage codegen.domain val exportClassDir = getExportClassDir(classMeta)object CodeGenSer vice{ exportClassDir.mkdirs def generate(exportDir: File, templateDir: File,classMetas: List[ClassMeta], using(new FileWriter(new File(exportClassDir, classMeta.name + ".java"))) { beginHandler: Option[(ClassMeta) => Unit], fileWriter => endHandler: Option[(ClassMeta) => Unit] ) = { template.process(rootMap.asJava, val configuration = new Configuration fileWriter); fileWriter.flush();configuration.setDirectoryForTemplateLoading(templateDir) } / using / val template = / ... /configuration.getTemplate("java.ftl") } / foreach / classMetas.foreach { } classMeta => / ... / / ... / } val rootMap = Map("classMeta" ->classMeta)
    58. 58. Applicationpackage codegen.application getExportDir(parameters),object Application extends Logging { getIdList(parameters)) def main(args: Array[String]) { } try { val commandLine = new } catch {CommandLineParser().parse(args.mkString(" ")) case e: CommandLineParseException => commandLine match { println(" case Help() => println("""-c ")[[id1,id2]@]file.config [-t templateDir][-e exportDir]""") } case parameters: Parameters => }generate(getConfigFile(parameters), getTemplateDir(parameters), }
    59. 59. Application private def generate(configFile: File, CodeGenSer vice.generate(exportDir, templateDir, targets, templateDir: File, Some({ exportDir: File, c => info("id(%s) : class %s ids: List[String]) { ".format(c.identifier.value, c.name)) info("= %s, = %s, }), = %s".format(configFile, templateDir, Some({exportDir)) c => info("id(%s) : class %s val repos = new ".format(c.identifier.value, c.name))ClassMetaRepository(Source.fromFile(configFile)) })) val targets = ids match { info(" ") case Nil => repos.toList case xs => xs.map { } catch { e => repos.resolve(Identifier(e)) case e: Exception => error(" } ", e) } } try { }
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×