003-004-009

複合代入演算子で値を更新

中級

問題説明

複合代入演算子:簡潔な値の更新

複合代入演算子は、演算と代入を1つの記号で行います。これはクリーンで保守しやすいコードを書くために不可欠であり、ループ、アキュムレータ、状態更新で広く使用されます。

一緒に複合代入演算子を学んでいきましょう!

学習目標

  • 複合代入演算子(+=, -=, *=, /=)の動作を説明できる
  • 通常の代入と複合代入演算子の違いを比較できる
  • 複合代入演算子を使った値の更新パターンを識別できる

学習ポイント

  • 算術複合: +=-=*=/=%=
  • ビット演算複合: &=|=^=>>=<<=
  • 暗黙のキャスト: 複合演算子は自動的に型変換を含む
  • 単一評価: 左辺は一度だけ評価される

主な複合代入演算子

演算子等価な式
+=a += 5a = a + 5
-=a -= 3a = a - 3
*=a *= 2a = a * 2
/=a /= 4a = a / 4
%=a %= 3a = a % 3

よくある間違い

間違えても大丈夫です。もう一度コードを確認してみてください。

間違い1: 比較演算子との混同

誤ったコード:

if (x += 5) {  // 代入であり、比較ではない!
    // 常にtrue(xが0以外になる)
}

正しいコード:

x += 5;
if (x == 10) {  // 比較には == を使用
    // ...
}

間違い2: 型キャストの予期しない動作

動作:

byte b = 10;
b += 5;      // OK: byteへの暗黙のキャスト
b = b + 5;   // エラー: 結果はint、明示的キャストが必要

説明: 複合演算子は暗黙の縮小キャストを含み、通常の演算子は含みません。

間違い3: 除算の切り捨て

例:

int value = 10;
value /= 4;  // 結果は2(整数除算)、2.5ではない

実践的な活用

  • アキュムレータ: ループ内でsum += item
  • カウンタ: count++またはcount += 1
  • 文字列構築: str += " text"(ループではStringBuilderを推奨)
  • ビットフラグ: flags |= OPTIONで設定、flags &= ~OPTIONでクリア

補足: ループ内で配列要素を変更する場合、arr[i] = arr[i] + valueよりもarr[i] += valueの方がクリーンです。

前提知識の詳細説明

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

基本概念

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

実装アプローチ

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

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

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

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

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