참고 사이트 : https://twitter.github.io/scala_school/ko/basics.html
terrypark@localhost:~/program/sbt/bin$ sbt console
[info] Set current project to bin (in build file:/Users/terrypark/program/sbt/bin/)
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
예제 따라잡기!
scala> 1+1
res0: Int = 2
scala> val result = 1+1
result: Int = 2
scala> var name = "terry.park"
name: String = terry.park
scala> def addOne(m: Int): Int = m +1
addOne: (m: Int)Int
scala> val test = addOne(2)
test: Int = 3
scala> def threeReturn() = 1 + 2
threeReturn: ()Int
scala> threeReturn()
res1: Int = 3
scala> threeReturn
res2: Int = 3
이름없는 함수?!
scala> (x: Int) => x + 1
res3: Int => Int = <function1>
scala> (2) <- 이렇게 하면 호출되어지나? 했지만 역시나 안됌!ㅋ
res4: Int = 2
scala> res3(2)
res5: Int = 3
// 이름없는 함수를 다른 함수나 식에 넘기거나 val에 지정할 수 있음.
scala> val addOne = (x: Int) => x+4
addOne: Int => Int = <function1>
scala> addOne(1)
res8: Int = 5
// function timesTow(int i){ .... } 이런 내용과 같음!
scala> def timesTow(i: Int): Int = {
| println("hello world")
| i*2
| }
timesTow: (i: Int)Int
scala> timesTow(2)
hello world
res9: Int = 4
// 이름없는 함수도 동일!
scala> { i:Int => println("hello~")
| i * 2
| }
res10: Int => Int = <function1>
scala> res10(3)
hello~
res11: Int = 6
scala> def addr(m: Int, n: Int)= m + n
addr: (m: Int, n: Int)Int
scala> val add = addr(_:Int, 4)
add: Int => Int = <function1>
scala> add(2)
res1: Int = 6
_..밑줄?!! 인자의 일부만을 사용하는 것?
add(2)라고 한다면 인자의 값으로 2가 들어가고..add(2)는 addr(2, 4)가 되어지는것!?
그래서 addr이 m+n이니..6이라는 결과가 똭!
커리 함수(Curried functions)
scala> def multiply(m: Int)(n:Int): Int = m * n
multiply: (m: Int)(n: Int)Int
scala> multiply(2)(4)
res3: Int = 8
scala> val timesTwo = multiply(2) _
timesTwo: Int => Int = <function1>
scala> timesTwo(3)
res4: Int = 6
scala> (addr _).curried
res8: Int => (Int => Int) = <function1>
scala> def capitalizeAll(args: String*) = {
| args.map { arg => arg.capitalize
| }
| }
capitalizeAll: (args: String*)Seq[String]
scala> capitalizeAll("rarity", "applejack")
res12: Seq[String] = ArrayBuffer(Rarity, Applejack)
클래스
scala> class Calculator {
| val brand : String = "HP"
| def add(m: Int, n: Int): Int = m + n
| }
defined class Calculator
scala> val calc = new Calculator
calc: Calculator = Calculator@e7a7ed9
scala> calc.add(1,2)
res13: Int = 3
scala> calc.brand
res14: String = HP
scala> class Calculaotr(brand: String) {
| /**
| * 생성자
| */
| val color: String = if (brand == "TI") {
| "blue"
| } else if (brand == "HP") {
| "black"
| } else {
| "white"
| }
|
| // 인스턴스 메소드
| def add(m: Int, n: Int) : Int = m + n
| }
defined class Calculaotr
scala> val calc = new Calculaotr("HP")
calc: Calculaotr = Calculaotr@6b448973
scala> calc.color
res15: String = black
scala> class Test {
| val finc = { () => acc += 1}
| def mic = { acc += 1 }
| var acc = 0
| }
defined class Test
scala> val c = new Test
c: Test = Test@6c10fc3
scala> c.mic // c.mic()를 호출 함.
scala> c.finc
res18: () => Unit = <function0> // 함수 자체를 반환
메소드와 함수의 차이가 뭐지?
val과 var의 차이는 var은 변수, val은 함수나 객체를 받아주는 것인가?
=>, _ 의 용도 정확히 모르겠다!?
aList.map(a => a.{연산}) == aList.map(_.(연산))
람다로 들어오는 파라미터 자체를 함축 사용!
일단은 그냥 GO! 문법은 여기까쥐~
- 끝 -
'Language > Scala' 카테고리의 다른 글
couchbase와 같은 키/벨류의 key design?? (0) | 2016.04.15 |
---|---|
(기초) 스칼라 데이터 구조(컬렉션) (0) | 2016.03.25 |