私はもともと次のように書くつもりでした:
-(void) setLeftChild:(NSNode *) leftChildNode {
_leftChildNode = leftChildNode;
leftChildNode.parent = self;
// ...
}
ノードの子にすべての適切な値を設定し、子ノードの親ノードは自分自身を指す必要があり、子ノードのツリー オブジェクトは親のツリー オブジェクト (ノードが属するツリー) と同じである必要があります。
しかし、そうすると単純な行に影響することに気付きました。そのため、node.leftChild = something;
この行には、予期しない「副作用」が発生する可能性があります。
また、setLeftChild
実際に他のプロパティのセッターを使用し (leftChildNode.parent = self
適切なインターフェイスである を使用するなど)、それらのセッターがノードのleftChild
セッターを使用するとどうなりますか? このように無限ループになる可能性があります。特殊なケースでこの無限ループが発生する場合はあまり良くなく、潜在的な無限ループについて常に心配する必要があります。
もう 1 つの方法は、合成されたセッターをオーバーライドせず、 のaddLeftChildNode
代わりに名前を使用することです。setLeftChildNode
内部addLeftChildNode
では、プロパティ セッターを心配なく自由に使用できます。しかし、本当に「設定」したい場合はどうでしょうか?「追加」という名前は、空の場合にのみ追加することを意味するので、「設定」という名前がより適切です。addLeftChild
の代わりに呼び出すとaddLeftChildNode
、これら 2 つの名前が紛らわしくなります。it を呼び出すなどの規則が使用されている場合setAndConfigLeftChildNode
、混乱を招くことはなく、明らかにセッターをオーバーライドすることもなく、コードで従う規則になる可能性があります。(setAndConfig
セッターをオーバーライドする代わりに使用)
したがって、次の問題があります。
1) オーバーライドされたセッターの予期しない副作用 (質問の冒頭)
2) 無限ループ
3) メソッドの命名、混乱する可能性があります
良い共通/ベストプラクティスはありますか?