日々精進

aikoと旅行とプログラミング

Kotlinスタートブックを読んでいくよ【2日目】

第4章 基本的な文法

変数と基本データ型とそのリテラル

ビット幅
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8
  • Doubleを表現するリテラルは, 123.4e2のような形で表現することができます.
  • 0xを頭につけることで16進数, 0bを付けることで2進数を表現することができます.
その他の基本形
種類
Boolean 真偽値
Char 文字
String 文字列
  • Booleanはtrueかfalseの2値しかとらない
  • Charは1文字を表す(シングルクォートで表す)
  • Stringは文字列(ダブルクオートで表す)
変数

変数の宣言は以下のように行う.

val 変数名: 型 = 式
var 変数名: 型 = 式
  • valはimmutableであるため, 1度代入した後は変更ができない.
  • 再代入をしたい場合は, 変数をvarで宣言する.
  • 原則として, valを使用するべき,
型推論

Kotlinコンパイラ型推論を行ってくれるので,

val name: String = "d(^_^o)"

という記述は,

val name = "d(^_^o)"

と書くことができる.

様々なオブジェクト

文字列
  • 文字列はimmutableである.
  • Stringリテラルは, ダブルクオートで囲った0文字以上の文字列のこと.
  • 以下のようなメソッドが定義されている.
名前 仕様
length 文字列の長さを返す
capitalize 1文字目を大文字にして返す
isBlank 空白 or 空文字であるかを判定する
  • 文字列リテラル内に${式}と記述することで, その場所に式が評価された値が埋め込まれる.(Stringテンプレート)
  • ダブルクオーテーション3つ(“”“)で囲むことで, raw stringとなる.
    • raw string内でもStringテンプレートは使用可能である.
  • raw stringでは, 先頭に|を置いて目印にすることが多い.
"""
  | aaaa
  | bbbb
  | cccc
""".trimMargin()

trimMargin()は, |をエスケープする.

fun String.trimMargin(marginPrefix: String = "|"): String (source)
配列

配列はクラスArrayで表現される. - 配列の生成方法

val arrays = arrayOfNulls<Int>(5)         // デフォルトの値がNullの要素数5である配列
val strs = arrayOf("aaa", "bbb", "ccc") // 引数に指定した要素を持つ配列を生成する
  • 配列のサイズは, プロパティsizeを使用する.
arrays.size // => 5
  • 添字は0-indexである.
  • ボクシングのオーバーヘッドが気になる場合は, intArrayOfのような関数を使うと良い.
リスト
  • リストは順序付きのコレクション. listOfで生成.
val ints: List<Int> = listOf<Int>(1, 2, 3)
println(ints.size) // => 3
println(ints[2])   // => 3
  • リストは要素の変更はできない. 通常のListはimmutableである.
  • mutableなリストは, MutableListというインタフェースで表現される.
val ints: MutableList<Int> = mutableListOf(1, 2)
ints[1] = 3
println(ints) // => [1, 3]
セット

セットは集合を表すコレクション

val im_set: Set<Int> = setOf(1, 2, 2, 3, 3, 1)
println(im_set) // => 1, 2, 3
val m_set: MutableSet<Int> = mutableSetOf(1, 2, 2, 3, 3, 1)
m_set -= 2
println(m_set)  // => 1, 3
  • セットは順序関係がないため, インデックスでのアクセスはできない.
マップ

マップはキーとそれに対応する値を保持するコレクション

// MutableMap<keyの型, valueの型>
val m1: MutableMap<String, Int> = mutableMapOf("one" to 1, "two" to 2)
println(m1)               // => {one=1, two=2}
println(m1.size)       // => 2
println(m1["one"])   // => 1
m1 += "three" to 3  // 要素を追加
println(m1)               // => {one=1, two=2, three=3}
  • mapに格納する値は, Pairオブジェクトである必要がある.
  • Pairオブジェクトは, to の形式で生成可能.

とりあえず今日はここまで. (P55)