아래의 Groovy 언어 용으로 작성된 소스를 Scala 언어 용으로 고친 것이다.
Scala 언어에서 주석문(// 및 /* ... */), while 반복문은 Java 언어의 것과 동일하다.
var 은 변수를 선언할 때 붙이는 Scala 예약어이고,
배열이나 리스트의 한 요소를 가져오는 Scala 구문은 array(index), list(index) 이다.
(Groovy 언어의 구문 array[index], list[index] 과 비교하기 바란다.)


소스 파일명: testWhile.scala
 

  1. /*
  2.  *  Filename: testWhile.scala
  3.  *
  4.  *  Purpose:  Example using the while loop syntax
  5.  *                while ....
  6.  *
  7.  *  Execute: scala testWhile.scala -200 300
  8.  *
  9.  */
  10. // java.lang.Math 클래스를 명시적으로 import하는 구문이 없어도
  11. // Scala는 이 클래스를 자동으로 import한다.
  12. // 사용법 표시
  13. def printUsage() {
  14.     println("Using: scala testWhile.scala [integer1] [integer2]")
  15.     println("This finds the greatest common divisor of the given two integers.")
  16. }
  17. if (args.length != 2) {
  18.     printUsage()
  19.     System.exit(1)
  20. }
  21. var val1 = args(0) toLong
  22. var val2 = args(1).toLong
  23. var a, b, q, r, gcd = 0L
  24. ////////////////////////////////////////////////
  25. // 명령행 인자의 두 스트링을 가져와서
  26. // 긴정수(long) 타입으로 변환하여
  27. // 변수 val1과 val2에 저장한다.
  28. a = Math.abs(val1)
  29. b = Math.abs(val2)
  30. // a는 |val1|, |val2| 중 큰 값
  31. if (a < b) {
  32.     a = Math.abs(val2)
  33.     b = Math.abs(val1)
  34. }
  35. if (b == 0L) {
  36.     println("GCD(" + val1 +", " + val2+ ") = " + a)
  37.     System.exit(0)
  38. }
  39. ////////////////////////////////////////
  40. // Euclidean 알고리즘의 시작
  41. //
  42. // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
  43. q = a / b
  44. r = a % b
  45. ////////////////////////////////////////
  46. // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
  47. while (r != 0L) {
  48.     a = b
  49.     b = r
  50.     q = a / b
  51.     r = a % b
  52. }
  53. // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
  54. gcd = b
  55. // 최대공약수(GCD)를 출력한다.
  56. println("GCD(" + val1 +", " + val2+ ") = " + gcd)


실행> scala -encoding MS949 testWhile.scala
Using: scala testWhile.scala [integer1] [integer2]
This finds the greatest common divisor of the given two integers.

실행> scala -encoding MS949 testWhile.scala -50, 200
GCD(-50, 200) = 50

실행> scala -encoding MS949 testWhile.scala 50, -30
GCD(50, -30) = 10

실행> scala -encoding MS949 testWhile.scala 0, 30
GCD(0, 30) = 30




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,

Scala 언어에서 if ... else ... 구문은 Java의 것과 동일하다.
스트링을 Double 터입을 변환하기 위해서는 toDouble 메소드를 사용한다. ("스트링".toDoube() 이 아니라 "스트링".toDoube 임에 주의한다.)
또 Scala 언어에서는 var, val 이 모두 예약어(keyword)이므로 변수명 val 을 쓰지 못하고 value 라고 하였다.


소스 파일명: testIf.scala

  1. /*
  2.  *  Filename: testIf.scala
  3.  *
  4.  *  Purpose:  Example using the conditional control structure syntax
  5.  *                if .... else ...
  6.  *
  7.  *  Execute: scala testIf.scala [number]
  8.  */
  9. def printUsing() {
  10.    println("Using: scala testIf.scala [number]")
  11.    println("This determines whether the number is positive or not.")
  12. }
  13. if (args.length != 1) {
  14.     printUsing()
  15.     System.exit(1)
  16. }
  17. ////////////////////////////////////////////////
  18. // 명령행 인자의 스트링을 가져와서
  19. // 배정밀도 부동소수점수로 변환하여
  20. // 변수 value에 저장한다.
  21. var value = args(0).toDouble
  22. // 변수 val에 저장된 값이 양수인지 음수인지 0인지를
  23. // 판단하는 if...else... 조건문
  24. if (value > 0.0)
  25.     println(value + " is a positive number.")
  26. else if (value < 0.0)
  27.     println(value + " is a negative number.")
  28. else
  29.     println(value + " is zero.")



실행> scala -encoding MS949 testIf.scala
Using: scala testIf.scala [number]
This determines whether the number is positive or not.

실행> scala -encoding MS949 testIf.scala 5
5 is a positive number.

실행> scala -encoding MS949 testIf.scala -5
-5 is a negative number.

실행> scala -encoding MS949 testIf.scala 0
0.0 is zero.




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,
Scala 언어에서 args는 예약어이다. 이는 Groovy 언어에서의 args와 같다.
 
리스트나 스트링의 길이를 구하는 메소드는 length 이고,
부분 문자열(스트링)을 구하는 메소드는 Java 언어에서 처럼 substring() 이다.



소스 파일명: testArguments.scala
  1. var sum = 0.0
  2. println("Count of arguments: " + args.length)
  3. for (i <- args) {
  4.     sum += i.toDouble
  5. }
  6. var strSum = "" + sum
  7. if (strSum.endsWith(".0"))
  8.     strSum = strSum.substring(0, strSum.length - 2)
  9. println("The sum of arguments is " + strSum)



실행> scala testArguments.scala 1 2 3 4
Count of arguments: 4
The sum of arguments is 10


실행> scala testArguments.scala 1 2 3 4.5
Count of arguments: 4
The sum of arguments is 10.5





Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,

Scala 언어의 함수 정의 구문 양식은

       def functionName(parameters) {
             block
     }

이다.

또 Scala 언어의 전형적인 for 반복문 양식은

       for (iterator) {
             block
     }

이다.



소스 파일명: ForTest.scala
------------------------------[소스 시작]
def printDan(dan: Int) {
  for (i <- List.range(1, 10)) {
    println( dan + " x " + i + " = " + (dan*i) )
  }
}

printDan(2)
------------------------------[소스 끝]

실행> scala ForTest.scala
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18





Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,
컨솔에 문자 출력하는 Scala 구문은

       println("문자열(스트링)")

       print("문자열(스트링)")

이다. Scala 언어에서는 Groovy/Python/Ruvy 언어와 달리 println(.....) 처럼 반드시 소괄호가 있어야 한다. println 구문은 개행 문자 "\n" 없이 개행하지만, print 구문은 개행 문자 "\n"를 추가해야 개행한다.
 
소스 파일명: hello.scala
------------------------------[소스 시작]
println("Hello, world!")
------------------------------[소스 끝]

실행> scala hello.scala
Hello, world!

Posted by Scripter
,
Scala 소스 코드: 파일명 Complex.scala
class Complex(real: double, imaginary: double) {
  def re = real
  def im = imaginary
  override def toString() = "" + re + (if (im < 0) "" else "+") + im + "i"
}


scalac  명령으로 컴파일한다.:

프롬프트> scalac Complex.scala


Groovy 소소코드: 파일명 ComplexMain.groovy

println new Complex(1.2, 3.4)


scala-library.jarCLASSPATH 에 잡아준 후:

프롬프트> groovy ComplexMain
1.2+3.4i



만일 순수 Groovy 코드 만으로 작성한다면

class Complex {
  def re, im
  Complex (double real, double imaginary) {
    re = real
    im = imaginary
  }
  String toString() { "$re" + (im<0 ? '' : '+') + im + 'i' }
}


Scala 언어 홈페이지는 http://www.scala-lang.org 이다
Posted by Scripter
,