|
박지훈.임프 님이 쓰신 글 :
: 임펠리테리입니다.
:
: 이런 꼬인 코드를 좋아하시나보죠?
: 두줄의 코드를 한줄로 줄였으니 조금 더 빨라질거라고 생각하시겠습니다만... 별로 그렇지도 않습니다. 새로운 정수 변수를 만들어서 거기에 인덱스를 저장하고 다시 배열인덱스로 넘겨주어도
: CPU에 주어지는 부담은 기껏해야 대여섯 클럭밖에 안됩니다. 시간으로 따지면 십만분의 1초쯤?
:
: 저도 C언어에 광적으로 미쳐있던 90년대 초반엔 이런 코드를 즐겨 작성했었죠. 주특기가 포인터
: 비꼬기였으니, 한줄로 작성한 소스라도 다른 어떤 사람도 그 의미를 쉽게 알아보지 못하게 할 수
: 있었습니다.
:
: 코딩의 첫번째 원칙은 가독성, readability입니다. 다른 사람들이나 자신이 다시 봐도 금방 의미를
: 알아볼 수 있는 코드가 가장 좋은 코드입니다. 한눈에 봐도 금방 의미를 알아챌 수 있게, 만약
: 그래도 알아보기가 쉽지 않다면 주석을 더해서라도 더 알아보기 쉽게 해야 좋은 코드입니다.
:
: ((TImageList *)(MainForm->ImList->Items[MainForm->PopupMenu1->Items->IndexOf(NewItem)]))->AddImages(ImageL);
: 이 상태로는 이 코드가 무슨 뜻인지도 알아보기가 힘듭니다. 이걸 풀어봅시다.
:
: int Index = MainForm->PopupMenu1->Items->IndexOf(NewItem);
: ((TImageList *)(MainForm->ImList->Items[Index]))->AddImages(ImageL);
:
: 잘 보세요. ImList는 아마도 이미지리스트일테니, 이미지리스트의 Items라는 멤버를 억세스하려고
: 하고 있는 셈이죠. 그런데, TImageList에는 Items라는 멤버가 없을 뿐 아니라, 이 Items라는 멤버
: 를 다시 TImageList * 형으로 강제로 캐스팅을 하려고 했네요. 코드가 앞뒤가 전혀 맞지 않습니다.
:
: 매번... 답변을 하기 위해 추리를 해야 하는군요. --;;
: 한번쯤은 답변할 사람이 어떻게 답변을 준비할까를 생각해보시고 질문을 해주시길 부탁드립니다.
:
: 그럼 이만...
죄송합니다. 제가 초보라 그렇게 하는방법을 순간 몰랐었습니다. 담부터 참고하겠습니다.
그런데,
((TImageList *)(MainForm->ImList->Items[Index]))->AddImages(ImageL);
클릭한 아이템(Items[Index]) 포커스를 가진 ImageList
여기에서 코드의 압뒤를 약간만수정해주십시요
선택한 아이템(Items[Index])에 포커스를 가진 ImageList를 추가하고 싶습니다.
그리고, 질문을할때 저도 고민을 많이 합니다.
어떻게 질문을해야할지...
담부터 더 생각해서 질문하겠습니다.
좋은하루 되세요~
|