2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Android開発30日間マスターシリーズ - Day 4:Kotlin言語の基礎 - Java経験者もゼロからでも分かるAndroid開発用Kotlin入門

Last updated at Posted at 2025-09-08

はじめに

Android開発を始める際、多くの人が「Kotlinって何?Javaじゃダメなの?」と疑問に思うでしょう。この記事では、Android開発でKotlinを使う理由から、実際のコードまで、初心者にも分かりやすく解説します。

1. なぜAndroid開発でKotlinが推奨されるのか?

Googleの公式サポート

2017年にGoogleがKotlinを正式サポート言語として発表し、2019年にはKotlin First(Kotlinを優先)の方針を打ち出しました。現在、新しいAndroidの機能やライブラリは、Kotlinを前提として設計されています。

Kotlinの具体的なメリット

1. コードの簡潔性

同じ処理でも、Kotlinはより短く書けます。

Java

public class User {
    private String name;
    private int age;
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() { return name; }
    public int getAge() { return age; }
    public void setName(String name) { this.name = name; }
    public void setAge(int age) { this.age = age; }
}

Kotlin

data class User(var name: String, var age: Int)

2. Null安全性

Kotlinは言語レベルでNullPointerExceptionを防ぎます。

var text: String = "Hello"
// text = null // コンパイルエラー!

var nullableText: String? = "Hello"
nullableText = null // これはOK

3. Javaとの100%互換性

既存のJavaコードやライブラリをそのまま使えます。

2. Kotlinの基本構文

変数の宣言

val(値が変わらない)

val appName = "My App"        // 文字列
val version = 1.0             // 数値(型推論)
val isDebug: Boolean = true   // 明示的な型指定

// appName = "New App" // エラー:再代入不可

var(値が変わる)

var counter = 0
counter = 1          // OK:再代入可能
counter += 1         // OK:現在の値は2

使い分けのコツ:基本はvalを使い、値を変更する必要がある時だけvarを使いましょう。

基本的なデータ型

val number: Int = 42           // 整数
val price: Double = 99.99      // 小数
val message: String = "Hello"  // 文字列
val isValid: Boolean = true    // 真偽値

文字列テンプレート

文字列の中に変数を埋め込めます。

val name = "太郎"
val age = 25
val introduction = "私の名前は${name}、${age}歳です。"
// または簡潔に
val greeting = "こんにちは、$nameさん!"

関数の定義

基本的な関数

fun greet(name: String): String {
    return "こんにちは、${name}さん!"
}

// 使用例
val message = greet("花子")

戻り値がない関数

fun printUserInfo(name: String, age: Int) {
    println("名前: $name, 年齢: $age")
}

単一式関数(簡潔な書き方)

fun add(a: Int, b: Int): Int = a + b

// 型推論を使ってさらに簡潔に
fun multiply(a: Int, b: Int) = a * b

デフォルト引数

fun createUser(name: String, age: Int = 20, city: String = "東京") {
    println("名前: $name, 年齢: $age, 都市: $city")
}

// 使用例
createUser("太郎")                    // 年齢とcityはデフォルト値
createUser("花子", 25)                // cityはデフォルト値
createUser("次郎", city = "大阪")      // 名前付き引数

Null安全性の実践

Safe Call演算子(?.)

val text: String? = "Hello"

// 従来の書き方(Javaライク)
if (text != null) {
    println(text.length)
}

// Kotlinの書き方
println(text?.length)  // textがnullなら何もしない

Elvis演算子(?:)

val name: String? = null
val displayName = name ?: "名無し"  // nameがnullなら"名無し"を使用
println(displayName)  // "名無し"が出力される

コレクション(リスト、マップ)

リスト

// 変更不可能なリスト
val fruits = listOf("りんご", "バナナ", "オレンジ")

// 変更可能なリスト
val mutableFruits = mutableListOf("りんご", "バナナ")
mutableFruits.add("オレンジ")

// 要素へのアクセス
println(fruits[0])        // "りんご"
println(fruits.first())   // "りんご"

マップ

val userAges = mapOf(
    "太郎" to 25,
    "花子" to 30,
    "次郎" to 22
)

println(userAges["太郎"])  // 25

制御構文

when式(Javaのswitchより強力)

fun getGrade(score: Int): String {
    return when (score) {
        in 90..100 -> "A"
        in 80..89 -> "B"
        in 70..79 -> "C"
        in 60..69 -> "D"
        else -> "F"
    }
}

