스칼라

trait을 알아보기전에 기초문법(?)을 알아보자
이게 사실 더 중요하니까

for

일단 for문 부터 알아보자
자바랑 약간 다르다.

val numbers = Array(19,42,85,33,100)

이런 배열이 있다고 하자
그럼 값을 꺼낼라면 이렇게 하면된다.

for(i <- numbers){
  println(i)
}

흠 처음 보는거지만 간단해졌다. 엥 나는 index를 뽑고 싶은데? 그럼 이렇게 하면된다.

for(i <- 0 to (numbers.length - 1)){
  println(numbers(i))
}

하지만 to는 마지막을 포함한다 그래서 -1을 해주었다.
이 얘기는 포함안되게 할 수도 있다는거다.

for(i <- 0 until (numbers.length)){
  println(numbers(i))
}

until 을 사용하면 된다.

흠 그럼 감소 연산은 어떻게 할까

for(i <- 10 to 0 ){
  println(i)
}

안된다.
몇가지 방법은 있다.
코드로 보자

for (i <- 10 to 0 by -1) {
  println(i)
}

이렇게 하거나

for (i <- (0 to 10).reverse){
  println(i)
}

이렇게 하면 된다. 조금 어색하긴하다.
또 한가지는 for문 자체를 변수에 담을 수 있다. 완전 1급 언어다.

val f = (s:Int) => for (i <- 0 to s) {
  println(i)
}

f(3)

while

이번에 while을 알아보겠다.
while의 syntax는 자바와 같다.

while(condition){
   statement(s);
}

이런형태의 문법을 갖고 있다.

var i = 0
while (i < 10){
  println(i)
  i+=1
}

흠 자바와 동일하다.
근데 여기서 i++ 하지 않고 i = i + 1 이런 형태로 한 이유는 없다.문법이. 스칼라에 i++이런 증감 연산하는 문법이 없다.
그래서 저렇게 해줘야 되는듯 싶다.
do while 도 동일하다.
자바와 동일해서 딱히 할 이야긴 없는거 같다.

if

이번엔 if 문이다.

if(boolean){
  //code
}else{
  //code
}

요 아이도 자바와 같다.

val value = 10;

if(value == 10){
  println(s"10 eq $value")
}else{
  println(s"10 ne $value")
}

그리고 스칼라에서 .(쩜) 닷() 을 생략 할 수 있다. 물론 ()는 파라미터가 두개 이상이면 안된다.
한번 이 코드를 보자!

class Dot {
  def twice(value:Int) =  value * 2
}

이런 클래스가 있다고 가정하자. twice는 두배를 해주는 function이다.

val dot = new Dot
print(dot.twice(10))

우리는 이렇게 호출 할 것이다.
하지만 닷과괄호가 빠진다면?

println(dot twice 10)

이렇게 해도 컴파일도 잘되고 어플리케이션도 잘된다.
왠지 익숙(?)한 문법이다. 위에서 한번 써봤다.

for(i <- 0 to 10 ){
  println(i)
}

이것도 원래는

for(i <- 0.to(10)){
  println(i)
}

이거다. 이말은 즉 숫자도 객체다. 모든것이 객체다.
0도 객체도 사용 할 수 있다.

보면 볼수록 꽤 괜찮은 언어같다.
아직 초보라 긴가민가 하는것도 많다.
열심히 해야겠다.ㅜㅜ