본문 바로가기
Language/Scala

(기초) 스칼라 문법

by 태하팍 2016. 3. 25.
반응형



참고 사이트 : 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