私はiTunes Uのオンラインコース「プログラミング方法論」を受講しています。このコースには、Javaベースの「ロボットのカレル」が導入されていて、疑問が生じました。たとえば、次のコードを使用します。
import stanford.karel.*;
public class MidpointFindingKarel extends SuperKarel {
// You fill in this part
public void run(){
fillBeepers();
turnAround();
move();
checkWestEdge();
}
private void fillBeepers(){
move();
while(frontIsClear()){
putBeeper();
move();
}
}
private void checkEastEdge(){
while(beepersPresent()){
move();
}
if(noBeepersPresent()){
turnAround();
move();
if(beepersPresent()){
pickBeeper();
move();
checkWestEdge();
}
else putBeeper();
}
}
private void checkWestEdge(){
while(beepersPresent()){
move();
}
if(noBeepersPresent()){
turnAround();
move();
if(beepersPresent())
{
pickBeeper();
move();
checkEastEdge();
}
else putBeeper();
}
}
}
このコードのアイデアは、画面の端に加えて「ビープ音」を配置し、ビープ音の端を取ることによって画面の中央を見つけることです。私が行ったことは、各「エッジを見つける」関数を作成して、他の関数を呼び出して他のエッジを見つけることです。それは最終的に中央に到達し、左右のビーパーをチェックし、何もないことを確認し、中央に 1 つ配置します。
ここで質問したいと思います: 私は関数 (またはメソッド? どのように呼び出すか) を頻繁にネストする傾向があります。それはプログラマーとしての悪い習慣であり、より大規模で複雑なプロジェクトでは、私に逆戻りするのでしょうか? コードの可読性が低下しますか? もしそうなら、誰でもこれらの関数を呼び出す方法を解決できますか?