2012-07-09 2 views
0

우리는 멤버 함수에 대한 호출이 상태를 변경할 수 있고 때로는 기본값이있는 부울에 의존하지 않는 여러 클래스가 있습니다.성능 손실없이 코드 가독성 향상

A a; 
a.set("foobar"); 
assert(a.changed() == true); 

A a; 
a.set("foobar", false); 
assert(a.changed() == false); 

대 그 멤버 함수는 가상 유의하시기 바랍니다. 나는 대중에게 단지 래퍼를 더 읽기 코드에 별칭을 사용하고 여전히 이전 방법을 허용하는 개인 멤버 함수를 만들어주고 호의 것 :

a.silentlySet("foobar") { 
    a.set("foobar", false); 
} 

어쨌든 다음 인라인 될이 것 같아요. 나는 가독성을 향상시킬 enum과 상수를 쓸 수 있다는 것을 알고있다 : a.set("foobar", SILENTLY);하지만 문제는 불리언 특성 (do 또는 not)으로 문제가되지 않는다. 다른쪽에. 그러나 나는 그런 상황을 어떻게 다루는 지 듣고 싶다. (필자가 확실하게 몇 가지 중요한 세부 사항을 놓친 것처럼 "의존적 인"대답을 얻을 것이라고 가정 함) 그것과 함께 살고 있습니까?

이러한 멤버 함수는 자주 호출되거나 사용되는 것이 아니라 드물지도 않습니다. 내가 두려워하는 점은 다른 의미가있을 때 때때로 부울을 silent/not_silent-flag로 오해 할 수도 있다는 것입니다.

이 또한 오해의 소지가 될 수있는 예 :

if(b->getData(false) && something_other) 

b->getData() == false

+1

열거 형은 부울보다 좋습니다. * 조용히 말하면 * "조용히"말하면 "거짓"이라고 말하지 마십시오. 실제로는 두 개의 값이있는 열거 형을 올바르게 인식하기 위해 단지'foo (true, false, true, true)'호출과 버그가 필요합니다. – molbdnilo

+1

그리고 enums는 새로운 유형을 선언합니다. 귀하의 이익을 위해 타입 시스템을 사용하십시오. –

답변

3

와 혼합 될 수도 있지만이 같은 [여기 열거를 사용] 좋은 생각하지 않습니다 문제는 부울 자연입니다 (do 또는 not)

아니요, 열거 형은 이것을 사용하기에 완벽합니다. FWIW, CodeReview에 another discussion about this case이 있습니다.

그렇습니다. 그렇습니다. 래퍼 함수는 대부분 인라인됩니다. C++은 모두 런타임 비용없이 추상화를 제공하는 것입니다. 함수 호출을 인라이닝하는 것은이 점에서 기본적인 도구이므로 컴파일러는 언제 어디에서나 함수 호출을 사용합니다.

+0

방금 ​​Code Review에 합류 했으므로 (적절한 SE 사이트가 있다는 것을 알지 못함) 올바른 권리를 가진 사람이라면 누구나 CR에 옮길 수 있습니다. – math