Version 45 (modified by drry, 5 years ago)

リストの途中に空行が入ると、リストが分断されますのでご注意くださいまし。

Scala Sandbox TOP

Scala-sandbox-docs

Scala-sandboxの文書ページです.

技術情報やライブラリの使い方,FAQ(Q&A)などがここに書かれます.

なお,このページとは別にScala-sandboxのトップページがあります.

技術情報

文法

  • val
    • valで定義した変数は、一度値を設定した後は更新することができません (Javaのfinalのようなものです)。あくまで、更新できないのは変数の値で であって、変数が指している先のオブジェクトを変更することは可能であることに 注意してください(この点もJavaのfinalと同じです)。
      val a :Int = 10
      a = 20 //エラー。valで定義した変数の値を更新することはできない
      
      val b:Array[Int] = Array(1, 2, 3)
      b(0) = 2 //OK。変数が指しているオブジェクト(配列)の内容は更新できる
      
  • var
  • for
  • ブロック/クロージャ
  • class
  • object
  • apply/unapply
  • case class
  • パターンマッチ
  • implicit
  • 演算子を定義したい
  • 単行演算子を定義したい
  • setterを定義したい
  • getterを定義したい

FAQ(Q&A)

Javaからの移行

  • Scalaのfor文はJavaのfor文と違うようですが
    • Scalaのfor文はJavaのfor文とは意味がかなり違いますが,ほぼおなじ事ができます
      Java:  for(int i = 0; i < 10; i++) { ... }
      Scala: for(i <- 0 until 10) { ... }
      
      Java:  for(int i = 0; i <= 10; i++) { ... }
      Scala: for(i <- 0 to 10) { ... }
      
      Java:  for(String str : new String[] {"aaa", "bbb", "ccc"}) { ... }
      Scala: for(str <- Array("aaa", "bbb", "ccc")) { ... }
      
  • Scalaのwhile文の中にロジックを書きたい
    • Scalaのwhile文はループの評価式しか書けませんのでブロックを使って書きます
      Java:
        int len;
        while((len = in.read(b)) > 0} { ... }
      Scala:
        val len: Int = 0
        while({len = in.read(b); len > 0}) { ... }
      
  • Javaのコレクションを使いたい
    • scala.collection.jcl._を使いましょう.Scalaによって機能が拡張されますしGenericsも扱う事ができます
  • メソッドをsynchronizedしたい
    Java:  synchronized void foo() { ... }
    Scala: def foo() = synchronized { ... }
    
  • オブジェクトをsynchornizedしたい
    Java:  synchornized(foo) { ... }
    Scala: foo.synchronized { ... }
    
  • Javaのequals相当のことをするには?
    • Anyクラスのequalsまたは==メソッドを使いましょう。逆にJavaの==相当のことをしたいときは、 AnyRefクラスのeqメソッドを使います。

困った

  • パッケージ名に「scala」という名前があると,importできません
    • Scalaでは相対的にimportする事ができますが,パッケージ名に「scala」という名前があるとScala本来のパッケージをimportできなくなります.importするときに_root_.を先頭に 付加することで回避できますが、パッケージ名に「scala」という名前を含めない方が無難 でしょう。
      import _root_.scala.collection.mutable._
      
  • 予約語と同じ名前のメソッド(ex. Thread.yieldなど)を呼び出しできない
    • Thread.yieldの場合は,yieldが予約語で登録されているため,そのままでは呼び出しできません.この場合は,`名前`と書きます
      Thread.`yield`()
      

ソース(src)の説明

リンク

  1. 公式
  2. ドキュメント
  3. ライブラリ
    • Scala Actors:Actor関連
    • ScalaTest: Scalaテストフレームワーク
    • Specs: BDDなテストフレームワーク
    • Lift: Webアプリケーションフレームワーク
  4. 情報源
  5. 紹介記事
  6. ブログ
  7. その他、サンプルコードなど