Day 5・プログラムはどう動くか
状態(state)=今の状況
状態とは「今どうなっているか」の記録。信号機やゲームのセーブデータのように、プログラムは状態を持って動く。
状態とは「今の状況」
[[statclienrequest(状態)とは、プログラムが今どうなっているかを表す情報のことです。難しく考えず「今の状況」と読み替えて大丈夫。ログイン中かどうか、カゴに何個商品が入っているか、電源がオンかオフか。こうした「今の様子」が全部、状態です。
たとえるなら
信号機を思い浮かべてください。今が「赤」か「青」かが状態です。信号機の作りは変わらないのに、状態が変わると私たちの行動(止まる/進む)が変わります。プログラムもまったく同じで、状態によって次にすることが変わります。
もう一つのたとえはゲームのセーブデータ。レベル、所持金、今いる場所。これらをまとめたものが「今のゲームの状態」です。セーブ(保存)すれば、電源を切っても続きから遊べます。状態は「覚えておくべき今の中身」なのです。
- 信号機の色(赤/青)= 今の状態
- ゲームのレベルや所持金 = 今の状態
- ログインしているかどうか = 今の状態
- 買い物カゴの中身 = 今の状態
状態は変わる、そして覚えられる
状態の大事な性質は二つ。「変わる」ことと「覚えていられる」ことです。信号は赤から青に変わり、カゴには商品が増えたり減ったりします。そしてプログラムは、その最新の状況を[[variablclienrequest(変数=名前つきの箱)に入れて覚えています。
たとえるなら
状態を入れておく箱が変数です。「所持金」というラベルの箱に今の金額を入れておき、買い物したら中身を書き換える。箱の場所は同じでも、中身(状態)は変わっていきます。
// 疑似コード: 状態を箱に入れて、書き換える
signal = "赤" // 今の状態は赤
signal = "青" // 状態を青に更新
cart = 0 // カゴは空
cart = cart + 1 // 商品を1つ追加(状態が変わる)状態を意識しない考え方
「なぜかログイン画面に戻される」の原因を、見た目のせいだと思い込む。実は状態(ログイン中かどうか)が消えているのが原因。
現象: 操作するたびログイン画面に戻る状態を疑う考え方
「今どういう状態?」と問い直す。ログイン状態が保持されていないのでは、と当たりをつけられる。
問い: ログイン状態が保存されている?AIにはこう頼む
不具合を相談するとき「このバグは、どの状態が原因で起きていそう?候補を挙げて」と頼むと、状態の観点から原因を整理してくれます。状態を疑えると[[debu用語](原因さがし)がぐっと速くなります。
気をつけたい点
「今の状態」を思い込みで決めつけると事故ります。実際に今の中身がどうなっているかを確認する癖をつけましょう。状態は変わるものだからこそ、今を確かめることが大事です。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
プログラムにおける「状態(state)」を最もよく表しているのは?
状態の性質として正しい組み合わせは?
「ボタンを押しても画面が変わらない」というバグに出会いました。状態(state)という言葉を使って、原因を探る第一歩を説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。