你是什麼命名一個布爾變量,但可以有N個有意義的值?作爲布爾值傳遞的2值變量的變量名?
示例:x的值可以是「紅色」或「藍色」。
調用bRed或isRed是有意義的,如果他的值是真的,但沒有傳達關於「false」情況的任何信息。
YOu 可能實現它作爲一個整數,或者如果你挑剔,作爲一個枚舉。但是,這意味着代碼申報枚舉更多線等
我想「redOrBlue」的,但在邏輯上來講,值始終爲true :)
你覺得「redNotBlue」的是什麼?任何更好的想法?
你是什麼命名一個布爾變量,但可以有N個有意義的值?作爲布爾值傳遞的2值變量的變量名?
示例:x的值可以是「紅色」或「藍色」。
調用bRed或isRed是有意義的,如果他的值是真的,但沒有傳達關於「false」情況的任何信息。
YOu 可能實現它作爲一個整數,或者如果你挑剔,作爲一個枚舉。但是,這意味着代碼申報枚舉更多線等
我想「redOrBlue」的,但在邏輯上來講,值始終爲true :)
你覺得「redNotBlue」的是什麼?任何更好的想法?
您應該在這種情況下使用枚舉。
enum EntityColors
{
blue,
red
};
打敗我吧;-) 我同意,我認爲在這個特例中,枚舉是合適的,因爲沒有意義表達'真'或'假'的意思。 – Pandincus 2011-03-19 17:40:56
我已經考慮到了這一點,但它意味着更多的代碼行不是更安全或清晰的。但我會重新考慮。 – 2011-03-19 17:43:45
@Larry,稍後你也想一想你想添加另一種顏色。你的變量是否被命名爲'RedNotBlueNotYellow'?或者如果IsRed是假的,這是否意味着它是藍色或黃色?使用枚舉很容易維護和閱讀。 – 2011-03-19 17:49:26
在這種情況下,只需使用一個enum
,這是最傳神:代碼
public enum ColorValue { Red, Blue };
已經考慮到了這一點,但它意味着更多的代碼行不再是任何類型安全或清晰的代碼。但我會重新考慮。 – 2011-03-19 17:43:08
@Larry:它當然更多*可讀*雖然 - 你將確切地知道你在處理代碼中看到的是什麼,對於布爾值也不能這麼說。另外,您可以更容易地擴展數值集。 – BrokenGlass 2011-03-19 17:44:41
我認爲枚舉更加清晰。如果有一個布爾變量在「最具表現力」的名稱「falseMeansATrueMeansB」中聲明,那麼您會如何繼承某些代碼? – bottlenecked 2011-03-19 17:48:56
更多線沒有傷害開發者呢。一個糟糕的類型和命名變量確實。去使用一個枚舉類型,只在有意義的地方使用布爾值 - 即是/否,真/假邏輯。
也許你想解決其他問題。
例如你有一個打印功能
void print(string text, bool red) {...}
紅色是很重要的entrys其他都是藍色的。爲什麼不改變變量名更有意義
void print(string text, bool isImportant) {...}
這將使API更加清晰,一旦你改變你的重要顏色,說橙色你沒有改變你的變量名稱。
這當然應該被定義爲一個枚舉。
你的問題是「你的名字一個變量,它是一個布爾值,但可以有2個有意義的值出來N實例中:X可以有值‘紅色’或‘藍色’
一個布爾值可以有。兩個值,「true」或「false」,在你的例子中,兩個可能的值是「紅色」或「藍色」,所以這個dos看起來不像布爾變量的好候選。是更多的代碼行,但可能更具可擴展性和更易維護性,因爲它的意圖對於將來的開發人員來說會消耗您的代碼,因此值得(小)實施成本。
我嘗試使用枚舉,但它增加了更多的代碼。情況是2個單選按鈕中的1個。通常我只是將radiobutton1.Checked的值作爲參數傳遞。使用枚舉意味着我必須遍歷groupbox的控件,找到選中的單選按鈕,將它映射爲枚舉值,然後用switch語句處理函數端的枚舉。 – 2011-03-19 18:24:29
難道你不能只說'radiobutton1.Checked? ColorEnum.Red:ColorEnum.Blue'?另一方面,'if(color == ColorEnum.Red)'? – Aaron 2011-03-19 21:02:03