In <B5557156.18EC%khosokawa@....com> (May.27 2000 13:05 JST),
``[XP-jp:00408] Re: Refactoring Was: Re: 【 4. Code Formatting 】 (案)'',
khosokawa@....com says:
= (コメントになっている部分は、訳し
= かたがわからず、Smalltalkのままです。)
= >> removeStep
= >> | stepToRemove |
= >> stepToRemove := self list selection.
= >> stepToRemove isNil ifFalse: [stepToRemove isExecutable ifTrue:
= >> [self list remove: stepToRemove.
= >> steps remove: stepToRemove]]
= public void removeStep() {
= /* type */ stepToRemove;
=
= stepToRemove = /* self list selection */;
= if (! stepToRemove.isNil())
= if (stepToRemove.isExecutable()) {
= /* self list remove: stepToRemove */;
= steps.remove(stepsToRemove);
= }
= }
たしか、returnが明示(``^something'' のように)されていないときに
は、implicitlyに``self''を返したと思います。
仮に、問題のクラスを``Foo''とでもしておきます。多分このクラスに
は、``Step''とでも言うべきオブジェクトを集約する属性``steps''が
あるのでしょう。
public Foo removeStep(){
Step stepToRemove;
stepToRemove = this.list().selection();
if (!stepToRemove.isNil()){
if (stepToRemove.isExecutable()){
this.list().remove(stepToRemove);
steps.remove(stepToRemove);
}
}
return this;
}
おそらく、こんな感じです。
= >> removeStep
= >> self removeStep: self list selection
= >>
= >> removeStep: aStep
= >> aStep isNil ifTrue: [^self].
= >> aStep isExecutable ifFalse: [^self].
= >> self list remove: aStep.
= >> steps remove: aStep
= >> Copyright (c) 1999, REJeffries et al. (ronjeffries@....org)
= public void removeStep() {
= /* self removeStep: self list selection */;
= }
=
= public /* return type */ removeStep(/* type */ aStep) {
= if (aStep.isNil())
= return /* self */;
= if (! aStep.isExecutable())
= return /* self */;
= /* self list remove: aStep */;
= steps.remove(aStep);
= }
こちらは、
public Foo removeStep(){
this.removeStep(this.list().selection());
return this;
}
public Foo removeStep(Step aStep){
if (aStep.isNil())
return this;
if (!aStep.isExecutable())
return this;
this.list().remove(aStep);
steps.remove(aStep);
return this;
}
こんな感じになると思います。
(冗長な``this''がありますが。)
= なるほど。納得、納得。
「removeすべきStepを選択してremoveする」という処理から、「ある
Stepをremoveする」という汎用的な処理が括り出されていますね。ま
た、その「あるStep」というのが満たさなくてはいけない条件も明解
になっています。
-.- . -. -.
Ken Nakagaki (kenn@....nu is NOT for private E-Mail)
「人は船ではない。人は会社ではない」-- Gerry Spence