我参加了在线课程"编程方法"可在iTunes U. 该课程将介绍" Karel the robot"基于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();
}
}
}
这段代码的想法是通过放置" beepers"来找到屏幕的中间位置。除了边缘之外,然后占据蜂鸣器的边缘。 我所做的就是让每个人找到优势并且#34;函数调用另一个函数来查找另一个边。 它最终达到了中间的位置,它检查左右两侧的蜂鸣器,看不到它们,并将一个放在中间。
现在我想问:我经常会嵌套函数(或方法?你怎么称呼它们)。这是一个程序员的坏习惯,在更大,更复杂的项目中,它会回到我身边吗?它会降低我的代码的可读性吗?如果是这样,任何人都可以提供如何调用这些函数的解决方案吗?
答案 0 :(得分:2)
从其他方法调用方法不仅是可接受的实践,它也是godd one。 (重用代码是一种很好的做法)。但是,在您的代码中,检查西部和检查东部大多是重复。我会像这样构建它
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();
}
}
通过这种方式,您可以使用一种检查边缘并且能够检查西部和东部的方法