// 使用例
println(getGrade(85))  // "B"

forループ

val numbers = listOf(1, 2, 3, 4, 5)

// 要素をそのまま取得
for (number in numbers) {
    println(number)
}

// インデックスと要素を取得
for ((index, number) in numbers.withIndex()) {
    println("$index: $number")
}

// 範囲を使ったループ
for (i in 1..5) {
    println(i)  // 1, 2, 3, 4, 5
}

3. Android開発でよく使うKotlinの機能

データクラス

プロパティだけを持つシンプルなクラスに最適です。

data class User(
    val name: String,
    val age: Int,
    val email: String
)

// 自動で以下が生成される:
// - toString()
// - equals()
// - hashCode()
// - copy()

val user1 = User("太郎", 25, "taro@example.com")
val user2 = user1.copy(age = 26)  // 一部だけ変更した新しいインスタンス

拡張関数

既存のクラスに新しい機能を追加できます。

// String型に新しい関数を追加
fun String.isValidEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// 使用例
val email = "test@example.com"
if (email.isValidEmail()) {
    println("有効なメールアドレスです")
}

ラムダ式

関数を変数のように扱えます。

val numbers = listOf(1, 2, 3, 4, 5)

// 偶数のみフィルタリング
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers)  // [2, 4]

// 各要素を2倍にする
val doubled = numbers.map { it * 2 }
println(doubled)  // [2, 4, 6, 8, 10]

4. Javaとの主な違い(Java経験者向け)

項目 Java Kotlin 備考
変数宣言 int count = 0; var count = 0 セミコロン不要、型推論
定数 final int MAX = 100; val MAX = 100 より簡潔
null許容 すべての参照型 String? 明示的に指定
文字列結合 "Hello " + name "Hello $name" 文字列テンプレート
インスタンス生成 new User() User() newキーワード不要
getter/setter 手動実装 自動生成 プロパティアクセス

5. 実践:簡単なAndroidアプリでの使用例

// ユーザー情報を管理するクラス
data class User(
    val name: String,
    val age: Int,
    val email: String?  // メールアドレスは任意(null許容)
)

class UserManager {
    private val users = mutableListOf<User>()
    
    fun addUser(name: String, age: Int, email: String? = null) {
        val user = User(name, age, email)
        users.add(user)
        println("ユーザー追加: ${user.name}")
    }
    
    fun findAdults(): List<User> {
        return users.filter { it.age >= 18 }
    }
    
    fun getUserSummary(user: User): String {
        val emailInfo = user.email ?: "未設定"
        return "名前: ${user.name}, 年齢: ${user.age}, メール: $emailInfo"
    }
}

// 使用例
val manager = UserManager()
manager.addUser("太郎", 25, "taro@example.com")
manager.addUser("花子", 17)  // メールアドレス未設定

val adults = manager.findAdults()
adults.forEach { user ->
    println(manager.getUserSummary(user))
}

6. 学習のコツと次のステップ

効果的な学習方法

  1. まずはvalvarの使い分けから始める
  2. null安全性を意識してコードを書く
  3. Kotlin Playgroundで実際にコードを試す
  4. Android Studioでサンプルプロジェクトを作成する

よくある初心者の間違い

// ❌ よくない例
var name: String? = "太郎"
if (name != null) {
    println(name.length)
}

// ✅ Kotlinらしい書き方
val name: String? = "太郎"
name?.let { println(it.length) }
// または
println(name?.length)

推奨リソース

7. まとめ

今回学んだKotlinの基礎知識:

重要なポイント

  1. 変数宣言: val(不変)とvar(可変)の使い分け
  2. Null安全性: ?を使った明示的なnull許容型
  3. 関数定義: funキーワードと簡潔な構文
  4. 制御構文: when式や拡張されたforループ
  5. 実用的な機能: データクラス、拡張関数、ラムダ式

なぜKotlinを学ぶべきか

  • 生産性向上: より少ないコードで同じ機能を実現
  • 安全性: コンパイル時にエラーを検出
  • 将来性: Googleが推進する現代的な言語

これらの基礎知識があれば、Android開発の実践的な部分に進む準備が整いました。次回は、これらのKotlin構文を使って、実際にシンプルなAndroidアプリを作成してみましょう。

この記事が役に立ったらいいね👍やストックをお願いします。


次回予告: 「第5回:初めてのAndroidアプリ作成 - Hello WorldからUI操作まで」では、今回学んだKotlinの知識を活用して、実際に動作するアプリを作成します。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?