はじめてのScala その2 言語仕様(1)
前回はScalaの導入でしたが、今回はScalaの言語仕様について調べることにした。
理由は日本語でまとまった文献がみつからなかったから。
ということで、↓が元ネタ
http://www.scala-lang.org/docu/files/ScalaReference.pdf (2008/05/29現在でversion 2.7)
可能な限り、元ネタの章立てにのっとってまとめることにする。
文法
BNFとかは省略。気が向いたら書くかも 明日書きます。
プリミティブ型
byte (-128 〜 127) = 8bit short (-32768 〜 32767) = 16bit char (0 〜 65535) = 16bit 符号なし int (-2147483648 〜 2147483647) = 32bit long (-9223372036854775808 〜 9223372036854775807) = 64bit float (-128 〜 127) = IEEE 754 32bit 単精度 double (-128 〜 127) = IEEE 754 64bit 倍精度 boolean (true, false) String
Javaと一緒。
Identifiers (予約語のみ抜粋)
abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected requires return sealed super this throw trait try true type val var while with yield _ : = => <- <: <% >: # @
Newline Characters (改行ではなくて文の終端文字)
セミコロン(;)または改行
これはRubyと同じ。
- 文末にかける識別子
this null true false return type <xmlstart> _ ) ] }
- 文頭にかけない識別子
catch else extends finally forSome match requires with yield , . ; : _ = => <- <: <% >: # [ ) ] }
Literals (定数)
- 整数 (Int or Long)
- 小数 (Float or Double)
- Boolean (true or false)
- Character ('〜')
- String ("〜")
- Multiline-String ("""〜""")
- Symbol ('〜)
JVM上で動くのでここは対応するJavaと同じ表記になっていることがわかる。
整数、小数の記述方法はJavaとまったく同じなので省略した。
Multiline-StringとSymbolがJavaにはないリテラル。
Miltiline-StringはこれはRubyとかのヒアドキュメント表記と似たような感じで、"""〜"""で囲んだ文字列を改行を含めて保持する。
例えばこんな感じ。
"""the present string spans three lines."""
SymbolはこれもRubyのシンボルと同じで、実態はscala.Symbolクラスのインスタンスとなる。
override def toString: String = 'name
上記は scala.Symbol("name") の短縮表記
XML mode
XMLが文法としてサポートされていて、直接かけて、中に{〜}形式でscalaのトークンを埋め込める。
JavaのVelocityとかJSP、RubyのERBに似た感じ。
val b = <book> <title>The Scala Language Specification</title> <version>{scalaBook.version}</version> <authors>{scalaBook.authors.mkList("", ", ", "")}</authors> </book>
とりあえず予約語とかリテラルとかはこれで終了。
長くなってきたので、今日はここまで。
明日からはクラス定義とかを調べていくことにする。