プログラムに時間を吹き込む — 『a = a + 1』が意味を持つ理由
この記事は: プログラミングを始めて約 1 か月、オブジェクト指向の入口で「何が起きているのかよくわからない」と感じている あなた自身 に向けたセルフガイドです。数式の世界では感じなかった“時間”と“状態変化”が、なぜプログラムを難しく思わせるのか――その正体をつかみ、手を動かして乗り越えるコツをまとめました。
目次
1. 数学とプログラムは“評価モデル”が違う
観点 | 数学(式) | プログラム(命令列) |
---|---|---|
時間軸 | 無い(同時・恒常的真) | ある(上から順に実行) |
状態 | 変化しない前提で議論 | 変数やオブジェクトが刻々と変わる |
等号 ( = ) | 恒等関係(左右は常に同値) | 代入演算子(右辺を評価 → 左辺へ書き込み) |
思考様式 | 宣言的 what | 命令的 how |
右辺 → 左辺 ―― 一瞬の時間差
int a = 1;
a = a + 2; // ❶ 右辺 a + 2 を計算(ここでは 3)
// ❷ 結果 3 を左辺 a へ代入(a が 3 になる)
a = a + 2──数学なら矛盾ですが、プログラムでは「いまの a」を材料に「次の a」を作る状態遷移を表します。この“計算 ▶ 代入 ▶ 次の瞬間”に、あなたの思考もシフトさせる必要があります。
2. オブジェクト指向がさらにモヤる3つの理由
- 状態を持つ場所が増える — インスタンスごとにフィールドがあり、メソッド呼び出しで値が変わる。
- メッセージが飛び交う — 「誰が誰に何を頼み、その結果いつ変わるか」を頭の中で追う必要がある。
- 二層構造の登場 — クラスという“設計図”と、実際に動くインスタンスが分かれ、数学にはなかった抽象レイヤが挟まる。
3. “時間” を腹落ちさせるセルフトレーニング
アプローチ | やってみること | 狙い |
---|---|---|
ステップ実行 | Visual Studio で F10 / F11 を押し、ウォッチに変数を追加 | コマ送りで「今」を目で見る |
メモリ図を描く | 変数名・値・参照矢印をノートに書き、行を進めるごとに更新 | 状態遷移を視覚化 |
タイムライン図 | 横軸を時間にし、メソッド呼び出しやイベント発火を並べる | 複数オブジェクト間の変化を整理 |
小さなシミュレータ | 例:カウンタクラスの Increment() を呼ぶたび Console.WriteLine | 一歩ごとの変化を目に焼き付ける |
純粋関数と比較 | 同じ処理を static メソッド(副作用なし)とフィールド更新版で書く | 状態を持つ/持たないの差分を体感 |
4. 理解を助けるイメージフレーズ
- 「プログラムは 1 行ずつ時を刻む小説」 — CPU は 1 ページずつ読み進め、登場人物(オブジェクト)の心境(フィールド)が変わる。
- 「クラス=設計図、インスタンス=今日の天気」 — 設計図は変わらないが、実体は時間で変わる。
- 「代入は写真の貼り替え」 — 右辺で新しい写真を撮り、左辺の額縁に差し替える。
5. つまずきをセルフチェックする
モヤモヤ | よくある誤解 | 自分へのツッコミポイント |
---|---|---|
a = a + 1 が矛盾に見える | 数学の等号≒プログラムの = と思い込む | 「= は “次を入れる矢印”」とメモリ図で確認した? |
値がどこで変わったかわからない | 状態遷移を追えていない | デバッガでウォッチし、一行ごとに値を読み上げてみた? |
オブジェクトが勝手に動く感じ | メソッド呼び出しの起点があいまい | タイムライン図で“呼ぶ側⇄呼ばれる側”を書き出した? |
6. まとめ — “時間” を止めて観察しよう
- 壁の正体: 時間軸と状態遷移という、数学には無い要素。
- 突破口: デバッガ・手書き・タイムラインで 時間を止める体験 を積み重ねること。
- 最初の一歩: int counter = 0; から始め、1 行ずつステップ実行してみよう。値が変わる瞬間が見えたら、霧は晴れる。
あなたへの小さな挑戦
- a = a + 1; を実行するとき、 「今の a」→「計算」→「新しい a」 の順序を声に出してみてください。
- 自作クラスでフィールドを 1 つだけ持たせ、メソッドで更新したら、 前後の状態をノートに図解 できますか?
答えられなければ、この記事のトレーニングで“時間旅行”を体験してみましょう。
この記事が、あなたの“モヤモヤ地帯”を抜ける道しるべになりますように。では、IDE を開いて――さあ、時間を止めに行きましょう!
訪問数 4 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません