算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Kotlinの基本型

Kotlinの基本型について調べましたので、そのまとめ。
※下記URLのサイトを参考にしました。英語、または技術的な知識が至らず、内容に誤りが含まれるおそれがありますので、ご了承ください。また、載せているコード例は自作のものであり、参考サイトから引用したものではありません。
※本エントリの8割は参考サイトの翻訳です。残りの2割は私の解釈で加筆や変更を施した構成です。

参考サイトhttp://confluence.jetbrains.net/display/Kotlin/Basic+types

追記(2012-01-13 11:12)
String型について追記しました。

はじめに

Kotlinではすべてがオブジェクトです。いくつかの組み込み型が存在しますが、使い勝手は普通のクラスと同じです。

数値

Kotlinが扱う数値はJavaと似ていますが、完全に同じわけではありません。
例えば、Kotlinでは暗黙の型変換はありません。つまり、次のコードはコンパイルエラーとなります。

val a : Int = 5
val b : Double = a

Kotlinが提供する数値の組み込み型は次の表の通りです。

ビット幅
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8
明示的な型変換

次のコードでは明示的な型変換を行っています。

val a : Int = 'A'.int
val b : Char = 70.chr
val c : Byte = a.byt

インスタンス、ドットに続けて変換したい型に対応する文字列(なんて言うんだろうw)を指定して型変換します。

その文字列(名前はわからない)
Byte byt
Short sht
Int int
Long lng
Float flt
Double dbl
Char chr
リテラル

10進数と16進数はJavaと同様の書式です。
Kotlinでは2進数はサポートしていますが、8進数は使用できません

val d = 12.3e-4
val h = 0xf
val b = 0b0110
論理演算子/ビット演算子

Kotlinでは論理演算子、ビット演算子はJavaのように特別な文字(&など)で表現されるわけではなく、関数によりその機能が提供されています。
その関数はinfix form、つまりドットや括弧を省いた形で呼び出せます。

演算子(関数) 意味
shl(bits) 左シフト
shr(bits) 符号付右シフト
ushr(bits) 符号なし右シフト
and(bits) 論理積
or(bits) 論理和
xor(bits) 排他的論理和
inv() ビット反転
val a = 0b1010 shl 2
val b = 0b1100 and 0b1001
val c = 5.inv()

文字

文字はChar型によって表現されます。文字は数値として直接扱うことはできません。文字リテラルはJavaと同様にシングルクオートで囲みます。明示的な型変換により、Int型の数値に変換することができます。

真偽値

Boolean型は真偽値を表現します。取りうる値は true と false です。組み込み演算子として || と && が提供されています(Javaと同じ意味)。

配列

KotlinではArrayクラスにより配列が表現されます。それはget関数とset関数(それらは演算子オーバロードにより [] と同じ)、サイズ、その他便利なメンバ関数を少し持っている。
配列を作るためには、Arrayクラスのコンストラクタを呼び出します。コンストラクタの引数には、配列のサイズと、配列の要素の初期化のための関数を渡します。
例えば、サイズが4で、5から始まり、3ずつ増える数列(つまり5, 8, 11, 14)を配列として作る場合は次のコードになります。

val array = Array<Int>(4, {i -> 5 + i *3})

また別の方法として、array()というライブラリ関数を使用する方法もあります。

val array = array(5, 8, 11, 14)

配列の要素全てにアクセスする方法は次の2つがあります。

for(e in array.indices) {
  println(array[e])
}
for(e in array) {
  println(e)
}

文字列

文字列はString型によって表現されます。文字列はイミュータブルです。文字列の要素は文字で、インデクシング演算子(s[i]など)によってアクセスできます。

文字列リテラル

Kotlinでは2つのタイプの文字列リテラルがあります。
まずはJavaと非常に似ているエスケープ文字列。

val str = "hogehoge\n"

そして、生文字列 (raw string)。これはトリプルクオート(""")で囲まれた文字列で、エスケープ文字列とは異なり、エスケープシーケンスを特別視せず(つまり \ は単に \ という文字として解釈される)、改行を含むことができます。

val str = """
  abc
  def
  \n
"""
テンプレート

文字列はテンプレート式を含む場合があります。テンプレート式とは、コードが評価された結果を文字列内に連結することができる仕組みです。テンプレート式はドルマーク($)で始まり、それに続いて名前や、中括弧({ })で囲まれた任意の式で構成されます。

fun main(args : Array<String>) {
  println("args.size = ${args.size}")
  for(i in args.indices) {
    println("args[$i] = ${args[i]}")
  }
}