스칼라
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도 객체도 사용 할 수 있다.
보면 볼수록 꽤 괜찮은 언어같다.
아직 초보라 긴가민가 하는것도 많다.
열심히 해야겠다.ㅜㅜ