Search on the blog

2015年9月29日火曜日

[NewLang] Learn Scala(1)

 なんとなく新しい言語を学びたくなったので、Scalaについて勉強していこうと思う。
まずは、tutorialspointというサイトの『LEARN SCALA PROGRAMMING』を読んでみた。今日は半分くらいまで読んだ。

学んだこと
  • 2003年にMartin Odersky氏によって開発された言語
  • オブジェクト指向言語
  • 関数型言語
  • 静的型付け言語
  • JVM上で動作する
  • すべてオブジェクト。Primitive型はない。
  • mutableな変数はvarで宣言
  • immutableな変数はvalで宣言
  • 型推論あり
  • アクセス修飾子はprotected/privateの2つが指定可
  • アクセス修飾子を省略するとpublic
  • イコール記号とメソッドのボディを省略すると、メソッドはabstractになる
  • voidの代わりにUnitを使う
  • methodはクラスに属する処理
  • functionは変数に代入できる完全なオブジェクト
  • 戻り値の無い関数はprocedureと呼ばれる
  • call-by-name(変数: => 型)を使うと遅延評価
  • 無名関数は引数 => 戻り値のように宣言
  • 関数の部分適用をサポート
  • 関数のカリー化ができる

環境インストール
MacにScalaの環境をインストールした。
> brew install scala
> brew cask install scala-ide

サンプルプログラム
FizzBuzz、ユークリッドの互除法、たらい関数を書いてみた。
object FizzBuzz {
  def main(args: Array[String]) {
    var i = 0;
    for (i <- 1 to 100) {
      if (i % 3 == 0 && i % 5 == 0)
        println("FizzBuzz")
      else if (i % 3 == 0)
        println("Fizz")
      else if (i % 5 == 0)
        println("Buzz")
      else
        println(i)
    }
  }
}
object Gcd {
  def main(args: Array[String]) {
    println(gcd(132, 66));
  }
  def gcd(a:Int, b:Int) : Int = {
    if (b == 0)
      return a
    return gcd(b, a%b)
  }
}
object Tarai {
  def main(args: Array[String]) {
    println(tarai(20, 10, 5));
  }
  def tarai(x:Int, y:Int, z: => Int) : Int = {
    if (x <= y)
      return y
    return tarai(tarai(x-1,y,z), tarai(y-1,z,x), tarai(z-1,x,y))
  }
}

0 件のコメント:

コメントを投稿