Javaにおけるif-else文とreturn文の効果的な使い方を徹底解説

Javaプログラミングにおいて、if-else文とreturn文は非常に重要な役割を果たします。これらを適切に組み合わせることで、コードの読みやすさや効率性が大きく向上します。しかし、特に初心者にとっては、これらの文の使い方や組み合わせ方が難しく感じられることがあるかもしれません。本記事では、if-else文とreturn文の基本的な使い方から、複雑な条件を扱う場合のベストプラクティスまで、詳細に解説していきます。これにより、Javaプログラミングにおける条件分岐と関数の終了を効率的に扱うスキルを身につけることができます。

目次

if-else文の基本構造

if-else文は、Javaにおける条件分岐を実現するための基本的な構文です。プログラムの実行中に特定の条件が真か偽かを評価し、その結果に応じて異なるコードブロックを実行します。if文は条件が真の場合に実行され、else文は条件が偽の場合に実行されるコードを指定します。基本的な構造は以下の通りです。

if (条件) {
    // 条件が真の場合に実行されるコード
} else {
    // 条件が偽の場合に実行されるコード
}

この構造により、プログラムが状況に応じた適切な動作を行うことが可能になります。if-else文を理解し、適切に活用することで、プログラムの柔軟性と応答性を向上させることができます。

return文の基本的な使い方

return文は、メソッドから値を返すための基本的な構文であり、メソッドの実行を終了させる役割も持っています。Javaのメソッド内でreturn文を使うことで、処理の結果を呼び出し元に返したり、特定の条件が満たされた時点でメソッドを終了させることができます。

基本的なreturn文の使い方は以下の通りです。

public int add(int a, int b) {
    return a + b; // 2つの整数の和を返す
}

上記の例では、addメソッドが2つの整数の和を計算し、その結果を返しています。返された値は、メソッドを呼び出したコード内で利用することができます。また、voidメソッド(値を返さないメソッド)でも、return文を使ってメソッドを終了させることができます。

public void checkAge(int age) {
    if (age < 18) {
        System.out.println("未成年です");
        return; // ここでメソッドを終了
    }
    System.out.println("成人です");
}

このように、return文はメソッドの終了や値の返却に使用され、適切に使うことでコードの流れをコントロールする重要な役割を果たします。

if-else文とreturn文の組み合わせ

if-else文とreturn文を組み合わせることで、メソッド内で条件に応じた処理を効率的に行い、必要に応じて早期にメソッドを終了させることができます。この組み合わせにより、無駄な処理を避け、コードの可読性と効率性を高めることが可能です。

以下は、if-else文とreturn文を組み合わせた例です。

public String getGrade(int score) {
    if (score >= 90) {
        return "A"; // スコアが90以上の場合に"A"を返す
    } else if (score >= 80) {
        return "B"; // スコアが80以上90未満の場合に"B"を返す
    } else if (score >= 70) {
        return "C"; // スコアが70以上80未満の場合に"C"を返す
    } else {
        return "D"; // スコアが70未満の場合に"D"を返す
    }
}

この例では、スコアに応じて異なる成績を返すメソッドを示しています。各条件をチェックし、該当する場合に即座にreturn文で成績を返します。これにより、メソッドの後続のコードが実行されることなく、効率的に処理が完了します。

このように、if-else文とreturn文を効果的に組み合わせることで、条件に応じた処理を簡潔に実装でき、プログラムの複雑さを減らすことができます。また、メソッドの早期終了が必要な場合に、return文を適切に使用することで、無駄な処理を避けることができます。

複数の条件を扱う場合のベストプラクティス

複数の条件を扱う場合、if-else文とreturn文を組み合わせることで、コードを効率的かつ明瞭にすることができます。条件が多くなると、コードが複雑になりがちですが、以下のベストプラクティスを守ることで、可読性を維持しつつ、エラーを防ぐことができます。

優先順位に基づく条件の配置

if-else文では、条件の順序が重要です。最も可能性が高い、または優先度の高い条件を先にチェックすることで、無駄な処理を避けることができます。例えば、以下のように条件を並べると、処理の効率が向上します。

