在大多數的書或是文章中,對於attribute與property兩個詞一律都翻譯為「屬性」,雖然在語意清楚的情況下,自然可以分辨,但還是常常會容易混淆。如果要分辨清楚,就得回頭看看物件導向的起源--ADT(Abstract Data Type)。
ADT是由表示資料的data與行為能力的operation所組成,落實在程式語言的層面,當我們用class來描繪一個ADT時,就將代表資料的data稱為attribute、而operation稱為method。在某些程式語言中(如C++),就將attribute稱為member variable、而method稱為member function。不過在其他種類的程式語言(像是C#)中,也把attribute稱為field。 實際上,在許多書中,可能也都沒這麼考究,幾個詞彙可能交替互用,而沒有細分。
那麼property呢?我認為這個詞彙的流通,主要是component-based的程式語言或是整合開發環境(如VB、Delphi)興起之後才逐漸被使用,主要是指以一對分別用來儲存(setter)以及擷取(getter)的方法(method)所封裝的資料,由於是以方法來封裝,因此就可以在設定或是讀取資料的同時進行必要的運作,像是驗證新設定的值是否合理、或是因應新的值自動更改其他屬性的值等等。隨著property的流行,許多程式語言(像是C#、Ruby)本身就直接提供property的語法,Java則是要求程式員必須依循一定的命名規範,讓一對方法在整合開發環境中使用起來像是其他程式語言中的property。
在.NET中,事情又被複雜化了, 因為.NET使用attribute這個詞彙來表示物件在進行某種行為時的特性,比如說透過Serializable這個attribute,可以指定類別中哪些field在serialize時要儲存起來。這裡的attribute就跟前面所提到對應到ADT中data的attribute不同了。如果您查閱微軟的文件,會發現有些地方微軟把attribute翻譯為「自訂屬性」,雖然已經和「屬性」有所區別,但還是容易讓人誤會「自訂屬性」是「屬性」的一種,我個人比較建議將.NET中的attribute譯為「特性」,會比較達意。
了解了這一點之後,就可以知道在HTML/XML中attribute的意義了,依循的還是ADT中data的意思,所以譯為「屬性」並沒有太大的問題。
延伸閱讀:
2 則留言:
attribute和property的英文原意有所不同。
attribute是由人賦予的性質,例如木材是屬於環保材料,但或許不是所有的人都這麼認為。
property是原本就有的性質。例如木材是易燃的,不會因為任何想法而有所不同。
按照英文原義來思考的話,attribute應該翻譯成屬性,由人來分類歸屬而產生的性質;而property應該翻譯成特性,特性不會因人而異。
例:木材的特性之一是易燃,但也因此具有環保材料的屬性。
感謝留言, 字典上來看, attribute 比較偏向內在不可量化的性質, 而 property 是偏外在、通常可以量化的物質, 因此財產是 property, 但領導力是 attribute。
張貼留言