8. val
scala> val name = "Junichi Kato"
name: java.lang.String = Junichi Kato
scala> name = "JUNICHI KATO"
<console>:6: error: reassignment to val
name = "JUNICHI KATO"
9. var
scala> var name = "Junichi Kato"
name: java.lang.String = Junichi Kato
scala> name = "JUNICHI KATO"
name: java.lang.String = JUNICHI KATO
10. type
scala> val name = "Junichi Kato"
name: java.lang.String = Junichi Kato
scala> val name:String = "Junichi Kato"
name: String = Junichi Kato
scala> val num:Number = 100L
num: java.lang.Number = 100
11. method
def add(a:Int, b:Int):Int = {
return a + b
}
def add(a:Int, b:Int):Int = a + b
def add(a:Int, b:Int) = a + b
hoge.add(1, 2) / 3
/
12. if & for
if
val a = 10
val ret = if (a % 2 == 0) true else false
val ret = if (a % 2 == 0) { println(“ ”); true }
else { println(“ ”); false }
def isEven(n: Int) = if (n % 2 == 0) true else false
for
for(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. class
class 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. class
class PersonName(val firstName:String, val
lastName: String){
require(firstName.length > 0)
require(lastName.length > 0)
def fullName = “%s, %s”.format(firstName,
lastName)
15. class
val pn = new PersonName(“Junichi”, “Kato”)
println(pn.fullName)
val pn2 = new PersonName(“”, “Kato”) / IAE
/
16. object
object EmployeeDao {
val DEFAULT_NAME = ...
def findAll = ...
}
val result = EmployeeDao.findAll
val defaultName = EmployeeDao.DEFAULT_NAME
17. { , }
class Money(val amount:BigDecimal, val currency: Currency) ...
object Money {
val JPY = Currency.getInstance(“JPY”)
def apply(amount: BigDecimal, currency: Currency) = new
Money(amount, currency)
}
val money:Money = Money(100, Money. JPY)
/ val money:Money = Money.apply(100, Money.JPY)
/
18. match
def 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. match
val 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. (a:Int) => a * a
val square: (Int) => Int = (a:Int) => a * a
val square = (a:Int) => a * a
val result = square(2) / 4
/
21. object MyMath {
def add(a:Int, b:Int) = a + b
}
val f1 = MyMath.add _
val f2: (Int,Int) => Int = MyMath.add
22. Collection
val 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 += 4
val mm = collection.mutalble.Map(1 -> “ 2 -> “b”, 3 -> “c”)
a”,
mm += (4 -> “d”)
24. Collection
val evens = numbers.filter(_ % 2 == 0) //
numbers
val list = List(1,2,3).map(_ * 2) / 2,4,6
/
25. Collection
Range ( (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)
29. Entity
trait Entity {
val id: String // OK
def equals(other: Any) = other match {
case that: Entity => id == that.id
case _ => false
}
def hashCode = id.hashCode
}
30. Entity
class Employee(val id: String, val name:
String)extends Entity
val 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. Entity with Factory
class Employee object Employee{
(val id:String, def apply(id:String,
name:String,
var name:String, dept:Department) = new
var dept:Department) Employee(id, name, dept)
extends Entity }
33. Value Object with Factory
class 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) = new
other.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. Value Object with Factory
VO
assert(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))
unapply
val Money(amt, cry) = money1_100yen
println(“
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. Value Object(case class)
case class Money(amount: BigDecimal, currency:
Currency)
apply, unapply
val
toString, equals, hashCode
VO case class Money(amount:
BigDecimal, currency: Currency) extends ValueObject
36. ValueObject Builder
case class PersonName(firstName: String, lastName:
String)
class PersonNameBuilder extends
ValueObjectBuidler[PersonName, PersonNameBuilder] { ... }
VO
val personName1 = new
PersonNameBuilder().withFirstName("Junichi").withLastNa
me("Kato").build
val personName2 = new
PersonNameBuilder().withLastName(lastName.toUpperCase
).build(personName1)
42. Aggregate(clone)
class Employee
(val id: String,
var name: String)
extends Entity with
EntityCloneable[Employee]
val emp = Employee(“1”, “Kato”)
val cloneEmp = emp.clone
43. Aggregate(Factory)
Factory
object 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)
47. Repository
class EmployeeRepository / resolve, iterator ...
/
extends
Repository[Employee] { }
private val employees = val er = new
collection.mutalble.Map.emp EmployeeRepository
ty[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) = emp
employee -= emp.id
er.delete(id)
def delete(emp: Employee) =
delete(emp.id) er.delete(emp)
49. ( )=
id(4a74c322-08ab-450b-b674-793e1d7f399a) = class
Department {
package = dept
fields {
name = java.lang.String
}
}
50. 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;
}
}
#12: HelloWorld&#x306E;&#x4F8B;&#x3067;&#x8AAC;&#x660E;&#x3057;&#x305F;&#x901A;&#x308A;&#x3067;&#x3059;&#x3002;\n&#x8DB3;&#x3057;&#x7B97;&#x3059;&#x308B;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306E;&#x4F8B;&#x3067;&#x3059;&#x3002;return a + b&#x3067;&#x3059;&#x304C;&#x3001;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306E;&#x6700;&#x5F8C;&#x306E;&#x5F0F;&#x306E;&#x5024;&#x304C;&#x623B;&#x308A;&#x5024;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x305D;&#x306E;&#x5834;&#x5408;&#x306F;return&#x30AD;&#x30FC;&#x30EF;&#x30FC;&#x30C9;&#x306F;&#x4E0D;&#x8981;&#x3067;&#x3059;&#x3002;&#x307E;&#x305F;&#x4E00;&#x3064;&#x306E;&#x5F0F;&#x3067;&#x7D42;&#x308F;&#x308B;&#x5834;&#x5408;&#x306F;&#x4E2D;&#x62EC;&#x5F27;&#x306F;&#x4E0D;&#x8981;&#x3067;&#x3059;&#x3002;&#x307E;&#x305F;&#x3001;&#x5F0F;&#x304B;&#x3089;&#x623B;&#x308A;&#x5024;&#x304C;&#x578B;&#x63A8;&#x8AD6;&#x3067;&#x304D;&#x308B;&#x5834;&#x5408;&#x306F;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306E;&#x623B;&#x308A;&#x5024;&#x306E;&#x578B;&#x3082;&#x7701;&#x7565;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;\n