읽기 좋은 코드가 좋은 코드다.

홍시_코딩기록 2025. 5. 14. 22:30

7. 읽기 쉽게 흐름제어 만들기

 

📌 조건문에서 인수의 순서

1. if (length >= 10)
2. if (10 <= length)

1. while (bytes_received < bytes_expected)
2. while (bytes_expected > bytes_received)

같은 코드인데 왜 1번이 읽기가 더 편할까?

왼쪽 오른쪽
값이 더 유동적인 '질문을 받는' 표현 더 고정적인 값으로 , 비교대상으로 사용되는 표현

 

📌 if/else 블록의 순서

- 부정이 아닌 긍정을 다루어라.즉 if(!debug) 가 아니라 if(debug)

- 간단한 것을 먼저 처리하라. 

- 더 흥미롭고, 확실한 것을 먼저 다루어라

 

if (url.HasQueryParameter("expand_all")) {
	for (int i = 0; i< items.size(); i++) {
		items[i].Expand()
    }
} else {
	...
}

- 코드를 보자마자 expand_all이 무엇인지 궁금해 할 것이다.

  더 흥미롭고 긍정하는 부분이므로 이를 먼저 다르는 것이 좋다.

 

 

📌 삼항연산자를 이용하는 조건문 표현

- 기본적으로 if/else를 이용하고 삼항연산자는 매우 간단할 떄만 사용해야 한다.

 

📌 do/while 루프를 피하라

- do/while문은 코드를 두 번 읽기 때문에 부자연스럽다.

 

📌 함수 중간에서 반환하기

for (int i = 0; i < results.size(); i++) {
	if (results[i] == NULL) continue;
    non_null_count++;
    
    if (results[i]->name == "") continue;
    cout << "Considering candidate..." << endl;
    
    ...
}

- 밖으로 빠져나가지 않고 루프에서 중간에 반환할 때는 continue를 사용

- 일반적으로 continue문은 혼란스럽게 보일 수 있지만 루프에 대한 각각의 반복이 독립적이다.

  따라서 continue는 단지 "이번 반복을 건너뛰어라"를 의미한다.