3

これは私が抱えている特定の問題ではなく、より多くの選択肢がありますが、「適切な」OOの回答と、これを行うことによるパフォーマンスの利点/損失がある可能性があるため、質問はSOに関連していると思います。私は AS3 で作業していますが、質問は他のクラスベース/oo 言語にも関連すると思います。

さまざまなパラメーターを持つクラスにJavaスタイルの複数のコンストラクターを持たせる方法を考えようとしていましたが(これは別の話です)、jQueryについて考えさせられ、可能であればオブジェクトを返すことで関数をチェーンする方法について考えました。求められています。

それが常に jQuery を使った最もきれいなコードになるとは限りません。これは従来のアプローチとは異なる方法だと思いますが、この方法について何か言いたいことがあるのだろうかと思いました。

//execute chains of methods on creation, as each returns its parent class (person)
var person:Person = new Person().male('a male', 25).wakeUp().lookAround();

//Or later
person.getUp().rubEyes();

...そして、多くの場合必要とされないオブジェクトを返すすべてのメンバー関数を持つことは、重大な無駄/パフォーマンスの問題を表すかどうか?

これは、コードを保存し、関数のシーケンスをより読みやすい方法で表現するための良い方法のように思えます。

前もって感謝します

4

1 に答える 1

2

はい、言いたいことがありperson.getUp().rubEyes()ます。意味的には、見た目が良くなります。それで全部です。

new Person().male('a male', 25)はまったく別のケースですが。male は getUp のような動詞ではありません。私は好むだろう: new Person({ gender: 'male', age: 25}).

返されたオブジェクトが使用されていない場合、パフォーマンスに重大な影響がありますか? いいえ。まず第一に、ほとんどの (jit) コンパイラは、返されたオブジェクトが決して使用されないことを理解するのに十分なほど賢く、したがってそれらの命令をまったく実行しません。これは、デッド コードの排除と呼ばれる最適化戦略です。第 2 に、コンパイラがこの最適化を実行しない場合でも、わずかなクロック サイクルについて話していることになります。心配する必要はありません。一般に、この種のパフォーマンスの問題についてはまったく心配しないことをお勧めします。最適化の努力を、コンパイラが支援できないコードの部分 (つまり、設計、アルゴリズムなど) に集中させたほうがよいでしょう。

チェインを楽しもう!

于 2013-05-05T09:50:54.927 に答える