public String getMembershipLevel(int points) {
    if (points >= 1000) {
        return "Platinum"; // 最も高いポイント条件を先にチェック
    } else if (points >= 500) {
        return "Gold";
    } else if (points >= 100) {
        return "Silver";
    } else {
        return "Bronze"; // 最も低い条件を最後に
    }
}

このコードは、ポイントに応じて会員レベルを返します。最も高いポイント条件を先にチェックすることで、効率的な処理を実現しています。

ネストを避けるための早期return

複雑な条件が絡む場合、ネストされたif-else文が増えると、コードが読みにくくなります。早期にreturn文を使ってメソッドを終了させることで、ネストを減らし、コードをシンプルに保つことができます。

public boolean isEligibleForDiscount(int age, boolean isMember) {
    if (isMember) {
        return true; // メンバーなら即座にtrueを返す
    }
    if (age < 18 || age >= 65) {
        return true; // 18歳未満または65歳以上ならtrueを返す
    }
    return false; // それ以外はfalseを返す
}

この例では、ネストを避けるために、条件が満たされた場合に早期にreturn文で結果を返すことで、コードを平坦化しています。

論理演算子の活用

複数の条件を一つのif文で処理する際には、論理演算子(&&||)を適切に活用することで、コードを簡潔にすることができます。ただし、論理演算子を使いすぎるとコードが読みづらくなるため、条件が複雑すぎる場合は分割することも検討すべきです。

public boolean isEligibleForVoting(int age, boolean isCitizen) {
    return age >= 18 && isCitizen; // 18歳以上かつ市民であるかを一行で評価
}

このように、複数の条件を効率的に処理するためのベストプラクティスを守ることで、よりシンプルでメンテナンスしやすいコードを書くことができます。

ガード節(Guard Clause)とは

ガード節(Guard Clause)は、メソッドの冒頭で特定の条件をチェックし、その条件が満たされた場合に即座にメソッドを終了させるテクニックです。これにより、メソッド内のネストが深くなるのを防ぎ、コードの可読性と保守性を向上させることができます。

ガード節の利点

ガード節を使用する主な利点は、以下の通りです。

  1. コードのフラット化: 条件が満たされた時点で早期にメソッドを終了することで、以降の処理をネストする必要がなくなります。これにより、コードの構造が平坦化され、読みやすくなります。
  2. 意図の明確化: ガード節を使うことで、異常な状態や特定の条件に早めに対処することができ、メソッドの主要なロジックに集中することができます。これにより、メソッドの目的が明確になります。
  3. エラー防止: 異常な状態を早期に検出して処理することで、後続の複雑なロジックに進む前にエラーを防ぐことができます。

ガード節の例

以下は、ガード節を使った例です。ユーザーが有効なログイン状態かどうかをチェックし、無効な場合は即座にメソッドを終了させています。

public void processUserLogin(User user) {
    if (user == null) {
        throw new IllegalArgumentException("ユーザーがnullです");
    }
    if (!user.isLoggedIn()) {
        return; // ユーザーがログインしていない場合は処理を終了
    }

    // ログインしている場合の処理
    System.out.println("ユーザー処理を開始します");
    // さらに処理が続く…
}

この例では、usernullの場合、またはuserがログインしていない場合にガード節を使用して、早期にメソッドを終了させています。これにより、userが有効でログインしていることを前提とした後続の処理を、安心して実行できます。

ガード節を使った複雑な条件の処理

ガード節は、複雑な条件をシンプルに処理するのにも役立ちます。例えば、以下のコードでは、複数の異常条件に対して順次ガード節を用いて処理を行っています。

public void performTransaction(Account account, double amount) {
    if (account == null) {
        throw new IllegalArgumentException("アカウントがnullです");
    }
    if (amount <= 0) {
        throw new IllegalArgumentException("金額が不正です");
    }
    if (!account.isActive()) {
        throw new IllegalStateException("アカウントが無効です");
    }

    // 有効なアカウントと金額の場合のみ処理を続行
    account.withdraw(amount);
    System.out.println("取引が完了しました");
}

