2010-09-15 62 views
1

哪種書寫方式更好?使用||更好嗎?或包括?當檢查一個變量對多個值?

1)

(self.expense_gl_dist_code.dist_type == GlDistCode::PERCENTAGE || self.expense_gl_dist_code.dist_type == GlDistCode::MIXED) 

2)

["GlDistCode::PERCENTAGE","GlDistCode::MIXED"].include?(self.expense_gl_dist_code.dist_type) 
+2

這是(至少)你在這裏寫的第三個相同題目的問題,請儘量使題目標題更具代表性。 – 2010-09-15 21:59:53

+0

@Daniel Vandersluis對不起... – 2010-09-15 22:07:27

回答

2

我發現有兩個原因第二更清晰:

1)在第二個版本被檢查的元件,用於均彼此相鄰,用逗號分開。在第一個版本中總是有self.expense_gl_dist_code.dist_type ==,所以一次掃描它們並不容易。

2)在第二個版本很明顯,在所有的元素都在相同的條件下檢查,而在第一個版本,它可以說像

dist_type == GlDistCode::PERCENTAGE || dist_type == GlDistCode::MIXED || dist_type != GlDistCode::WHATEVER 

,你可能沒有注意到的時候了。

+0

可讀性是FTW – 2010-09-16 09:12:35

1

第一種方式是更清晰,因此是優選的略微模糊的第二個選項。

+1

真的嗎?鑑於變量訪問字符串很長,如果有更多條件,我會認爲這會失敗 - 是的,第一個字符在這一點上更易讀,但想象一下,必須檢查10個不同的可能性。 'Array.include?'方法最初不太清楚,但是一旦你弄清楚了測試的感覺是如何顛倒過來的,那就沒有問題了。 – 2010-09-15 22:06:21

+1

也許switch語句在這裏更合適? – ennuikiller 2010-09-15 23:23:01

1

如果你只是比較兩個元素,我會說沒有問題。

我更傾向於第二個版本,因爲您可以將所有要驗證的元素包括在一個變量中,然後命名它。例如

ALLOWED_TYPES = [GldDistCode::PERCENTAGE, GlDistCode::MIXED] 

然後

if ALLOWED_TYPES.include?(dist_type) 

更爲清晰可辨IMHO。

順便說一句,你正在使用字符串("GldDistCode::PERCENTAGE"),而不是你想要的實際值。

相關問題