ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스칼라 기초 문법
    카테고리 없음 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도 객체도 사용 할 수 있다. 보면 볼수록 꽤 괜찮은 언어같다. 아직 초보라 긴가민가 하는것도 많다. 열심히 해야겠다.ㅜㅜ

    댓글

Designed by Tistory.