최선은 입력인수가 없는 것이고, 차선은 1개뿐인 것이다. 출력인수는 없어야한다.(코드를 이해하기 어렵게 만든다)
함수가 한꺼번에 여러가지를 처리한다고 공표하는셈. 하나의 함수는 하나의 기능만 해야한다.
1) 인수를 클래스로 묶어라
2) 가변인수를 사용해라
1) 의미가 분명하게 지을것
2) 함수 이름에 인수를 넣을것
assertEquals ( expected, actual) 보다는 asserrExpectedEqualsActual(expected,actual)이 좋다. (순서를 기억할 필요가 없기 때문)
if(set("username","unclebob"))...
이렇게 사용하면 set이 설정하는 함수인지, 설정되어있는지 확인하는 함수인지 이해하기 어렵다.
public void delete(Page page)
{
try
{
deletePageAndAllReferences(page);
}
catch(Exception e)
{
logError(e);
}
}
private void deletePageAllReference(Page page) throws Exception
{
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
private void logError(Exception e)
{
logger.log(e.getMessage());
}
delete는 모든 오류를 처리하면서 deletePageAllReference() 함수를실행하고, 모든 동작은 deletePageAllReference() 에서 실행한다.
반복되는 알고리즘을 if문으로 계속 나눠서 처리하면 알고리즘을 바꿀때 전부 다 바꿔야하고, 실수가 발생하기 쉽다.
초안을 작성하고, 그것을 다듬는다. 처음부터 좋은 코드를 쓸 수 없다.