Java 逆引き集 | 戻り値(参照/プリミティブ) — API レイヤ設計

Java Java
スポンサーリンク

戻り値(参照/プリミティブ) — API レイヤ設計

メソッドは「処理の結果」を返すことができます。この結果を 戻り値 と呼びます。戻り値には プリミティブ型(int, double, boolean など)と 参照型(String, 配列, クラスのインスタンスなど)の2種類があります。APIレイヤ設計では「どんな型を返すか」が利用者にとっての使いやすさを左右します。


プリミティブ型を戻り値にする

特徴

  • 値そのものを返す。
  • 軽量でシンプル。
  • null にならない(必ず値がある)。

例:計算結果を返す

int add(int a, int b) {
    return a + b;
}

double average(double x, double y) {
    return (x + y) / 2;
}

boolean isAdult(int age) {
    return age >= 18;
}
Java

👉 数値計算や真偽判定など、単純な結果はプリミティブ型で返すのが基本。


参照型を戻り値にする

特徴

  • オブジェクトや配列を返す。
  • 複数の値や複雑な構造をまとめて返せる。
  • null を返す可能性があるため、利用側でチェックが必要。

例:文字列や配列を返す

String greet(String name) {
    return "Hello, " + name;
}

int[] createRange(int n) {
    int[] arr = new int[n];
    for (int i = 0; i < n; i++) arr[i] = i;
    return arr;
}

Person findPersonById(int id) {
    // 見つからなければ null を返す可能性あり
    if (id == 1) return new Person("Sato");
    return null;
}
Java

👉 複数の値や構造化データを返すときは参照型。


API レイヤ設計での戻り値選び

  • プリミティブ型:
    • 単純な計算結果(合計、平均、真偽判定)。
    • null を返す必要がない。
  • 参照型:
    • 複数の値をまとめたい。
    • データ構造やオブジェクトを返す。
    • null を返す可能性がある(例: 検索結果が見つからない)。

設計の工夫

  • Optional<T>(Java 8+): null の代わりに「値がある/ない」を表現できる。
import java.util.Optional;

Optional<Person> findPerson(int id) {
    if (id == 1) return Optional.of(new Person("Sato"));
    return Optional.empty();
}
Java
  • DTO(データ転送オブジェクト): 複数の値をまとめて返す専用クラスを作る。
class Result {
    int code;
    String message;
    Result(int code, String message) {
        this.code = code;
        this.message = message;
    }
}

Result process() {
    return new Result(200, "OK");
}
Java

例題で練習

例題1: 税込み価格を返す(プリミティブ)

double withTax(double price) {
    return price * 1.10;
}

System.out.println(withTax(1000)); // 1100.0
Java

👉 単純な計算結果はプリミティブで十分。


例題2: 顧客検索(参照型)

class Customer {
    String name;
    Customer(String name) { this.name = name; }
}

Customer findCustomer(String id) {
    if ("001".equals(id)) return new Customer("Tanaka");
    return null; // 見つからなければ null
}

Customer c = findCustomer("001");
if (c != null) System.out.println(c.name);
Java

👉 検索結果は「見つからない」可能性があるため参照型で返す。


例題3: Optional で安全に返す

Optional<Customer> safeFind(String id) {
    if ("001".equals(id)) return Optional.of(new Customer("Tanaka"));
    return Optional.empty();
}

Optional<Customer> result = safeFind("002");
result.ifPresent(c -> System.out.println(c.name));
Java

👉 null を避けたいときは Optional を使う。


テンプレート集

プリミティブ型を返す

型 メソッド名(引数) {
    // 計算や判定
    return 値;
}
Java

参照型を返す

型 メソッド名(引数) {
    // オブジェクト生成や検索
    return オブジェクト; // null の可能性あり
}
Java

Optional を返す

Optional<> メソッド名(引数) {
    if (条件) return Optional.of(値);
    return Optional.empty();
}
Java

まとめと次の一歩

  • プリミティブ: 単純な結果。軽量で null なし。
  • 参照型: 複雑な結果。null の可能性あり。
  • Optional/DTO: API 設計で安全性・可読性を高める。

👉 練習課題として「商品検索API」を想定し、商品が見つかれば Product オブジェクトを返し、見つからなければ Optional.empty() を返すメソッドを作ってみると、実務的な理解が深まります。

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