このコードでは、アカウントが無効である、または金額が不正であるといった状況に早期に対処し、問題がない場合のみ取引処理を実行します。

ガード節を活用することで、メソッドがよりシンプルで直感的になり、メンテナンスがしやすくなります。特に長いメソッドや複雑な条件が絡むメソッドにおいて、この手法は非常に有効です。

ネストされたif-else文の回避方法

ネストされたif-else文は、コードが複雑になる原因の一つです。条件が多重に重なると、コードが読みにくく、理解しづらくなります。これを回避するためには、コードの構造を平坦に保つための工夫が必要です。ここでは、ネストされたif-else文を回避するためのいくつかの方法を紹介します。

ガード節の活用

前述したガード節を用いることで、複数の条件を早期に処理し、ネストを減らすことができます。条件が満たされない場合、メソッドを早期終了することで、後続の処理をネストさせる必要がなくなります。

public String getDiscountCategory(int age, boolean isMember) {
    if (age < 0) {
        throw new IllegalArgumentException("年齢が不正です");
    }
    if (isMember) {
        return "会員割引";
    }
    if (age < 18) {
        return "学生割引";
    }
    if (age >= 65) {
        return "シニア割引";
    }
    return "一般割引";
}

この例では、条件が満たされた時点で即座に値を返すことで、深いネストを回避しています。

早期returnによるシンプル化

早期returnを利用することで、特定の条件を満たす場合に早期にメソッドを終了し、以降のコードが複雑にならないようにします。これにより、if-else文のネストを削減できます。

public String evaluateRisk(int creditScore) {
    if (creditScore < 0 || creditScore > 850) {
        throw new IllegalArgumentException("信用スコアが不正です");
    }
    if (creditScore >= 750) {
        return "低リスク";
    }
    if (creditScore >= 600) {
        return "中リスク";
    }
    return "高リスク";
}

このコードでは、信用スコアが異常な場合や特定のスコアレンジに該当する場合、早期にreturnすることで、コードを簡潔に保っています。

複数の条件を一つのif文で処理

複数の条件を一つのif文で処理することで、ネストを減らすことができます。論理演算子(&&||)を適切に使うことで、複数の条件をまとめて評価し、条件分岐をシンプルにすることが可能です。

public String determineAccessLevel(boolean isAdmin, boolean isLoggedIn) {
    if (isAdmin && isLoggedIn) {
        return "フルアクセス";
    }
    if (isLoggedIn) {
        return "制限付きアクセス";
    }
    return "アクセス拒否";
}

この例では、管理者かつログイン済みかどうかを一つのif文でチェックし、条件分岐のネストを避けています。

switch文の活用

場合によっては、switch文を使うことで、複数のケースに対してネストを回避することができます。特に、整数や文字列の値に基づいて処理を分岐する場合、switch文はシンプルで効果的な方法です。

public String getDayName(int dayNumber) {
    switch (dayNumber) {
        case 1: return "月曜日";
        case 2: return "火曜日";
        case 3: return "水曜日";
        case 4: return "木曜日";
        case 5: return "金曜日";
        case 6: return "土曜日";
        case 7: return "日曜日";
        default: throw new IllegalArgumentException("無効な曜日番号です");
    }
}

このswitch文では、曜日番号に応じて対応する曜日名を返しており、if-else文のネストを避けています。

これらのテクニックを用いることで、ネストされたif-else文を回避し、コードをよりシンプルで理解しやすく保つことができます。特に大規模なプロジェクトでは、コードの可読性を維持するために、これらの方法を意識して活用することが重要です。

関数の早期終了とreturn文

関数の早期終了は、特定の条件が満たされた場合にreturn文を使って関数を直ちに終了させる手法です。このアプローチは、コードのネストを減らし、読みやすさとメンテナンス性を向上させるために非常に有効です。ここでは、早期終了の利点と具体的な使用例について解説します。

早期終了の利点

