回答:
Martin Fowlerは最近、この記事でOverloaded getterおよびsetterと名付けました。
私は最近Javascriptをいじくり回していますが、私が驚いたことの1つは、ゲッターとセッターに同じ関数名を使用する習慣です。したがって、使用するjQueryでバナーの高さを確認する場合
$("#banner").height()
、および使用する高さを変更する場合$("#banner").height(100)
。この規約は、Smalltalkで使用されていたため、私にはよく知られています。で値を取得し
banner height
、で変更する場合がありbanner height: 100
ます。それがsmalltalkの慣習であることを知ることは、私がそれを好きになることを期待するのに十分です。しかし、最高のものにも欠陥があり、このコーディングスタイルに対する嫌悪感を隠すことはできません...この好みにもかかわらず、あなたが扱っている言語の規則に従う必要があります。私が再びSmalltalkを書い
height:100
ていたとしても、その言語の慣習との一貫性を保つために私はまだ使用しています。ただし、Javascriptは強力な規則があることで注目されていないため、jQueryで使用されている場合でも、この規則は避けたいと思います...
オブジェクト指向言語では「メソッドのオーバーロード」、オブジェクト指向言語以外では「関数のオーバーロード」と呼ばれます。
それが良い習慣であるかどうかは、ゲッター/セッター対パブリックメンバーとほぼ同じくらい議論のトピックです。賛否両論の人々は、おそらくこの機能を持っているか、持っていない言語に歯を切っており、彼らの方法で設定されています。私はそれを使用し、いくつかの理由で練習が好きです:
get
または前set
に追加すると、冗長性が増します。int
およびいずれかのdouble
)割当(のLHSでタイプ変更、int x = foo.bar()
対をdouble x = foo.bar()
コード変更(必要としない)barAsInteger()
対barAsDouble()
クラスの両方を提供する場合、右側に)を。これのマイナス面は、コードを見ただけでどのメソッドが呼び出されているかを正確に知ることが難しい場合があることです。JavaScriptには実際のプロパティがないため(値を設定すると実際にコードを実行できます)、パターンはプロパティイディオムを実装するものです。(別の名前を付けても)
したがって、実際のプロパティを実装する言語では、代わりにこれを実行します。
element.css = ...
x = element.css
プロパティを処理する言語でJavaScriptパターンを使用する場合、何か異常なことをしていることになります。 それはおそらく良い考えではないでしょう。 言語がプロパティを処理する方法でプロパティを処理するので、他の人があなたと一緒に作業することを混同しないでください。
あなたが探していると思う properties
person.salary('10000')
などで個人の給与を設定または取得する場合は、実際にはそうではありませんperson.salary()
。
私は単純な理由でそれに対してまったく反対です:クラス、メソッドまたは関数はただ一つのことをするべきです-私の意見ではgetter
、setter
メソッドとメソッドの組み合わせはその規則に違反します。その結果:
return
関数の値は、getterまたはsetterブロックが実行されるかどうかによって異なります。これは単純に保守性の悪夢にあなたを導くことができます。メソッドは、どの場合でも1つのタイプのデータ/オブジェクトのみを返す必要があります-またはreturn null
、false
またはexception
エラーの場合にスローします。Blrfl
回答で述べたように。