【Kotlin】Kotlin Lesson Vol.4 - Kotlinの文法:データ型

in #promari5 years ago (edited)

k5l5kz0qw9.png

はじめに

前回は、はじめてのKotlinの文法:変数について学習しました。今回はKotlinの文法:関数ついて説明していきます。以下は前回までの記事です。

第2章:Kotlinの文法

2.1 変数

2.2 関数

2.3 データ型

2.3.1 基本型

Kotlinは、他の言語と同じようにInt、Double、Boolean、Charなどの型が用意されています。ただし、Javaと違ってプリミティブ型は用意されていません。Int型やBoolean型などすべてがオブジェクトのように動作します。Javaがint、doubleなどに対応するInteger、Doubleなどのラッパー型があるのとは対照的ですね。

ただし、オブジェクトだからといってパフォーマンスの懸念はありません。Kotlinは、パフォーマンスを向上させるために、String以外は、実行時にInt、Char、Booleanなどのオブジェクトをプリミティブ型に最適化してくれるからです。

2.3.1.1 数値型(Numbers)

Kotlinの数値型はJavaに似ていて、整数型と浮動小数点型に分類できます。

  • 整数型(Integers)
説明
Byte8ビット符号付き整数
Short16ビット符号付き整数
Int32ビット符号付き整数
Long64ビット符号付き整数
  • 浮動小数点型(Floating Point Numbers)
説明
Float32ビット浮動小数点数
Double64ビット浮動小数点数

以下に数値型の例を示します。

val aByte: Byte = 11
val aShort: Short = 111

val aInt = 1000       // 10進数(型推論の場合)
val aLong = 1000L     // サフィックスに'L'を付けると、Long型。これでコンパイラは型推論でLong型と推論します。

val aDouble = 126.78  // 浮動小数点はデフォルトでDouble型
val aFlout = 126.78f  // サフィックスに'f'または'F'を付けると浮動小数点型になります。

val aHex = 0x0AFF     // プレフィックスに'0x'または'0X'を付けると16進数
val aBinary = 0b1100  // プレフィックスに'0b'または'0B'を付けると2進数

2.3.1.2 論理型(Booleans)

論理型は他の言語と同じ様にtrueとfalseの2つの値を取ります。

val aBoolean = true
val bBoolean = false

2.3.1.3 文字型(Characters)

文字はChar型を使用します。ただし、注意点があり、Javaとは異なり、Char型は数値としては扱うことはできません。Char型を表すにはシングルクォートを使います。

val aChar = 'A'
val dChar = '9'
val lChar = '\n'
val uChar = '\uFF00' // UNICODE

2.3.1.4 文字列型(Strings)

文字列はStringクラスを使って表現されます。文字列型は、Javaと同様にイミュータブルな変数として表されます。

val name = "tamito0201"

配列のように[index]を使用して、String内の特定のインデックスにある文字にアクセスできます。

val name = "tamito0201"
val charIndex = name[0]   // 't'
val lastChar = name[name.length - 1]   // '1'

// 配列なのでループで回すこともできます。
for (chr in name) {
    printn(chr)
}

// 二重引用符(ダブルクォート)で宣言された文字列は、 '\ n'(改行)、 '\ t'(タブ)などのようにエスケープ文字を含むことができます。
val aEscapedStr = "Hello tamito0201\nHow are you?"

// Kotlinではトリプルクォートを使ってエスケープがない複数行にまたがる文字列を格納できる。
val aMultilineStr = """
ここにかいた文字列は
改行も含めて、そのままの文字列が出力されます。
   インデントも。これ便利ですね。
"""

// $を使って文字列の中に変数の値や計算結果を埋め込めます。
val i = 100
avl str = "i = $i, i ÷ 10 = ${i / 10}"   // "i = 10, i ÷ 10 = 10"

2.3.2 型変換

// 整数の数値代入
val b: Byte = 1      // IntをByteと見なしてくれる
val l: Long = 100    // OK
val i: Int = 1L      // NG。明示的にLongを指定すると代入できない。
val f: Floug = 3.0   // NG。浮動小数点はデフォルトでDouble型なのでNG。暗黙的な型変換はKotlinには存在しない。
val d: Double = 3    // NG。整数を浮動小数点とはみなさない。

// 小さな型から大きな型への暗黙的キャストはKotlinではできない
val a: Byte = 1
val b: Int = a       // NG。

// 型は以下のように明示的に変換します。
// IntからLongの型変換
val aInt = 100
val aLong = aInt.toLong()

// 大きな型から小さな型への変換
val doubleValue = 123.45
val intValue = doubleValue.toInt()   // 123

// Kotlinのすべての型は、Stringに変換するためのtoString()というヘルパー関数をサポートしています。
val aInt = 1111
aInt.toString()      // "1000"

// 文字列から数値型への変換
val str = "1111"
val intValue  = str.toInt()

//  文字列から数値への変換が不可能な場合
// str = "1111AAA"
str.toInt()          // Throws java.lang.NumberFormatException

2.3.3 ビット演算

Kotlinでは論理演算子、ビット演算子はJavaのように特別な文字(&など)で表現されるわけではありません。関数によりその機能が提供されています。

KotlinJava説明
shl<<左シフト
shr>>符号付右シフト
ushr>>>符号なし右シフト
and&論理積
or論理和
xor^排他的論理和
inv()~ビット反転

おわりに

如何でしょうか。基本型一つにとってもJavaとは異なる点が多いかと思います。こうして新しい言語を学ぶときは基本型に立ち戻り、仕様を比較してみるのもよろしいかと思います。

次回は、Kotlinにおける配列型について説明したいと思います。

プロマリはあなたのエンジニアデビューをサポートします。

t0r78hqbeu.png
written by たみと@promari

プログラミングとのご縁結びならプロマリへ。

オンラインプログラミング学習スクールのプロマリは、プログラミングの初学者の皆様を応援しています。プログラミング講師と一緒に面白いアプリを作りませんか。

btpb5hmlur.png

The programming school "Promari" will help you learn programming. "Promari" is supporting the first scholars of programming. Let's develop an application with our programming instructor.