005-003-008

入れ子のif文で会員ランク判定

中級

問題説明

入れ子のif文:階層的な意思決定

一緒に階層的な判定処理を学んでいきましょう!

学習目標

  • if文を使用して条件分岐を実装できる
  • 比較演算子を適用して適切な判定ロジックを構築できる
  • 条件式の真偽を評価し、正しい処理を実行できる

入れ子のif文を使うと、各レベルで追加の基準に基づいて判定を細分化する階層的な決定木を作成できます。このパターンは、会員ランク、価格ルール、アクセス制御などの多要素分類システムを実装する際に不可欠です。

学習ポイント

  • 階層的ロジック: 外側の条件が内側の条件へのゲートとして機能
  • 決定木: 各ネストレベルが決定分岐を追加
  • コードフロー: 内側のブロックは外側の条件がtrueの場合のみ実行
  • 可読性の限界: 深いネスト(3段階以上)は保守性を損なう

ネストの構造

if (外側の条件) {
    if (内側の条件) {
        // 両方の条件がtrue
    } else {
        // 外側のみtrue
    }
} else {
    // 外側がfalse(内側は評価されない)
}

よくある間違い

間違えても大丈夫です。条件の順序をもう一度確認してみてください。

間違い1: 不要なネスト

複雑すぎるコード:

if (isMember) {
    if (purchaseAmount >= 10000) {
        rank = "Gold";
    }
} else {
    if (!isMember) {  // 冗長なチェック!
        rank = "Guest";
    }
}

シンプルなコード:

if (!isMember) {
    rank = "Guest";
} else if (purchaseAmount >= 10000) {
    rank = "Gold";
} else {
    rank = "Silver";
}

間違い2: elseブランチの欠落

不完全なロジック:

if (isMember) {
    if (purchaseAmount >= 10000) {
        rank = "Gold";
    }
    // 不足: purchaseAmount < 10000の場合は?
}

深いネストのリファクタリング

テクニック使用場面
早期リターン無効/単純なケースで早期に終了
ガード節エッジケースを先に処理
メソッド抽出複雑な内部ロジックをメソッドに移動
ルックアップテーブル連続するifをデータで置換

実務での活用

  • 会員ランク: 会員状態、次に利用額
  • 権限システム: ロールチェック、次にアクションチェック
  • バリデーション連鎖: フォーマットチェック、次にビジネスルール
  • 価格エンジン: 顧客タイプ、次に数量割引

前提知識の詳細説明

この問題を解くために必要な知識を確認しましょう。

基本概念

この問題で扱うプログラミングの基本概念を理解することが、正しい解答への第一歩です。コードの各要素がどのように連携して動作するかを把握しましょう。

実装アプローチ

問題を解くための考え方を段階的に整理します:

  1. 問題文を読み、入力と出力の関係を理解する
  2. 必要な変数やデータ構造を特定する
  3. 処理の流れを組み立てる
  4. テストケースで動作を確認する

コードを実行してみませんか?

この問題のコードエディタと実行機能を使用するには、ログインしてください。

アカウントをお持ちでない方