Kotlin vs Java:簡潔で便利な書き方の違いを解説!

Kotlin
記事内に広告が含まれる場合があります

JavaとKotlinはどちらもAndroid開発をはじめ、多くの開発現場で利用されています。特にKotlinは、Javaと比べて簡潔で読みやすいコードが書けるため、近年人気が高まっています。本記事では、Kotlinの便利な書き方をJavaと比較しながら解説します。


1. データクラス(Data Class)

Javaの場合(Lombokを使用)

Javaではデータクラスを作成する場合、通常はgettersetterequals()hashCode()toString()などを定義する必要があります。しかし、Lombokを使うことで簡潔に書けます。

Java
import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}

Lombokを使用すれば、@Dataアノテーションを付けるだけで、必要なメソッドが自動生成されます。ただし、Lombokは追加の依存関係が必要です。

Kotlinの場合

Kotlinでは、data classを使用するだけで同様の機能を簡潔に実装できます。

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

Kotlinでは、data classを使うことで、equals()hashCode()toString() などが自動で生成されるため、Lombokを使用しなくても簡潔に記述できます。


2. Null安全(Null Safety)

Javaの場合

Javaでは、NullPointerException (NPE) を避けるために、nullチェックを手動で行う必要があります。

(1) 従来のnullチェック

Java
public String getUserName(User user) {
    if (user != null) {
        return user.getName();
    }
    return "Unknown";
}

(2) Optional を使用する場合

Java 8以降では、Optional を使用することで null の処理を簡潔に記述できます。

Java
import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        Optional<User> user = Optional.ofNullable(new User("Alice", 25));
        String name = user.map(User::getName).orElse("Unknown");
        System.out.println(name); // Alice
    }
}

Optional.ofNullable() を使用することで、null の場合でも安全に処理できます。

Kotlinの場合

KotlinはNull安全を標準でサポートしており、? を使うことで安全に処理できます。

Kotlin
fun getUserName(user: User?): String {
    return user?.name ?: "Unknown"
}

この ?: 演算子は「エルビス演算子」と呼ばれ、null の場合にデフォルト値を返す便利な機能です。


3. リストのフィルタリング

Java(ラムダ式を使用)

Javaでは、Stream API を使用することでリストのフィルタリングが可能です。

Java
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> names = List.of("Alice", "Bob", "Charlie", "David");
        List<String> filteredNames = names.stream()
                                          .filter(name -> name.startsWith("A"))
                                          .collect(Collectors.toList());
        System.out.println(filteredNames); // [Alice]
    }
}

Kotlinの場合

Kotlinでは filter を使うことで、より簡潔に記述できます。

Kotlin
fun main() {
    val names = listOf("Alice", "Bob", "Charlie", "David")
    val filteredNames = names.filter { it.startsWith("A") }
    println(filteredNames) // [Alice]
}

Kotlinの標準ライブラリでは filter などの関数が充実しており、シンプルな記述でリストの処理が可能です。


4. 関数の拡張(Extension Function)

Javaの場合

Javaでクラスに新しいメソッドを追加する場合、継承またはユーティリティクラスを作成する必要があります。

Java
public class StringUtils {
    public static String greet(String name) {
        return "Hello, " + name + "!";
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(StringUtils.greet("Alice")); // Hello, Alice!
    }
}

Kotlinの場合

Kotlinでは extension function を使うことで、既存のクラスにメソッドを追加できます。

Kotlin
fun String.greet() = "Hello, $this!"

fun main() {
    println("Alice".greet()) // Hello, Alice!
}

このように、Kotlinでは拡張関数を使うことで、クラスの改変なしに新しいメソッドを追加できます。


5. シングルトン(Singleton)

Javaの場合

Javaでシングルトンを実装する場合、通常は private コンストラクタと getInstance() メソッドを用意する必要があります。

Java
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

Kotlinの場合

Kotlinでは object キーワードを使うだけで簡単にシングルトンを作成できます。

Kotlin
object Singleton {
    fun sayHello() = "Hello, Singleton!"
}

fun main() {
    println(Singleton.sayHello()) // Hello, Singleton!
}

まとめ

KotlinはJavaと比べて、よりシンプルかつ直感的にコードを記述できる言語です。特に、データクラス、Null安全、リストフィルタリング、拡張関数、シングルトンの実装などの点で優れています。

機能JavaKotlin
データクラスLombokを使用data class で簡単に実装
Null安全null チェックが必要? を使った安全な記述
リストフィルタリングStream API を使用filter で簡潔に記述
拡張関数ユーティリティクラスを作成extension function で拡張
シングルトンgetInstance() を使用object で簡単に作成

Kotlinの機能を活用することで、より読みやすく、メンテナンスしやすいコードを書くことができます。これからKotlinを学ぶ方は、ぜひ活用してみてください!

タイトルとURLをコピーしました