| Version 45 (modified by drry, 5 years ago) |
|---|
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。変数が指しているオブジェクト(配列)の内容は更新できる
- valで定義した変数は、一度値を設定した後は更新することができません
(Javaのfinalのようなものです)。あくまで、更新できないのは変数の値で
であって、変数が指している先のオブジェクトを変更することは可能であることに
注意してください(この点もJavaのfinalと同じです)。
- 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のfor文はJavaのfor文とは意味がかなり違いますが,ほぼおなじ事ができます
- 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}) { ... }
- Scalaのwhile文はループの評価式しか書けませんのでブロックを使って書きます
- 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._
- Scalaでは相対的にimportする事ができますが,パッケージ名に「scala」という名前があるとScala本来のパッケージをimportできなくなります.importするときに_root_.を先頭に
付加することで回避できますが、パッケージ名に「scala」という名前を含めない方が無難
でしょう。
- 予約語と同じ名前のメソッド(ex. Thread.yieldなど)を呼び出しできない
- Thread.yieldの場合は,yieldが予約語で登録されているため,そのままでは呼び出しできません.この場合は,`名前`と書きます
Thread.`yield`()
- Thread.yieldの場合は,yieldが予約語で登録されているため,そのままでは呼び出しできません.この場合は,`名前`と書きます
ソース(src)の説明
リンク
- 公式
- ドキュメント
- ライブラリ
- Scala Actors:Actor関連
- ScalaTest: Scalaテストフレームワーク
- Specs: BDDなテストフレームワーク
- Lift: Webアプリケーションフレームワーク
- 情報源
- Scala-ja:日本のScalalian(仮)の寄り合い所w
- LingerBBS
- Raddit(Scala)
- 紹介記事
- ブログ
- その他、サンプルコードなど
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)