bool 함수 매개 변수로 잘못 이해

2024 단어 bool함수
우리는 많은 코딩 스타일이나 코드 규범이 있다.그러나 이것은 우리가 자주 잊어버릴 수 있다. 바로 우리가 함수의 매개 변수에bool 매개 변수를 자주 사용하면 코드의 가독성을 크게 떨어뜨릴 수 있다.안 믿어?우리 먼저 아래의 코드를 봅시다.아래의 코드를 읽으면 이 코드가 무슨 뜻이라고 생각합니까?widget->repaint(false);Repaint 하지 말라고요?아니면 다른 무슨 뜻이야?문서를 보고 나서야 우리는 이 매개 변수가immediate라는 것을 알게 되었다. 즉,false는 바로 다시 그리지 않고true 코드는 바로 다시 그리지 않는다는 것을 의미한다.Windows API에도 다음과 같은 함수가 있습니다. InvalidateRect, 아래 코드를 보면 무슨 뜻인지 알 수 있습니까?InvalidateRect(hwnd, lpRect, false);InvalidateRect라는 함수 이름이 얼마나 엉망이었는지 말하지 않고 그 false 파라미터를 먼저 말해 볼까요?invalidate는 "XXX를 무효화시킨다"는 뜻입니다. false는 무슨 뜻입니까?이중 부정?확실하다만약 네가 이런 코드를 본다면, 너는 상당히 난해할 것이다.그래서 문서를 보거나 InvalidateRect의 함수 정의를 보십시오. 그 매개 변수가 BOOL bErase라는 것을 보실 수 있습니다. "배경을 다시 그릴 것인가"라는 뜻입니다.이런 일이 많습니다. 다음 코드를 보면str의'%USER%'를 실제 사용자 이름으로 바꾸고 싶습니다:str.replace('%USER%','user,false);//Qt 3TNND, 그 false는 무슨 뜻입니까?안 바꿔요?아니면 다른 무슨 뜻이야?문서를 보고서야 알 수 있듯이false는 "대소문자가 민감하지 않은 교체"를 대표합니다.사실, 만약에 당신이 bool 변수가 아니라 매거 변수/상량을 사용한다면, 당신의 코드를 더욱 쉽게 읽을 수 있을 것입니다. 예를 들어:
 
widget->repaint(PAINT::immediate);
widget->repaint(PAINT::deffer);
InvalidateRect(hwnd, lpRect, !RepantBackground);
str.replace("%USER%", user, Qt::CaseInsensitive); // Qt 4 , , :
component.setCentered(true, false);
이게 뭐야?문서를 보고서야 알 수 있듯이 이것은 원래 setCentered(centered, autoUpdate)였다.new Textbox(300, 100, false, true);이건 또 뭐야?문서를 보고서야 알 수 있듯이 이것은 텍스트 상자를 만드는 것입니다. 세 번째 매개 변수는'스크롤 막대를 굴릴까요'이고, 네 번째는'자동으로 줄을 바꿀까요'입니다.TNND! 이런 상황이 최악은 아니야, 아래의 이중 부정을 봐..
 
component.setDisabled(false);
filter.setCaseInsensitive(false) , , , , 。
event.initKeyEvent("keypress", true, true, null, null,false, false, false, false, 9, 0);
이 글을 보고 나서 나는 네가 다시는 bool을 함수 매개 변수로 삼지 않기를 바란다.두 가지 이유가 없다면: 자바의 setVisible(bool) 같은 읽기 문제를 가져오지 않는다는 것을 100% 확인하세요.너는 네가 똑같은 코드를 쓰고 싶어 하는 것을 100% 확인한다.만약 당신이 좋은 API를 설계하고 싶다면 Nokia의 Qt의 을 읽어보시는 것을 강력히 추천합니다. 본고는 바로 그 중의 "Boolean Trap"입니다.

좋은 웹페이지 즐겨찾기