스칼라

예전부터 배우고 싶은 언어가 있었는데 그게 바로 스칼라다.
괜찮은아이 같아 조금씩 한번 살펴 보겠다.
필자도 처음 공부하는거라 틀릴 수도 있으니 주의!
스칼라는 모든것이 객체이다. 함수까지 객체다. 그래서 약간 헷갈리긴 한다.
그래도 한번 천천히 살펴보자!

일단 제일 기본인 hello world 를 찍자!

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello World")
  }
}

Hello World

나왔다.
일단 보니까 자바랑 비슷하다. 어쩔수 없나부다
그리고 여기서 중요한 사실은 ;(세미콜론) 이 없다는거다.
약간 어색하지만 보기는 좋다.
근데 자꾸 ;을 찍는다 습관이다.;;

첫 번째로 변수에 대해 알아보자.
변수는 두가지가 있다.
상수와 변수
상수는 val 변수는 var 타입 추론을 열심히 하는 모양이다.
그래도 자바엔 lombok 이 있다. 자바의 val는 약간 이상하서 잘 안쓴다. 그래도 좋은 라이브러리다!

var x = 1
x = 10
//compile error
x = "Hello world"
val y = 100
//compile error
y = 200

변수 x를 1로 선언했다. 그리고나서 10으로 변경 했다 var 선언했기 때문에 가능하다. 그리고나서 다시 Hello world로 바꾸었다.
에러가 난다. 오오 타입추론 아주 좋다.
그리고 val y 로 선언했다. 그리고나서 값을 바꾸어봤다. 역시 에러다. 상수이기 때문에.
val는 java의 fianl 이라고 생각하면 된다.

이번엔 문자열을 반복하는 메소드를 만들어보자
자바같은경우는 아마도 for문으로 했을 가능성이 있을 것이다.
스칼라를 보자

println("string" * 3)

끝이다. 정말 간단하다.

배열 선언을 보자

val list = List(1, 2, 3, 4, 5)
println(list)

아래와 같이 선언 할 수 도 있다.

(1 :: 2 :: 3 :: Nil).foreach(println)

다음은 map을 보자

val map = Map("key" -> 1, "key1" -> 2)
val key: Option[Int] = map.get("key")
println(key)

자바와 비슷하다.
Option이라는게 눈에 띈다. 아 물론 생략 가능하다.
이건 자바8에도 있는 기능같다
null point 를 방지하기 위한 객체 인듯싶다.

스칼라엔 Seq 라는 trait 가 있다.

val seq: Seq[Int] = Seq(1,2,3,4,5)
println(seq)

순서가 있다고 한다.
하지만 return 은 List 로 한다.
List 는 Seq 를 상속하고 있다.

sealed abstract class List[+A]() extends scala.collection.AbstractSeq[A] with scala.collection.immutable.LinearSeq[A] ... 

보니까 새로운 키워드가 많다.
나중에 천천히 살펴 보겠다.
일단 처음으로 scala를 배워 보았다. 나름 재밌는 언어 같다.
다음엔 함수에 대해 알아보겠다.