回答:
何かを覚える必要がある場合は、「状態」が必要です。関数(「メソッド」などではない)は、理想的には入力のみに依存します。入力が同じであっても、答えが時間とともに変化する可能性のある質問をする場合、答えの違いを覚えておく必要がありますか?そうしないと、他の要素が変更されていないため、別の答えを出すことができません(答えは時間に直接依存しないと仮定しましょう)。
覚えておく必要のある「もの/情報」は「状態」と呼ばれます。
(この「状態」は時間の経過とともに変化する必要はありません。基本的には「何かを覚えている/知っている」と言う方法です)
ウィキペディアから:
状態は通常、システムまたはエンティティの現在の状態を指します...
これは、コンピューティングコンテキストでの意味とほぼ同じです。オブジェクトまたはシステムの状態を定義するデータです。
「状態」の意味は、プログラミングに固有のものではありません。見たところどこにでも「状態」の例があります。テレビはオフです。コーヒーは熱いです。スニーカーはa)青です。b)臭い; c)片付けない。d)かなり使い古されている。プログラミングの意味での「状態」は、変数、オブジェクト、スレッド、データベース、ファイルシステムなど、扱うオブジェクトに適用することを除いて、プログラミング以外の意味での「状態」とまったく同じです。それを説明するには、馴染みのある用語で説明してください。外国の技術的な概念にする必要はありません。
クロックは、いくつかの状態を持つ単純なシステムの良い例です。クロックは、実行中または非実行中の場合があり、実際の時刻に対応する場合と対応しない場合があります。それらが変数のようなものであり、クロックの状態を変更すると他の物にどのように影響するかを確認するのは非常に簡単です。
「ドアは赤い」という声明のようなステートレスなものと比較してください。ステートメント自体には状態がありません。ドアが赤であることは事実かもしれませんが、ステートメント自体には状態が含まれていません。ドアをペイントすると、陳述の真実が変わる可能性がありますが、陳述自体は決して変わりません。同様に、42のような数値には状態がありません。42は42であり、変更できるものはありません。
変数には状態があり、値にはありません。
状態は、プログラムが何らかのタスクを達成するために操作する情報です。プログラムのランタイム全体で変更または操作されるのは、データまたは情報です。ある時点でのプログラムの「状態」とは、プログラムが現在実行している次のステップに進むために現在調べている、または分析しているすべてのデータのスナップショットを指します。
私の大学はSchemeで始まったので、ステートレスモデルでプログラミングを始めました。その後、Cに切り替えて、状態が何であるか、なぜそれが有用であるのか、そしてそれが物事を潜在的に非常に複雑にするのかについて非常に明確にしました。したがって、一部の大学は確かに州について話しますが、必ずしもすべてではありません
[緑]、[黄]、[赤]の3つの状態のいずれかにある信号機のアナロジーを使用できます。一度に1つの状態でなければなりません。信号機は、モデル化されている実際の状態マシンです。通常、状態は[緑から黄]、[黄から赤]、[赤から緑]の順に遷移します。
別の状態遷移(英国など一部の国で有効)には、[赤から緑]への遷移の代わりに、[赤から黄へ、次に黄から緑への2つの遷移があります。