関数の早期終了には以下のような利点があります。

  1. コードの簡潔さ: 条件が満たされた場合に、即座に関数を終了させることで、後続の複雑な処理を回避できます。これにより、コード全体が簡潔になります。
  2. エラーの早期検出: 異常な入力やエラー条件に対して早期に対応できるため、バグの発生を防ぎやすくなります。
  3. パフォーマンスの向上: 不要な計算や処理を行わずに済むため、特にパフォーマンスが重要な場面では、効率的なプログラムを作成できます。

早期終了の使用例

以下は、関数の早期終了を利用した典型的な例です。この例では、配列の中から指定された値を検索し、見つかった場合にそのインデックスを返します。値が見つからない場合、-1を返します。

public int findIndex(int[] array, int value) {
    if (array == null || array.length == 0) {
        return -1; // 配列がnullまたは空の場合、即座に-1を返す
    }

    for (int i = 0; i < array.length; i++) {
        if (array[i] == value) {
            return i; // 値が見つかった場合、インデックスを返す
        }
    }

    return -1; // 値が見つからなかった場合、-1を返す
}

このコードでは、早期に配列の状態をチェックし、問題がある場合には即座に-1を返すようにしています。また、値が見つかった時点でforループを終了し、インデックスを返すことで、余計なループ処理を避けています。

複雑な条件における早期終了

複雑な条件を扱う場合も、早期終了を活用することでコードをわかりやすく整理できます。以下は、ユーザーが特定の条件を満たしているかをチェックする例です。

public boolean canAccessResource(User user, Resource resource) {
    if (user == null || resource == null) {
        return false; // ユーザーまたはリソースがnullの場合はアクセス不可
    }

    if (!user.isActive()) {
        return false; // ユーザーがアクティブでない場合はアクセス不可
    }

    if (user.hasPermission(resource)) {
        return true; // ユーザーがリソースへの権限を持っている場合はアクセス許可
    }

    return false; // それ以外の場合はアクセス不可
}

この例では、ユーザーやリソースが無効な場合や、ユーザーが非アクティブな場合には即座にfalseを返して関数を終了させています。条件が満たされる場合にのみtrueを返し、無駄な処理を行わないようにしています。

複数の早期終了を組み合わせる

複数の条件をチェックし、それぞれで早期終了を行うことで、コードをさらに明確にできます。次の例は、ファイルの読み込み処理で、様々なエラー条件を早期にチェックしています。

public String readFile(String filePath) {
    if (filePath == null || filePath.isEmpty()) {
        return "ファイルパスが無効です"; // 無効なファイルパスの場合、エラーメッセージを返す
    }

    File file = new File(filePath);
    if (!file.exists()) {
        return "ファイルが存在しません"; // ファイルが存在しない場合、エラーメッセージを返す
    }

    if (!file.canRead()) {
        return "ファイルを読み取れません"; // ファイルが読み取り可能でない場合、エラーメッセージを返す
    }

    // ファイル読み込み処理を実行
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        return reader.lines().collect(Collectors.joining("\n"));
    } catch (IOException e) {
        return "ファイルの読み込み中にエラーが発生しました";
    }
}

このコードでは、複数の早期終了を使って、エラー条件をチェックし、それに応じた適切なメッセージを返しています。これにより、エラー発生時に明確なフィードバックを提供しつつ、コードのネストを減らしています。

早期終了を利用することで、コードがシンプルで理解しやすくなり、保守性が向上します。特に複雑な処理やエラー処理を扱う場合、この手法を意識的に活用することが推奨されます。

Javaにおけるswitch文との比較

if-else文とreturn文の組み合わせは、条件分岐を行う際の基本的な手法ですが、場合によってはswitch文を使用する方がシンプルで適切な場合があります。switch文は、特定の値に基づいて複数のケースを処理する場合に効果的で、特に値が明確に定義されている場合に利用されます。ここでは、if-else文とswitch文の違いと使い分けについて解説します。

switch文の基本構造

switch文は、指定された式の値に基づいて複数の分岐を処理します。基本的な構造は以下の通りです。

