プログラム実行モデルの可視化
実行モデルは、動作中のプログラムの意味を説明します。ソースコードは静的なテキストですが、実行には現在行、束縛、オブジェクトの変更、分岐、出力の順序があります。このコース群では、その過程を可視化し、ループ、データ構造、再帰を学ぶ土台を作ります。
まずプログラムカウンターを追い、次に名前と参照先のオブジェクトを区別します。この二つは初心者の疑問の多くを説明し、変数の中に値が住んでいるという誤解を避ける助けになります。
実行モデルのレッスンの見方
各ステップで二つを確認します。
- 今どのソース行を実行しているか。
- 束縛を変えたのか、オブジェクトを変更したのか、状態を読んだだけか。
現在行は動作の位置を示し、状態パネルや名前とオブジェクトの図は結果を示します。両者が一致しなければ、実行の追跡に誤りがあります。
実行モデルのレッスン
| レッスン | 中心となる考え | 注目する点 |
|---|---|---|
| 実行トレース | プログラムカウンターが移動し、文を一つずつ実行する | ループへの戻り、終了時のジャンプ、変数の更新、出力 |
| 変数と変更 | 代入は名前の束縛を変え、変更は既存のオブジェクトに作用する | オブジェクトの変更では矢印が残り、再束縛では移動する |
| 配列とインデックス | 非負のインデックスは 0 から始まる位置で、長さは末尾の一つ先のインデックス | range(len(values)) がスロットのない境界の前で止まる |
| ループと不変条件 | チェックポイントでの条件が、反復更新を結果の証明につなぐ | 証明済みの接頭部分、次の候補、偽になったループ条件 |
最初は実行トレースです。現在行、現在の状態、実行済みの文の記録という、デバッガーの基本を学びます。
次に変数と変更へ進みます。同じプログラムカウンターがメモリ図の変化を動かします。共有リストで別名参照を確認し、不変な整数と比較します。演算子の表記だけでは、更新が元のオブジェクトを変更するかどうかは分かりません。
続く配列とインデックスでは、既定の三つのスロットで i を座標として捉えます。0 は先頭、2 は末尾を指し、3 に対応するスロットはありません。まず 3 の前で止まり、その後で values[3] を試して IndexError を発生させます。これにより、range(len(values)) が範囲外の位置を避ける理由を理解できます。
最後はループと不変条件です。今度の i は証明の境界を示します。最大値の走査では最初の値について条件を成立させ、候補を接頭部分へ加えるたびに条件を回復します。ループ条件が偽になったとき、接頭部分の事実がリスト全体の答えになります。誤った best = 0 の例では、その証明がどこで崩れるかを確認します。
実行モデルの可視化一覧
下のレッスンを選び、一ステップずつ進めます。どの値が変わったかに加え、その値を持つオブジェクトと、そこに到達できる名前を確認してください。