JavaScript | continue文

JavaScript JavaScript
スポンサーリンク

では 複数条件+ネスト+非同期処理を駆使した本番想定サンプル を作ります。


実務シナリオ:部署ごとに複雑条件でユーザーを非同期処理

条件:

  1. 名前が空 → スキップ
  2. 非アクティブ → スキップ
  3. 評価(score)が 70 未満 → スキップ
  4. 部署内に条件を満たすユーザーが1人もいなければ部署単位でスキップ
  5. 条件を満たすユーザーだけ非同期で並列処理

コード例

// 擬似API: 部署ごとのユーザー取得
async function fetchDepartmentUsers(deptName) {
  const data = {
    "営業部": [
      {name:"Alice", active:true, score:85},
      {name:"Bob", active:false, score:90},
      {name:"Charlie", active:true, score:60},
    ],
    "開発部": [
      {name:"David", active:true, score:95},
      {name:"Eve", active:true, score:65},
      {name:"", active:true, score:80}
    ],
    "人事部": [
      {name:"", active:false, score:50},
      {name:"Frank", active:false, score:80}
    ]
  };
  return data[deptName] || [];
}

// 非同期処理関数(例: DB保存やAPI呼び出し)
function processUser(user) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`処理完了: ${user.name}, score=${user.score}`);
      resolve();
    }, 200);
  });
}

// メイン処理
async function main() {
  const departments = ["営業部", "開発部", "人事部"];

  for (const dept of departments) {
    console.log(`--- ${dept} 処理開始 ---`);
    const users = await fetchDepartmentUsers(dept);

    // 部署に有効ユーザーがいるか判定する配列
    const validUsers = [];
    for (const user of users) {
      // 複数条件でスキップ
      if (!user.name) continue;           // 名前なしスキップ
      if (!user.active) continue;         // 非アクティブスキップ
      if (user.score < 70) continue;      // スコア不足スキップ

      validUsers.push(user);
    }

    // 部署単位で有効ユーザーなし → スキップ
    if (validUsers.length === 0) {
      console.log(`${dept} に条件を満たすユーザーなし → スキップ`);
      continue;
    }

    // 条件を満たすユーザーだけ並列で非同期処理
    await Promise.all(validUsers.map(user => processUser(user)));

    console.log(`--- ${dept} 処理完了 ---`);
  }

  console.log("全部署処理完了");
}

main();
JavaScript

想定出力

--- 営業部 処理開始 ---
処理完了: Alice, score=85
--- 営業部 処理完了 ---
--- 開発部 処理開始 ---
処理完了: David, score=95
--- 開発部 処理完了 ---
--- 人事部 処理開始 ---
人事部 に条件を満たすユーザーなし → スキップ
全部署処理完了

ポイント解説

  1. 複数条件のチェック
    • 名前・アクティブ・スコアを if + continue で順番にスキップ
    • ガード節を使うことでネストを浅く保つ
  2. 部署単位でのスキップ
    • 内側ループで条件を満たすユーザーを validUsers に集める
    • 長さが 0 の場合は部署全体をスキップ(フラグ代わり)
  3. 並列非同期処理
    • Promise.all で条件を満たすユーザーのみ並列処理
    • 実務では API 呼び出し・DB 保存・メール送信などの高速化に有効
  4. 実務での応用例
    • バッチ処理: 部署ごとのレポート作成
    • データ検証: 条件外データを無駄に処理しない
    • 非同期処理と条件スキップを組み合わせることで大規模データにも対応可能

💡 さらに発展させるアイデア

  • 条件を関数化してユーザー判定ルールを簡単に変更可能にする
  • スキップ理由をログに残す(監査対応)
  • 部署単位の集計処理と組み合わせる
タイトルとURLをコピーしました