プログラマの英語 : state と status の違い・使い分け
どちらも「状態」を意味し、普通の英文として使う場合でも、コード中の変数名や enum 定義に使用する場合でも、往々にして交換可能なのですが、全く同じ意味合いを持っているという訳ではありません。
そのニュアンスの違いと使い分け方について考えてみます。
state とは
Oxford Dictionaries による定義:
The particular condition that someone or something is in at a specific time
私の解釈:
- status の特定の状態(スナップショット)で名前を持っている
- 同種のカテゴリに属する state は同時に取り得ない
- 状態遷移図(State Transition Diagram)
- Enabled と Disabled などのような boolean
- フラグ値ではない排他的な enum(Thread.State (Java Platform SE 6) など)
定義中の particular(特定の)という言葉が重要な気がしています。
「…という状態」と簡単に言い表せる、と解釈できるかもしれません。
代入式の右辺としての使用を主目的に定義されるイメージが強いです(もちろん右辺に使われるということは左辺に入るのですが…)。
CurrentState = StateBusy;
status とは
Oxford Dictionaries による定義:
The situation at a particular time during a process
私の解釈:
- ある種の状態の集合、カテゴリ
- 同種のものをまとめた場合もあれば、異種のものをまとめる場合もある
- 同種の例:HTTPステータス
- 異種の例:ステータスバー(アプリケーションの多様な情報をまとめて「状態」として表示)
- 同種のものをまとめた場合もあれば、異種のものをまとめる場合もある
- 演算(増減)可能なパラメータの場合もある
- 例:ゲームのキャラクターの HP や攻撃力といった「ステータス」(一方「毒状態」などの状態は State なイメージ。毒や麻痺などをまとめた「状態異常」になると Status。)
「…の状態(status of ...)」の印象が大きいです。 もっとも「…の状態」は state of を使う場合も多いのでこれだけでは何も言っていないに等しいのですが…。
代入式の左辺としての使用を主目的に定義されるイメージが強いです(同上…)。
xxxStatus = FlagA | FlagB | FlagC | ... ;
コード内での使い分け方
- status も state もなるべく変数名や定数定義に使わず、その「状態」を表す具体的な語を探す
- errorStatus ではなく errorCode など
- 一般用語に倣う(HTTPステータスなど)
- 既にあるコードや参考にしているライブラリに倣う
- 一貫性 > 用語としての正確性
という方針を優先しつつ、どうしても新しく status か state を導入する必要が出た場合には
- 排他的な状態の場合 state を使う
- 状態の集合(フラグのセットなど)の場合 status を使う
という感じでしょうか。
後で一貫性を保ちやすいよう、自分が納得できる使い方をするのが一番かと思います。