我們有幾個類,其中對成員函數的調用可能會改變狀態,有時不會依賴於具有默認值的布爾值。改進代碼可讀性而不會導致性能損失
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);
}
我想這將內聯無論如何,然後。我知道我可以寫枚舉和常量,這也會提高可讀性:a.set("foobar", SILENTLY);
但我不覺得它好,因爲問題是布爾性質(是否)。另一方面。不過,我想聽聽你如何處理這種情況。 (我假設我會得到一個「取決於」的答案,因爲我肯定錯過了一些關鍵細節)與之共存?
那些成員函數並不是經常被調用和使用,但也不是很少。我擔心的是,有時候你可能會誤解一個布爾值爲silent/not_silent-flag,但這有另一個含義。
一個例子,這也可能會產生誤導:
if(b->getData(false) && something_other)
這可能是夾雜了b->getData() == false
枚舉比布爾值更好。如果你*表示*默默地,*說*「默默地」,不要說「錯誤」。它只需要幾個'foo(true,false,true,true)'調用和接下來的錯誤來真正感謝兩值枚舉。 – molbdnilo 2012-07-09 11:27:56
和枚舉聲明新類型。使用類型系統是有利的。 – 2012-07-09 14:36:43