11. 플래그 인수는 추하다. 함수가 여러 가지를 처리한다고 공표하는 것과 같다. renderForSuit() renderForSingleTest() < render(booleanisSuite)
12. writeField(name) vswriteField(outputStream, name) 어느 쪽이 이햐하기 쉬운가? 이항 -> 단항으로 변환을 할 수 있다면 그렇게 하자. 이항 인수가 적절한 경우도 있다. EX) Point p = new Point(0, 0) vs Point p = new Point(0) 만약 두 인수가 한 가지 값을 표현하거나 자연적인 순서가 있다면 OK assertEquals(expected, actual) 과 같이 당연한 이항 함수도 자연적인 순서가 존재하지 않아서 실수를 유발한다.
13. Difficulty 삼항 함수 >이항 함수 assertEqual(message, expected, actual) 첫 번째 인수가 expected라고 예상하지 않았나? 예외) assertEqual(1.0, amount, 0.001) 이해하기는 어렵지만, 부동소수점의 정밀도를 고려하면 가치는 있다.
14. Circle makeCircle(double x, double y, double radius); vs Circle makeCircle(Point center, double radius); 같은 개념의 인수를 새로운 객체로 합칠 수 있는지? 확인하자!
16. 함수의 의도를 표현하기 위해서 좋은 이름은 필수적이다. 단항 함수는 함수와 인수 -> 동사/명사로 EX) write(name), writeField(name) 또 함수 이름에 키워드를 추가할 수도 있다. EX) assertEquals < assertExpectedEqualsActual(expected, actual) 이렇게 함으로써 인수의 순서 문제를 해결할 수 있다.
17. 부수 효과는 함수가 한 가지 일만 수행한다는 원칙을 위배한다. 부수 효과로 인해 일시적인 결합이나 순서 종속성이 생긴다. 때로, 일시적인 결합이 필요하다면 함수 이름에 명시하자. 물론 함수가 한 가지만 한다는 규칙을 위반하지만 말이다.
18. 출력 인수를 피하라! 출력 인수는 코드 읽기의 흐름을 망해한다. OOP이전에는 출력 인수가 필요했다. 하지만 OOP에선 this가 출력 인수를 대신한다.
19. If( set(“username”, “unclebob”) ) /*…*/ 확인 or 설정 ? If( attributeExists(“username”) ) { setAttribute(“username”, “unclebob”); /*…*/ } 명령과 조회를 구분하자.