2011-03-19 89 views
1

你是什麼命名一個布爾變量,但可以有N個有意義的值?作爲布爾值傳遞的2值變量的變量名?

示例:x的值可以是「紅色」或「藍色」。

調用bRed或isRed是有意義的,如果他的值是真的,但沒有傳達關於「false」情況的任何信息。

YOu 可能實現它作爲一個整數,或者如果你挑剔,作爲一個枚舉。但是,這意味着代碼申報枚舉更多線等

我想「redOrBlue」的,但在邏輯上來講,值始終爲true :)

你覺得「redNotBlue」的是什麼?任何更好的想法?

+0

我嘗試使用枚舉,但它增加了更多的代碼。情況是2個單選按鈕中的1個。通常我只是將radiobutton1.Checked的值作爲參數傳遞。使用枚舉意味着我必須遍歷groupbox的控件,找到選中的單選按鈕,將它映射爲枚舉值,然後用switch語句處理函數端的枚舉。 – 2011-03-19 18:24:29

+0

難道你不能只說'radiobutton1.Checked? ColorEnum.Red:ColorEnum.Blue'?另一方面,'if(color == ColorEnum.Red)'? – Aaron 2011-03-19 21:02:03

回答

7

您應該在這種情況下使用枚舉。

enum EntityColors 
{ 
    blue, 
    red 
}; 
+0

打敗我吧;-) 我同意,我認爲在這個特例中,枚舉是合適的,因爲沒有意義表達'真'或'假'的意思。 – Pandincus 2011-03-19 17:40:56

+0

我已經考慮到了這一點,但它意味着更多的代碼行不是更安全或清晰的。但我會重新考慮。 – 2011-03-19 17:43:45

+1

@Larry,稍後你也想一想你想添加另一種顏色。你的變量是否被命名爲'RedNotBlueNotYellow'?或者如果IsRed是假的,這是否意味着它是藍色或黃色?使用枚舉很容易維護和閱讀。 – 2011-03-19 17:49:26

3

在這種情況下,只需使用一個enum,這是最傳神:代碼

public enum ColorValue { Red, Blue }; 
+0

已經考慮到了這一點,但它意味着更多的代碼行不再是任何類型安全或清晰的代碼。但我會重新考慮。 – 2011-03-19 17:43:08

+0

@Larry:它當然更多*可讀*雖然 - 你將確切地知道你在處理代碼中看到的是什麼,對於布爾值也不能這麼說。另外,您可以更容易地擴展數值集。 – BrokenGlass 2011-03-19 17:44:41

+0

我認爲枚舉更加清晰。如果有一個布爾變量在「最具表現力」的名稱「falseMeansATrueMeansB」中聲明,那麼您會如何繼承某些代碼? – bottlenecked 2011-03-19 17:48:56

2

更多線沒有傷害開發者呢。一個糟糕的類型和命名變量確實。去使用一個枚舉類型,只在有意義的地方使用布爾值 - 即是/否,真/假邏輯。

1

也許你想解決其他問題。

例如你有一個打印功能

void print(string text, bool red) {...} 

紅色是很重要的entrys其他都是藍色的。爲什麼不改變變量名更有意義

void print(string text, bool isImportant) {...} 

這將使API更加清晰,一旦你改變你的重要顏色,說橙色你沒有改變你的變量名稱。

0

這當然應該被定義爲一個枚舉。

你的問題是「你的名字一個變量,它是一個布爾值,但可以有2個有意義的值出來N實例中:X可以有值‘紅色’或‘藍色’

一個布爾值可以有。兩個值,「true」或「false」,在你的例子中,兩個可能的值是「紅色」或「藍色」,所以這個dos看起來不像布爾變量的好候選。是更多的代碼行,但可能更具可擴展性和更易維護性,因爲它的意圖對於將來的開發人員來說會消耗您的代碼,因此值得(小)實施成本。