본문 바로가기
컴퓨터

[TIL] 반복문의 인덱스 정하기는 의미있는 이름으로 한다(i, j, k 지양)

by 봄여름가을 2023. 10. 17.

문제

잘 짜놓은 k-neareast neighbor 머신러닝 코드가 왜인지 이상한 결과를 뱉어낸다. 여기저기에 $std::cout$를 찍어서 확인해보지만 어디 하나 이상한 데가 없어서 당황스럽다. 왜인지 distance를 잘 계산은 하는데 계속 같은 점에 대해서만 하는 것 같아서 이상하다.

 

원인

알고보니(그래도 1시간 정도만에 찾았다) 이중 for문에서 i와 j를 헷갈려서 쓴 부분이 있었다. 말하자면 j번째 training sample과의 거리를 구해야하는데, i번째 sample과의 거리를 구하고 있었다. 그러니 당연히 대다수의 distance가 같게 나타난 것이었다.

 

해결방법

오타를 바로잡았다.

 

예방

이건 클린코드와 관련된 문제다. 이와 관련된 공통적인 조언은 의미있는 이름을 지으라는 것이다. 내 경우에는 $neighborNum$이라든지 $train\_idx$ 같은 걸 사용할 수 있을 것이다.

만약 처음부터 내가 100% 작성한 코드였다면 이중 for문 자체를 사용하지 않았을 것이다. 

 

참고자료

https://this-programmer.tistory.com/101

 

좋은 변수이름 정하기 : 반복문 인덱스 이름

전의 게시물에서도 밝혔다시피 이 게시물은 스티브 맥코넬이 쓴 CODE COMPLETE2에 나온 내용이며 다른 사람들에게도 변수 이름의 중요성과 그 이름을 정하는 데 도움을 주기 위해, 그리고 나 자신도

this-programmer.tistory.com

https://stackoverflow.com/questions/101070/what-is-an-ideal-variable-naming-convention-for-loop-variables

 

What is an ideal variable naming convention for loop variables?

If you are writing a simple little loop, what should you name the counter? Provide example loops!

stackoverflow.com

https://velog.io/@doforme/chap-2.-의미있는-이름

 

클린코드 chap 2. 의미있는 이름

프로그래머는 누구나 나쁜 코드가 업무 속도를 늦춘다는 사실을 안다. 하지만 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 생각한다.여기서 두번째 부분은 사실이 아니다. 나쁜 코드를

velog.io

 

'컴퓨터' 카테고리의 다른 글

GPU를 이용한 병렬화에서 고려해야 할 요소  (0) 2024.06.21

댓글