0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kotlin入門:変数とデータ型

Last updated at Posted at 2025-04-30

変数

Kotlinでは、変数の宣言においてイミュータブル(不変)とミュータブル(可変)の2種類のキーワードを使い分けます。これにより、安全かつ意図が明確なコードを書くことが可能になります。

val:再代入できない変数の宣言

val:再代入できない変数(イミュータブル)
fun main(){
    val age:Int = 20
}

・valは、一度値を代入したら再代入できない変数です。
・valは、宣言時に必ず初期化が必要です。
・安全性が高いため、Kotlinでは基本的にvalの使用が推奨されます。
・Javaでいうfinalのような働きをします。

ただし、valで宣言したオブジェクトがミュータブル(可変)な場合は、その中身を変更することは可能です。

var:再代入可能な変数の宣言

var:再代入可能な変数(ミュータブル)
fun main(){
    var age:Int = 30
    age = 31   //再代入可能:OK
}

・varは、値の再代入が必要なときに使います。
・状態が変わるようなデータにはこちらを使うのが適切です。

変数の名前(命名規則)

変数の命名規則
val userName:String = "Alice"       // ✅ OK: 一般的なcamelCase
val totalCount:Int = 42             // ✅ OK: 複数単語もcamelCaseで表現
val `fun`:String = "Reserved"       // ✅ OK: バッククォートで囲めば予約語も使える(非推奨)
val _internalId:Int = 123           // ✅ OK: アンダースコアで始まる名前は許容される(非推奨)
val $debugFlag:Boolean = true       // ✅ OK: `$`も使えるが一般的ではない(避けるのが無難)
val camelCaseName:String = "Taro"   // ✅ OK: KotlinではcamelCaseが標準

// val 1stUser:String = "Bob"       // ❌ NG: 数字で始めることはできない
// val fun:String = "Reserved"      // ❌ NG: Kotlinの予約語(キーワード)は使用不可
// val PascalCaseName:String = "NG" // ❌ NG: PascalCaseはクラス名やオブジェクト名に使う

