Scala for Java programmers part2

提供: Astarisk Works Wiki

Scala for Java programmersの続き。

元ページはA. Sundararajan's Weblogです。

アプリケーション

Javaのどんなクラスはpublic static void main(String[])メソッドがあればアプリケーションとして起動できる。
public class Hello {
  public static void main(String[] args) {
    System.out.println("hello world");
  }
}
どんなオブジェクトもdef main(args: Array[String]) : unitメソッドがあればアプリケーションとして実行できる。

(Note: Scalaにはスタティックなメンバーはない。- シングルトンオブジェクトを使う必要がある)

object Hello {
  def main(args: Array[String]) : unit = {
    Console.println("hello world");
  }     
}

また、Applicationクラスを継承して次のように書いてもよい。

object Hello extends Application {
  Console.println("hello world");
}

しかし、コマンドライン引数を使うなら、最初の選択肢を使う必要がある。

Sequence-comprehension

(既存の列からフィルタリングやマッピングやそれらの組み合わせで新たな列を作るより容易な構文)

for-eachループを使い新たなリストを組み立てる 一般形態:

for(<generators>; <filter>) yield <expression>

例:

object Main extends Application {

 val list = List("Fortran", "Java", "Scala", 
                 "JavaScript", "ML");
 val shortList = 
   for (val e <- list; e.length() < 6) 
   yield e.toUpperCase()
 Console.println(shortList);
}

You could accomplish everything above by "map", "filter", "flatMap" calls on List(s). For-comprehension provides an easier syntax to work with. In the above case, we could have written "map"と"filter"と"flatMap"をリストに使ってやることですべてできる。より容易な構文を提供すると上記のコードは次のように書ける

object Main extends Application {
 val list = List("Fortran", "Java", "Scala", 
                 "JavaScript", "ML");
 val shortList = list.filter(e=>e.length() < 6)
                     .map(e=>e.toUpperCase());
   
 Console.println(shortList);
}

参考:Sequence Comprehensions.

個人用ツール