Posted at

java経験者のScala入門メモ [基礎知識]

More than 3 years have passed since last update.

いままでjavaやpython,javascriptなんかをやってきて

まともに使える言語をjava以外に習得したいと思いscalaを初めてみた。

しかし、書籍などの情報源があまりないので自分なりにメモとしてまとめてみる

scalaのインストールについては割愛


scalaコメント

scalaでのコメントはjavaと同様の方法で行える


//一行コメントならこれ

/*
複数コメントならこれでok
*/


基本型

基本型(プリミティブ型)はjavaでの基本型の先頭を大文字にしたもの

例:

java -> scala

int -> Int

long -> Long

double -> Double

float -> Float

みたいな感じ

それ以外にscalaには独自の型があって

BigDecimalとBigIntというもの

これに関してはまだわからないから後でまとめる

ちなみにscala基本型にはString(javaでは参照型)も含まれる


リテラル

ここではよく使うデータ型のリテラルについてまとめる


整数リテラル


var a = 123//これがInt
var b = 123L//L,lがつくとLong

上記の様にLong型を明示的に指定したい場合は文末にL,lをつける

8進数、16進数に関しては0,0xで扱える


浮動小数点リテラル

これはほぼ整数と変わらない


var c = 12.3//これがDouble
var d = 12.3F//F,fがつくとfloat

明示的にFloatを宣言したいときはfをつける


ブールリテラル

これはすごく簡単で単純にtrue or falseのこと


var e = true
var f = false


文字リテラル,文字列リテラル

これも簡単

var g = 'a'
//これはChar

var h = "a"
//これはString

シングルクォートで囲まれていればChar

エスケープは他言語と同様


シンボルリテラル

ここまではjavaとほぼ同様だったけど

急にシンボルリテラルなる不思議なものが登場した

なにやら、こう定義するらしい


//これがシンボルリテラル
var x = 'hello

これを出力すると


print(x)
//x: Symbol = 'hello
//となる

さらにシンボルの変数に対して「.name」をつかうと'よりあとの部分を参照できる


x.name//これで参照

まったく使い方がわからない

わかったらあとでまとめる


変数宣言

やっと変数宣言

まず定義として

「var」は変更可能な変数

「val」は変更不可な変数(javaでいうfinalみたいな)

それを踏まえてこう宣言する

//javaでいう int a = 1;と同じ

var a = 1

//javaでいう final int a = 1
val a = 1

ちなみにval,varだけで定義してきた今までの方法は型推論といわれ自動で型を解釈してもらえるような仕組みを使ったもの(スクリプト言語経験者には馴染み深いかも)

明示的に型を宣言するならこうする


var a:Int = 1
val a:Int = 1

[var,val] 変数名:データ型 = 値

みたいな感じ


デフォルト値

実は変数の値の部分を「_」にすることがscalaでは出来て

型を明示的に宣言した場合のみ使用でき、変数にはデフォルト値が代入される

・Int -> 0

・Long -> 0

・Double -> 0.0

・Float -> 0.0

・Char -> '\0'

・Boolean -> false

・参照型 -> null


if式

scalaではifは文ではなく式として扱うので値を返すものと定義されるらしい

だから以下のように記述出来る


var a:Int = if(true) 1 else 0
println(a)

といっても普通通り文としても使えるみたい


var a:Int = 1;
if (a == 1) println("a = 1") else println("a != 1")
//print -> a = 1


while文,do~while文

ifは式だったけどwhileは文としてあつかう


var a = 1;
while (a < 10) a = a+1
println(a);//print -> 10

ほぼjavaのwhile文と変わらない


var a = 1
do
a = a + 1
while(false)

print(a)//print -> 2

do~whileも同様


ブロック式

javaでブロックを作ることはできなかったけど

Scalaでは明示的に作成出来る、ただ{}で囲むだけ

この時スコープに注意


型チェック

scalaではinstanceOfを型チェックに使う


var a = 1
a.instanceOf[Int]//return -> true


キャスト

scalaのキャストはasInstanceOf[型名]で行う

var a:Long = 1
a.asInstanceOf[Int]