・アルファベット(a~z、A~Z)、数字(0~9)、アンダースコア(_)、ドル記号($)を使用できます。
・小文字から始めるキャメルケース(例:userName, totalCount)が一般的な命名スタイルです。
・数字で始める名前は使用できません(例:1stUser はエラーになります)。
・予約語のキーワード(val, class, fun など)は変数名に使えません。ただし、どうしても使いたい場合は バッククォート(`)で囲むと回避可能です(例:val `class` = "value")。

変数の初期化

変数の初期化とは、変数を宣言すると同時に初期値を代入することです。Kotlinでは val(再代入不可)または var(再代入可)と型を組み合わせて宣言し、値を与えます。

変数の初期化
val age1: Int = 20               // valは再代入できない
val name1: String = "あいうえお"

var age2: Int = 30               // varは再代入できる
var name2: String = "かきくけこ"

・val:一度初期化すると再代入できません(不変)
・var:後から値を変更できます(可変)

このように、意図に応じてvalとvarを使い分けることが、Kotlinで安全なコードを書く第一歩です。

定数

Kotlinでは、変数の値が絶対に変わらないことが確定している場合、const valを使って定数を宣言します。これにより、プログラム内でその値が変更されることはありません。

定数の宣言
const val PI: Double = 3.14159     // 円周率
const val MAX_USERS: Int = 100     // 最大ユーザー数

・定数名は すべて大文字 で記述し、複数の単語はアンダースコア( _ )で区切るのが一般的です。
・const val は クラスや関数の外側(トップレベル)またはオブジェクト(object)内で宣言します。
・通常のクラスのプロパティや、関数の中などのローカル変数としては使えません。

const valとvalの違いについて

const valとvalの違い
const val MAX_USERS: Int = 100      // ✅ コンパイル時定数(変更不可)

fun main() {
    val currentUsers: Int = 100     // ✅ 実行時に代入されるが、再代入不可
    // currentUsers = 200 → ❌ エラー(再代入できない)
}

・const val は 完全な定数(ビルド時に確定)で、関数やオブジェクトから値を受け取ることはできません。
・val は 一度しか代入できないが、定数ではない ため、関数の戻り値や条件に応じた値を保持する場面に適しています。

データ型

Kotlinでは、変数が扱うデータの「種類」に応じて適切なデータ型を指定する必要があります。は、メモリの使い方や演算の方法を決定する重要な情報です。

代表的な9種類のデータ型

分類 型名 格納するデータ 変数宣言の例
整数 Byte とても小さな整数 val glasses : Byte
整数 Short 小さな整数 val age : Short
整数 Int 普通の整数 val salary : Int
整数 Long 大きな整数 val worldPeople : Long
少数 Float 少しあいまいでもよい少数 val weight : Float
少数 Double 普通の少数 val pi : Double
真偽値 Boolean trueかfalse val isError : Boolean
文字 Char 1つの文字 val initial : Char
文字列 String 文字の並び val name : String

Kotlinの基本データ型は大きく9種類に分類され、それぞれが格納する値の性質に応じて使い分けられます。
これらの型は、メモリ効率や処理速度、精度に影響するため、用途に応じて選択することが重要です。

Byte型、Short型、Int型、Long型

整数を格納できる4つの型
val glasses:Byte = 2
val age:Short = 18
val salary:Int = 152000
val worldPeople:Long = 6900000000L

整数を扱うデータ型には Byte・Short・Int・Long の4種類があります。主に使われるのは Int ですが、大きな数値を扱う場合は Long を、データ容量を抑えたい場合は Byte や Short を使います。

Float型、Double型

少数を格納できる2つの型
val weight:Float = 67.5F
val height:Double = 171.2

Kotlinでは、少数を扱う型として Float(単精度)と Double(倍精度)があります。より高い精度を必要とする計算には Double を使用します。

Boolean型

YESかNOかを格納できるBoolean型
val isError:Boolean = true
val result :Boolean = false

Boolean 型は、真(true)または偽(false)の2つの値をとります。条件分岐やフラグ制御に頻繁に使われます。

Char型、String型

1文字だけ格納できるChar型、文字列を格納できるString型
val zodiac:Char = '辰'
val name  :String = "あいうえお"

文字は Char 型で、1文字をシングルクォート ' ' で囲んで表します。文字列は String 型で、複数文字をダブルクォート " " で囲みます。

特殊なデータ型

Kotlinでは、Javaにはない独自の型も用意されています。以下の型は、関数や汎用プログラミングで特に重要です。

Unit型

Unit型:戻り値が「ない」ことを表す型
fun greet(name: String): Unit {
    println("Hello, $name!")
}

fun main(){
 greet("あいうえお")
}
出力結果
Hello,あいうえお

・Unit は「戻り値が存在しない関数」の戻り値の型です。
・Javaでいう void に相当しますが、KotlinではUnitもれっきとした値型であり、型として扱えます。
・省略可能:Unit は書かなくても自動で補完されます。

Any型

Any型
fun printAny(value: Any) {
    println(value)
}

・Any は すべてのクラスの最上位スーパータイプ(共通の親) です。
・Javaの Object に近い概念で、どんな型でも受け取れる関数を作るときに使います。
・ただし null は代入できない(→ nullを許容するには Any? にする必要があります)。

Null許容型とNull非許容型

Kotlinは、NullPointerException(通称NPE) を防ぐために、null安全の仕組みを備えています。

Null非許容型(デフォルト)

Null非許容型
val name: String = "Taro"
// name = null → ❌ コンパイルエラー

・Kotlinではデフォルトで変数はnullを許容しません。
・Javaのような「突然のnull」でアプリが落ちる事故を防げます。

Null許容型(Nullable型)

null許容型
val nickname: String? = null

・型の後ろに ? をつけると、nullの代入を許可できます。
・nullableな変数には、nullチェックが必須になります。

安全呼び出し演算子(?.)

安全呼び出し演算子
val name: String? = "Taro"
val length = name?.length     // → 4

val nullName: String? = null
val nullLength = nullName?.length   // → null(エラーにはならない)

・name?.length は name が null でない場合だけ length を呼び出す。
・null の場合は何もせず null を返す(NPEを防止)。
・チェーン呼び出しも可能:user?.profile?.email

エルビス演算子(?:)

エルビス演算子
val name: String? = null
val displayName = name ?: "Unknown"    // → "Unknown"

val input: String? = "Kotlin"
val output = input ?: "default"        // → "Kotlin"

・name ?: "Unknown" は、name が null なら "Unknown" を使う。
・if文でnullをチェックするよりも簡潔で読みやすい。
・よく使われる場面:表示名、デフォルト設定、入力補完など。

非null断言演算子(!!)

非null断言演算子
val name: String? = "Taro"
val length = name!!.length     // → 4(成功)

val nullName: String? = null
val nullLength = nullName!!.length   // ❌ NullPointerException発生!

・!! は「絶対にnullじゃない」と 開発者が保証して使用する演算子。
・nullだった場合は即クラッシュ(例外発生)。
・原則として使用は避ける(テストや仮実装などの限定的な場面を除く)。

型推論

型推論(Type Inference)
fun main(){
    val age = 40            // Kotlinが自動でInt型と推論
    val bigNumber = 40L     // Long型と推論される(末尾にLがあるため)
    val pi = 3.14           // Double型と推論される(デフォルトの小数型)
    val ratio = 3.14f       // Float型と推論される(末尾にfがあるため)
    val name = "Taro"       // String型と推論
    val isActive = true     // Boolean型と推論
}

・Kotlinは型推論をサポートしているため、明示的に型を書く必要はありません。
・必要に応じて型を明示することも可能です。
・整数リテラルは、特に指定がなければすべて Int 型として推論されます。
・Long 型にしたい場合は、リテラルに L を付ける必要があります。例えば、123L で Long 型になります。
・Byte 型や Short 型は自動推論されないため、必ず明示的に指定する必要があります。例えば、val x: Byte = 123 のように記述します。
・Double 型や Float 型はデフォルトで Double 型として推論されます。もし Float 型にしたい場合は、リテラルに F を付けます(例:123.45F)。
・Kotlinは型安全性を重視しており、異なる数値型間での暗黙的な型変換は行いません。例えば、Int 型の値を Long 型の変数に直接代入することはできません。その場合は、明示的なキャストを行う必要があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?