タグ付けされた質問 「method-chaining」

5
クラスメソッドから「return self」の目的は?
私はオープンソースプロジェクトでこのようなものに出会いました。インスタンス属性を変更するメソッドは、インスタンスへの参照を返します。この構成の目的は何ですか? class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return self

8
メソッドチェーンを使用する場合、オブジェクトを再利用しますか、それとも作成しますか?
次のようなメソッドチェーンを使用する場合: var car = new Car().OfBrand(Brand.Ford).OfModel(12345).PaintedIn(Color.Silver).Create(); 次の2つのアプローチがあります。 次のように、同じオブジェクトを再利用します。 public Car PaintedIn(Color color) { this.Color = color; return this; } 次のCarように、すべてのステップでタイプの新しいオブジェクトを作成します。 public Car PaintedIn(Color color) { var car = new Car(this); // Clone the current object. car.Color = color; // Assign the values to the clone, not the original object. return …

4
メソッドチェーンを使用してオブジェクトを構築するイディオムの名前は何ですか?
メソッドチェーンを使用してオブジェクトをセットアップするパターンを頻繁に使用しますが、Builderor Prototypeパターンに似ていますが、各メソッド呼び出しで新しいオブジェクトを作成せず、代わりに元のオブジェクトを変更します。 例: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); このパターンに名前があるのか​​、それがアンチパターンと見なされるのかどうか疑問に思うだけです。なぜなら、より流に読むことができても、長いメソッドチェーンにつながる可能性があるからです。

7
コーディングスタイルの問題:パラメーターを受け取り、それを変更し、そのパラメーターを返す関数が必要ですか?
私は友人と、これらの2つの慣習が単に同じコインの両面であるのか、それとも本当に優れているのかについて、少し議論しています。 パラメーターを受け取り、そのメンバーに入力してから返す関数があります。 Item predictPrice(Item item) 渡されたのと同じオブジェクトで機能するため、アイテムを返す必要はないと考えています。実際、発信者の観点から見ると、もしそうでない場合は、新しいアイテムを返すと期待できるので、問題を混乱させます。 彼はそれが違いを生まないと主張し、それが新しいアイテムを作成してそれを返すかどうかさえ問題ではないだろうと主張する。次の理由から、私は強く反対します。 アイテムパス(またはポインターなど)への複数の参照がある場合、新しいオブジェクトを割り当てて返すことは、それらの参照が正しくないため、重要です。 非メモリ管理言語では、新しいインスタンスを割り当てる関数はメモリの所有権を要求するため、ある時点で呼び出されるクリーンアップメソッドを実装する必要があります。 ヒープへの割り当ては潜在的にコストがかかるため、呼び出された関数がそれを行うかどうかが重要です。 したがって、オブジェクトを変更するか、新しいオブジェクトを割り当てるかは、メソッドシグネチャを介して確認できることが非常に重要であると考えています。結果として、関数は渡されたオブジェクトを変更するだけなので、署名は次のようになっているはずです。 void predictPrice(Item item) すべてのコードベース(私たちが取り組んでいる言語であるJavaではなく、明らかにCおよびC ++コードベース)で、上記のスタイルは本質的にかなり経験豊富なプログラマーによって守られ、守られています。彼は、私のコードベースと同僚のサンプルサイズは、考えられるすべてのコードベースと同僚のなかで小さいため、私の経験は優れているかどうかの真の指標ではないと主張しています。 それで、何か考えは?

7
関数は変更されていないパラメーターのみを返しますが、役に立ちませんか?
私が働いているプロジェクトでこの機能を見つけました: -- Just returns the text unchanged. -- Note: <text> may be nil, function must return nil in that case! function Widget:wtr(text) return text end 残念なことに、コーダーは社内で機能しなくなりました。何もしないが、呼び出されたパラメーターを返す関数を作成するのはなぜですか? この例では指定されていませんが、どのような場合でも、そのような関数の使用はありますか? のため function aFunction(parameter) return parameter end で終わる aFunction(parameter) == parameter なぜ私は aFunction(parameter) == whatIWantToCheck の代わりに parameter == whatIWantToCheck ?

1
メソッドごとに1つのパラメーターのみを必要とする連鎖メソッドは、カリー化と同等ですか?
私は最近Rubyをいじくり回しており、純粋なオブジェクト指向言語(および純粋ではないものでも)で1つのパラメータのみを取り、連鎖するメソッドを作成することは、スタイル?そうでない場合は、なぜですか?この件に関する詳細かつ厳密な回答をいただければ幸いです。

4
自己参照メソッドチェーンに実際の欠点はありますか?
私は最近、特定のプロジェクトの特定のクラスにチェーンのメソッドを実装して、コードの可読性を向上させることを提案しました。「便利なだけでなく、セマンティクスのために流fluentなインターフェイスを実装すべきではない」という回答を得て、提案を打ち切りました。私は、流interfaceなインターフェースを提案しているのではなく、読みやすさとコーディングの快適さを改善するためにメソッド自体を連鎖させる(両方とも混同される可能性があります)と回答しました。 とにかく、これは、おそらく何も返さないはずのメソッド(セッターなど)で常に「this」を返すことで、悪い習慣を負わされる可能性があると考えさせられました。 私の質問は、前の慣習を適用することを悪い習慣や虐待とみなすことができるのか、なぜなのか、ということです。パフォーマンス上の欠点はないと思いますか?

4
クラスのメソッドは、それ自体を変更した後、いつ同じインスタンスを返す必要がありますか?
私は3つのメソッドを持つクラスを持っているA()、B()とC()。これらのメソッドは、独自のインスタンスを変更します。 インスタンスが別のコピーである場合(同様に)、メソッドはインスタンスClone()を返すvoid必要がありreturn this;ますが、メソッドで同じインスタンスを変更し、他の値を返さない場合は、同じインスタンス()を返すか、自由に選択できます。 同じ変更されたインスタンスを返すことを決定するとき、のようなきちんとしたメソッドチェーンを実行できますobj.A().B().C();。 これがそうする唯一の理由でしょうか? 自分のインスタンスを変更して返すこともできますか?それとも、コピーのみを返し、元のオブジェクトを以前のままにしておくべきですか?同じ変更されたインスタンスを返す場合、ユーザーは戻り値がコピーであると想定する可能性があるため、それ以外の場合は返されませんか?それが問題なければ、メソッドでそのようなことを明確にする最良の方法は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.