switch (式) {
    case 値1:
        // 値1に対応する処理
        break;
    case 値2:
        // 値2に対応する処理
        break;
    default:
        // いずれのケースにも該当しない場合の処理
}

switch文では、指定された値に応じて該当するケースのコードが実行されます。break文は、ケースが処理された後にswitch文を終了するために使います。

if-else文とswitch文の使い分け

if-else文とswitch文は、どちらも条件分岐を行うための手段ですが、それぞれの使用シーンには適した状況があります。

  • if-else文が適している場合:
    • 条件が複雑で、論理演算や比較を伴う場合。
    • 条件が連続的でなく、特定の範囲や関係を扱う必要がある場合。
    • 値だけでなく、複数の条件を組み合わせて分岐を行う場合。
    if (temperature > 30) { return "暑い"; } else if (temperature >= 20) { return "快適"; } else { return "寒い"; }
  • switch文が適している場合:
    • 判定する値が限られており、個別のケースとして扱える場合。
    • 値が数値や文字列など明確な単一の値に基づく場合。
    • 多数の分岐が存在する場合に、コードの読みやすさを維持したい場合。
    public String getDayName(int dayNumber) { switch (dayNumber) { case 1: return "月曜日"; case 2: return "火曜日"; case 3: return "水曜日"; case 4: return "木曜日"; case 5: return "金曜日"; case 6: return "土曜日"; case 7: return "日曜日"; default: return "無効な曜日番号"; } }

この例では、曜日番号に応じて曜日名を返します。switch文を使うことで、各ケースが明確に分離され、コードが読みやすくなります。

switch文の利点と制限

switch文には、いくつかの利点と制限があります。

  • 利点:
    • 読みやすさ: 複数の値に基づく分岐を簡潔に記述でき、コードが見やすくなります。
    • 処理速度: 大量のケースがある場合、switch文はif-else文よりも効率的に処理できることがあります(コンパイラの最適化による)。
  • 制限:
    • データ型の制約: switch文は基本的に整数値や文字列、列挙型などの特定の型にしか対応していません。
    • 複雑な条件: 複雑な論理条件や範囲を扱う場合、if-else文の方が適しています。

if-else文との使い分けの具体例

例えば、アプリケーションでユーザーの役割に応じたアクセス権を判定する場合、役割が明確に定義されているなら、switch文が適しています。

public String getAccessLevel(String role) {
    switch (role) {
        case "ADMIN":
            return "フルアクセス";
        case "USER":
            return "制限付きアクセス";
        case "GUEST":
            return "閲覧のみ";
        default:
            return "アクセス拒否";
    }
}

一方、同じロジックをif-else文で記述すると、次のようになります。

public String getAccessLevel(String role) {
    if ("ADMIN".equals(role)) {
        return "フルアクセス";
    } else if ("USER".equals(role)) {
        return "制限付きアクセス";
    } else if ("GUEST".equals(role)) {
        return "閲覧のみ";
    } else {
        return "アクセス拒否";
    }
}

この場合、switch文を使う方がコードがコンパクトで読みやすくなりますが、より複雑な条件が加わる場合はif-else文が適しているでしょう。

if-else文とswitch文は、それぞれ異なる利点を持ち、適切な状況で使い分けることが重要です。switch文を使うことでコードをシンプルに保つことができる場面も多くありますが、条件の複雑さや柔軟性が求められる場合には、if-else文が有効です。状況に応じた選択が、効果的なコード作成の鍵となります。

よくある間違いとその対処法

if-else文とreturn文の使用において、特に初心者が陥りがちな間違いがあります。これらの誤りを理解し、避けるための対策を知ることは、プログラムの正確性と効率性を維持するために重要です。ここでは、よくある間違いとその対処法について解説します。

1. else文の欠落

多くの場合、if文に対応するelse文を記述し忘れることで、期待しない動作が発生することがあります。else文がないと、条件が偽の場合にプログラムが何も行わないため、エラーが見逃される可能性があります。

間違いの例:

