この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Rubyで書くあれはScalaだとどう書くの?シリーズ。 今回は値や式についてまとめてみました。
数値
種類 | Ruby | Scala | 備考 |
---|---|---|---|
整数 | 123 | 123 2147483647L | 整数は32bit(Int),64bit(Long)の2種類がある |
実数 | 123.45 | 123.45 123. 123.45d 123.45f | 実数はDoubleとFloat |
浮動小数 | 1.2e-3 | 1.2e-3 | |
16進整数 | 0xffff | 0xffff | |
8進数 | 0377 | ゼロから始める8進数表記はScala 2.11から非推奨 | |
2進整数 | 0b1011 | 2進数のリテラルなし | |
桁区切り文字 | 1_000_000_000 | 桁区切り文字はなし |
文字列
種類 | Ruby | Scala | 備考 |
---|---|---|---|
ダブルクォート | "this is a string expression\n" | "this is a string expression\n" | |
シングルクォート | 'this is a string expression' | 'a' | シングルクォートはChar型を表すため文字列には使えない |
シンボル | :aaa | 'aaa | |
ヒアドキュメント | < | """foo bar baz """ | 改行を含む文字列はダブルクォートを3つ重ねる(Raw String)。バックスラッシュによるエスケープが効かない。 |
式埋め込み | "foo #{1 + 2} baz" | s"foo ${1 + 2} baz" | ダブルクォートの前に小文字のs (interpolator) を置く |
フォーマット | sprintf("foo %d baz", 123) "foo %d baz" % [123] | "foo %d baz".format(123) |
変数
種類 | Ruby | Scala | 備考 |
---|---|---|---|
変数 | a = 123 | var a = 123 | |
定数 | A = 123 | val a = 123 | 変数をvalで宣言すると再代入がコンパイルエラーになる(Rubyの定数より厳格) |
演算子
ScalaもRubyと同じように演算子の一部がメソッドのシンタックスシュガーとして定義されている。
1 + 2
は 1.+(2)
のシンタックスシュガー
種類 | Ruby | Scala | 備考 |
---|---|---|---|
代入 | foo = bar | foo = bar | 再代入が必要な時はvarで宣言する |
配列参照 | array[1] | array(1) | カッコによる配列参照はメソッド呼び出し .apply(n) のシンタックスシュガー |
属性参照 | foo.bar | foo.bar | 引数なしのメソッドをカッコ省略できる |
自己代入 | foo += 1 | foo += 1 | 再代入があるのでvar変数として宣言が必要 |
多重代入 | foo, bar, baz = 1, 2, 3 foo, bar, baz = [1, 2, 3] | (foo, bar, baz) = (1, 2, 3) Array(foo, bar, baz) = Array(1, 2, 3) | 多重代入はパターンマッチのシンタックスシュガー |
範囲式 | 1 .. 20 | 1 to 20 1.to(20) | 整数クラスの .to() メソッドを使う。引数が1つしかないメソッドはドットやカッコを省略できる。 |
アンド条件 | foo && bar foo and bar | foo && bar | 演算子 and は使えない |
オア条件 | foo || bar foo or bar | foo || bar | 演算子 or は使えない |
否定 | !foo not foo | !foo | 演算子notは使えない |
3項演算子 | obj == 1 ? foo : bar | if (obj == 1) foo else bar | 3項演算子がないのでif式を使う |
※読みやすいレイアウトでまとめましたサイトを作りましたので、こちらもご参照ください。
http://kkismd.github.io/rb2scala/