Java
Scala

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

More than 1 year has 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]