これらは同じ意味のようです。しかし、どの用語がどの文脈でより適切なのでしょうか?
11 に答える
一般的な用語 (および通常の英語の使用法) では、これらの用語は同じことを意味します。
HTML / Javascript の特定のコンテキストでは、DOM 要素の HTML 表現には属性(タグ内に含まれるキー/値のペアに対して XML で使用される用語) があるため、用語が混乱しますが、JavaScript オブジェクトとして表される場合、それらの属性オブジェクトプロパティとして表示されます。
さらに混乱させるために、プロパティを変更すると、通常は属性が更新されます。
たとえば、element.href
プロパティを変更すると要素のhref
属性が更新され、それが の呼び出しに反映されますelement.getAttribute('href')
。
ただし、後でそのプロパティを読み取ると、属性が相対 URL である場合でも、絶対 URL に正規化されています。
これらの言葉は、コンピュータ サイエンスが登場するずっと前から存在していました。
属性は、私たちが誰かまたは何かに帰属する品質またはオブジェクトです。たとえば、セプターは権力と国家の属性です。
プロパティは、帰属なしに存在する品質です。たとえば、粘土には粘着性があります。つまり、粘土の特性は接着性です。別の例: 金属の特性の 1 つに電気伝導性があります。プロパティは、誰かまたは何かに帰属させる必要なしに、物理現象を通じてそれ自体を示します。同様に、誰かが男性的な属性を持っていると言うことは自明です。事実上、プロパティは誰かまたは何かによって所有されていると言えます。
ただし、公平を期すために、コンピュータ サイエンスでは、これら 2 つの単語は、少なくともほとんどの場合、同じ意味で使用できます。ただし、プログラマーは通常、英文学の学位を取得しておらず、文法の本を書いたり気にしたりしません :)。
多くの場合、属性はメカニズムまたは現実世界のものを説明するために使用されます。
モデルを記述するためにプロパティが使用されます。
たとえば、(机の上にある) ドキュメントは、ドラフトであるという属性を持っている場合があります。
ドキュメントをモデル化するクラスには、ドラフトかどうかを示すプロパティがあります。この場合、プロパティは状態をキャプチャします。
これらの用語の正確な意味は、話している言語/システム/宇宙によって大きく異なります。
HTML/XML では、属性は等号と値を含むタグの一部であり、プロパティは何も意味しません。
そのため、あなたが議論しているドメインについて、より多くの情報が必要です。
パイソンでは...
class X( object ):
def __init__( self ):
self.attribute
def getAttr( self ):
return self.attribute
def setAttr( self, value ):
self.attribute= value
property_name= property( getAttr, setAttr )
プロパティは、setter、getter (および deleter) 関数のコレクションをラップする単一の属性のような名前です。
属性は通常、別のオブジェクト内の単一のオブジェクトです。
そうは言っても、Python は__getattr__
「属性」の定義を拡張できるようなメソッドを提供します。
結論 - それらはほぼ同義です。Python では、実装方法が技術的に異なります。
属性とプロパティの違いは何ですか?
機能と機能の違いは何ですか? Characteristic と Character はどう違いますか?行為と行動の違いは何ですか?
文脈の変化にすぎません。
モノ、商品、個性、人
人は行動で行動します。パーソナリティには、特定のキャラクターの特徴があります。Product には、機能を派生させる Feature があります。オブジェクトには、プロパティを与える属性がありました。
HTML では、属性は DOM ツリーに固有のもののようですが、プロパティは DOM 要素の特性を記述するために使用されます。
Java (または他の言語) では、プロパティ/属性の使用は使用法によって異なります。
値が頻繁に変更されない場合に使用されるプロパティ (通常、起動時または環境変数に使用されます)
属性は、エレメント (オブジェクト) の値 (オブジェクトの子) であり、非常に頻繁に/常に変更され、永続的であるかどうかにかかわらず変更される可能性があります。
<property attribute="attributeValue">proopertyValue</property>
見るのもひとつの方法でしょう。
C# の場合
[Attribute]
public class Entity
{
private int Property{get; set;};
Delphi はプロパティを使用し、.NET への道を見つけました (同じアーキテクトを持っているため)。
Delphi では、統合プロパティ エディタを使用して設計時にプロパティを設定できるように、実行時型情報と組み合わせて使用されることがよくあります。
プロパティは常にフィールドに関連付けられているわけではありません。それらは、副作用を持つ可能性のある関数である可能性があります(もちろん、それは非常に悪い設計です)。