函数嵌套



我正在参加iTunes U上提供的在线课程"编程方法"。该课程介绍了基于Java的"机器人Karel",它向我提出了一个问题。以这段代码为例:

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();
            }
    }
}

这段代码的想法是通过在边缘旁边放置"蜂鸣器"来找到屏幕的中间,然后取蜂鸣器的边缘。我所做的是让每个"查找边缘"函数调用另一个函数来查找另一个边缘。它最终到达一个点,它在中间,它检查左右的蜂鸣器,看到没有,并在中间放置一个。

现在我想问:我倾向于嵌套函数(或方法?你怎么称呼他们)经常。作为一个程序员,这是一个坏习惯,在更大更复杂的项目中,它会回到我身上吗?它会降低我的代码的可读性吗?如果是这样,任何人都可以提供如何调用这些功能的解决方案吗?

其他方法调用方法不仅是可接受的做法,也是可以接受的做法。(重用代码是一种很好的做法)。 但是,在您的代码中,"检查西部"和"检查东部"大多是重复的。 我会这样构建它

private void checkEdge(String orientation){
    while(beepersPresent()){
        move();
    }
        if(noBeepersPresent()){
            turnAround();
            move();
            if(beepersPresent()){
                pickBeeper();
                move();
                orientation = orientation.equals("west") ? "east" : "west";
                checkEdge(orientation);
            else putBeeper();
        }
}

这样你就有了一种方法来检查边缘,并且能够检查西部和东部

最新更新