카테고리 없음

스칼라 기초 문법

머룽 2023. 4. 18. 12:31

스칼라

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