public String getGrade(int score) {
    if (score >= 90) {
        return "A";
    } else if (score >= 80) {
        return "B";
    } else if (score >= 70) {
        return "C";
    }
    // ここでelse文がないため、scoreが70未満の場合、何も返さずに終了する
}

対処法:
else文を追加して、すべてのケースをカバーするようにしましょう。

public String getGrade(int score) {
    if (score >= 90) {
        return "A";
    } else if (score >= 80) {
        return "B";
    } else if (score >= 70) {
        return "C";
    } else {
        return "D"; // scoreが70未満の場合に"D"を返す
    }
}

2. 不必要なネスト

if-else文を多重にネストしてしまうと、コードが非常に読みにくくなり、エラーの原因となります。特に、単純な条件を複雑に書きすぎると、バグの温床になります。

間違いの例:

public boolean isEligible(int age, boolean isMember) {
    if (age >= 18) {
        if (isMember) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

対処法:
不必要なネストを避け、コードを平坦に保つようにしましょう。早期returnを使うことで、シンプルで明快なコードにできます。

public boolean isEligible(int age, boolean isMember) {
    if (age < 18) {
        return false; // 18歳未満なら即座にfalseを返す
    }
    return isMember; // 18歳以上なら、メンバーシップの状態を返す
}

3. 論理演算子の誤用

論理演算子(&&||)の使用において、括弧の使い方を誤ると、条件が正しく評価されないことがあります。特に複雑な条件を扱う際に、意図した通りに評価が行われるよう注意が必要です。

間違いの例:

public boolean isValidUser(String username, int age) {
    return username != null && username.length() > 0 || age >= 18;
    // この場合、ageが18以上であれば、usernameがnullでもtrueになってしまう
}

対処法:
括弧を使用して、論理条件を明確に区切りましょう。

public boolean isValidUser(String username, int age) {
    return (username != null && username.length() > 0) || age >= 18;
    // 括弧を使うことで、意図した条件が正しく評価される
}

4. 戻り値の型の不一致

メソッドの戻り値の型と、if-else文で返す値の型が一致しない場合、コンパイルエラーが発生します。これは、if-else文内で異なる型を返そうとする際に起こりやすいミスです。

間違いの例:

public String getDiscount(int age) {
    if (age < 18) {
        return 10; // これはint型であり、String型の戻り値と一致しない
    } else {
        return "5%";
    }
}

対処法:
すべてのケースで、メソッドが同じ型を返すようにしましょう。

public String getDiscount(int age) {
    if (age < 18) {
        return "10%"; // 文字列型に統一
    } else {
        return "5%";
    }
}

5. デフォルトのケースを忘れる

if-else文やswitch文で、すべての可能性をカバーしていない場合、意図しない動作が発生することがあります。特に、予期しない入力に対する処理を忘れると、バグの原因となります。

間違いの例:

public String getDayName(int dayNumber) {
    switch (dayNumber) {
        case 1: return "月曜日";
        case 2: return "火曜日";
        case 3: return "水曜日";
        // 他のケースがないため、1-3以外の入力に対して何も返さない
    }
}

対処法:
デフォルトケース(else文やdefault節)を追加し、すべての入力に対して適切な処理を行うようにします。

public String getDayName(int dayNumber) {
    switch (dayNumber) {
        case 1: return "月曜日";
        case 2: return "火曜日";
        case 3: return "水曜日";
        default: return "無効な曜日番号"; // 予期しない入力に対するデフォルトの応答
    }
}

以上のように、if-else文とreturn文を使用する際に、これらのよくある間違いを避けることが、信頼性の高いコードを書くために重要です。これらのポイントを意識することで、プログラムの品質と保守性が向上します。

演習問題と解答例

ここでは、if-else文とreturn文の使い方をより深く理解するための演習問題をいくつか紹介します。各問題には解答例も示していますので、学習の確認として活用してください。

演習問題1: 年齢に応じたメッセージの表示

問題: displayAgeMessageというメソッドを作成し、年齢(age)に応じたメッセージを返すプログラムを作成してください。以下の条件に従ってメッセージを返します。

  • 18歳未満の場合:「未成年です」
  • 18歳以上65歳未満の場合:「成人です」
  • 65歳以上の場合:「シニアです」
public String displayAgeMessage(int age) {
    // ここにコードを記述
}

解答例:

public String displayAgeMessage(int age) {
    if (age < 18) {
        return "未成年です";
    } else if (age < 65) {
        return "成人です";
    } else {
        return "シニアです";
    }
}

この解答例では、if-else文を用いて年齢に応じたメッセージを返しています。

演習問題2: 最大値の判定

問題: 3つの整数a, b, cを受け取り、その中で最大の値を返すfindMaxというメソッドを作成してください。

public int findMax(int a, int b, int c) {
    // ここにコードを記述
}

解答例:

public int findMax(int a, int b, int c) {
    if (a >= b && a >= c) {
        return a;
    } else if (b >= a && b >= c) {
        return b;
    } else {
        return c;
    }
}

この解答例では、複数の条件を組み合わせて、3つの整数の中から最大の値を返しています。

演習問題3: ショッピング割引の計算

問題: 顧客がメンバーシップを持っているか、購入金額が5000円以上であるかに基づいて、適用する割引率を計算するcalculateDiscountというメソッドを作成してください。以下の条件で割引を適用します。

  • メンバーシップを持っている場合:20%
  • メンバーシップを持っていないが購入金額が5000円以上の場合:10%
  • それ以外の場合:割引なし
public double calculateDiscount(boolean isMember, double purchaseAmount) {
    // ここにコードを記述
}

解答例:

public double calculateDiscount(boolean isMember, double purchaseAmount) {
    if (isMember) {
        return 0.20;
    } else if (purchaseAmount >= 5000) {
        return 0.10;
    } else {
        return 0.0;
    }
}

この解答例では、if-else文を使用して、条件に基づく適切な割引率を返しています。

演習問題4: 成績評価の判定

問題: 学生のテストスコアを受け取り、スコアに応じた成績を返すevaluateGradeメソッドを作成してください。成績は以下の基準に基づいて決定されます。

  • 90点以上:A
  • 80点以上90点未満:B
  • 70点以上80点未満:C
  • 60点以上70点未満:D
  • 60点未満:F
public String evaluateGrade(int score) {
    // ここにコードを記述
}

解答例:

public String evaluateGrade(int score) {
    if (score >= 90) {
        return "A";
    } else if (score >= 80) {
        return "B";
    } else if (score >= 70) {
        return "C";
    } else if (score >= 60) {
        return "D";
    } else {
        return "F";
    }
}

この解答例では、if-else文を用いてスコアに応じた成績を判定しています。

演習問題5: 引数の有効性チェック

問題: メソッドisValidInputを作成し、引数として与えられた文字列が有効かどうかを判定してください。有効な入力は、文字列がnullでなく、かつ空でない場合です。無効な場合はfalseを返し、有効な場合はtrueを返します。

public boolean isValidInput(String input) {
    // ここにコードを記述
}

解答例:

public boolean isValidInput(String input) {
    if (input == null || input.isEmpty()) {
        return false;
    }
    return true;
}

この解答例では、ガード節を使って引数の有効性を簡潔にチェックし、早期に結果を返すようにしています。

これらの演習問題を通じて、if-else文とreturn文の効果的な使い方を練習できます。各問題の解答を確認し、自分の解答と比較することで理解を深めてください。

まとめ

本記事では、Javaにおけるif-else文とreturn文の基本的な使い方から、複数の条件を効率的に処理するベストプラクティス、ガード節や早期終了のテクニック、そしてswitch文との比較について詳細に解説しました。これらの知識を活用することで、コードの可読性や効率性を向上させ、複雑な条件分岐をシンプルに処理できるようになります。よくある間違いを避けつつ、演習問題を通じて実践的なスキルを身につけてください。これで、if-else文とreturn文を自在に使いこなせるようになるでしょう。

コメント

コメントする

目次