程序代碼中,怎麼區分status和state?

平時在寫代碼的過程中,相信每個程序員都會有這樣的經歷:一個成員變數,希望表達當前實體的狀態,那麼請問這個時候,究竟如何區分status和state呢?選用哪個合適呢?


state就是一組變數。status則是它們的心情。


網上找到的解釋:

state所指的狀態,一般都是有限的、可列舉的,status則是不可確定的。

形象的比方,你體重多少公斤,屬於status,但說你體重屬於偏瘦、正常還是偏胖,那就是state.


問了下別人,似乎這麼理解可能合適點。與@lanisle 的觀點相近。

state往往就是一個實體固有的狀態。

status則偏向於運行時狀態。


正好部門內部在討論命名問題,大家的看法是:

1、看各類文檔裡面 status 和 state 是混用的,主要是喜好和習慣問題

2、書面上可能有區分,程序里還好。

個人習慣:

1、被描述一個實體有固定且穩定的狀態,用 state,如(隱藏、顯示),(是、否),(可用、不可用)

2、被描述的實體比較籠統的其他狀態,用 status。一時半會想不起例子,後面補充。


state:比較常用,各種狀態都可以用它,但是它更著重於一種心理狀態或者物理狀態。

Status:用在人的身上一般是其身份和地位,作「狀態,情形」講時,多指政治和商業。

state傾向於condition,是一種延續性的狀態。

status常用於描述一個過程中的某階段(phase),類似於C語言中枚舉型變數某一個固定的值,這個值屬於一個已知的集合。

比如淘寶買家問賣家「我的網購現在是什麼狀況?」

這個問題的背景是講話雙方都清楚,交易狀態有「買家選購」「買家已付款」「賣家已發貨」「買家已簽收」或者有「買家已投訴」等等狀態。這些狀態描述一件事情發展過程中的不同階段。而且,這些階段的先後順序也是雙方默許的。

所以在這裡可以問「What"s the status of my purchase?」,此處用state不太貼切,如果硬用上去從語感上可能聽著彆扭。

說物態變化用state再恰當不過。如果說一個物質的四種狀態,可以說「solid state」,但如果你說「solid status」,第一,這兩個詞的組合不像是描述物態,更像是在說「確定的狀況(solid產生歧義『確定的/確鑿的』)」;第二,這個說法即使不被誤解,也需要事先約定一組物態變化順序,比如把這個物質從固態開始加熱然後電離,可能先後經歷固態、液態、氣態、等離子態這四個階段。類似先定義枚舉,然後引用的方式。

擴展:

ajax中readyState,statusText,onreadystatechange,window.status怎麼一會state一會是status都暈乎了

state所指的狀態,一般都是有限的、可列舉的,status則是不可確定的。

比如

readyState -- 就那麼四五種值

statusText -- 描述性的文字,可以任意

onreadystatechange -- 那麼四五種值之間發生變化

window.status -- 描述性的文字,可以任意

來個形象的比方,你體重多少公斤,屬於status,但說你體重屬於偏瘦、正常還是偏胖,那就是state.


總結一下大家的觀點:兩者差不太多,state用起來可能更方便一些更通用一點;要區分的話,state表示一個確定的狀態集中的某個狀態(比如水的三態),status表示一種籠統的情形(比如你的生活狀態、工作狀態),不存在確定的狀態集。


  1. state
    1. 所指的狀態,一般都是有限的、可列舉的
      1. 你體重屬於偏瘦、正常還是偏胖,那就是state
      2. readyState -- 就那麼四五種值
      3. onreadystatechange -- 那麼四五種值之間發生變化
    2. 往往就是一個實體固有的穩定的狀態
      1. 如(隱藏、顯示),(是、否),(可用、不可用)
    3. 可數的,表達不會輕易變化的狀態
      1. 如ReadyState, Fail這類
    4. 比較常用,各種狀態都可以用它,但是它更著重於一種心理狀態或者物理狀態
    5. 說物態變化用state再恰當不過
      1. 如果說一個物質的四種狀態,可以說「solid state」,但如果你說「solid status」,第一,這兩個詞的組合不像是描述物態,更像是在說「確定的狀況(solid產生歧義『確定的/確鑿的』)」;第二,這個說法即使不被誤解,也需要事先約定一組物態變化順序,比如把這個物質從固態開始加熱然後電離,可能先後經歷固態、液態、氣態、等離子態這四個階段。類似先定義枚舉,然後引用的方式
  2. status
    1. 則是不可確定的狀態
      1. 你體重多少公斤,屬於status
      2. statusText -- 描述性的文字,可以任意
      3. window.status -- 描述性的文字,可以任意
    2. 偏向於運行時狀態
    3. 不可數的,隨過程不斷變化的狀態
      1. 如OrderedStatus, ShippingStatus,ReceiptedStatus
    4. 用在人的身上一般是其身份和地位,作「狀態,情形」講時,多指政治和商業
  3. 兩者差不多
    1. 看各類文檔裡面 status 和 state 是混用的,主要是喜好和習慣問題
    2. 書面上可能有區分,程序里還好
    3. 我以前習慣用status後來發現我見過的大部分都習慣用state。而且好像state又好寫,又好讀,所以我也開始用state了


我覺得:如果可數的,表達不會輕易變化的狀態時,用state,如ReadyState, Fail這類

如果不可數的,隨過程不斷變化的狀態時,用status,如OrderedStatus, ShippingStatus,

ReceiptedStatus.


我以前習慣用status後來發現我見過的大部分都習慣用state。而且好像state又好寫,又好讀,所以我也開始用state了。


能制定標準前,表糾結這些了吧。

如何定義?

ID、CODE、No?

mobile、還是PHONE?

ADDRESS、還是DIZHI?

直到你在小範圍內可以制定標準、或者約定,一切都合理了~!


推薦閱讀:

想學編程,報班還是自學呢?
有報道說周鴻禕一周看10本書,是不是真的,他是怎麼做到的,哪方面的書多?
恆大冰泉是如何在如此短的時間內鋪貨全國乃至全球的?
Macbook用起來和普通的電腦感覺有什麼不同?

TAG:程序員 | 編程 | IT男 | IT人 |