2016-06-21 57 views
3

語義問題在這裏。我喜歡使用三元表達式;例如(這是一個愚蠢的例子,只是爲了說明我的問題):如果超過80個字符,我不應該使用三元表達式嗎?

some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

...但行通常會變得很長。我是否應該用此代替:

if some_int >= 5 
     @description = "This is a pretty long value" 
    else 
     @description = "This value is a little shorter" 
    end 

只是爲了保持個別行較短?是否要求更短==更具可讀性?謝謝!

+0

爲什麼要保留80個字符以下的行? – spickermann

+0

@spickermann由於80個字符對於最小編輯器窗口寬度來說是一個安全的假設,所以走得比這更長,它會在右邊緣上換行或消失,從而導致難以閱讀。就我個人而言,我假設我們有寬屏幕,但您需要最低限度。 – Schwern

回答

6
some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

這是一個不正確的三元使用。三元的唯一用途是當你要使用返回值時。應當書面像這樣(格式化問題不談):

@description = some_int >= 5 ? "This is a pretty long value" : "This value is a little shorter" 

如果它推超過80個字符的行應我不使用三元的表達?

行長度是錯誤的度量。這就像詢問子程序是否不應超過25行(或其他)。這並不能解決問題的根源,並可能導致一些尷尬的選擇。真正的問題是複雜性。

從複雜性POV你的三元很好。這是一個簡單的條件,簡單的語句,它使用返回值。問題是陳述太長,他們會包裝。你可以重新格式化它們,如@U-D13 suggests

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

你也可以把字符串放到他們自己的變量中,爲代碼添加進一步的說明。

@long_description = "This is a pretty long value" 
@short_description = "This value is a little shorter (except it's not)" 

@description = some_int >= 5 ? @long_description : @short_description 

這兩種工具都是有效的,可以合併。這是情景。

嘿,看看,現在文本是一個可配置的對象變量。

2

打破錶達成幾行:

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

這樣你就可以保持代碼的可讀性,仍然有三元。

2

關於Ruby有趣的是,你可以使用一個if其中三元是太混亂或尷尬:

@description = 
    if some_int >= 5 
    "This is a pretty long value" 
    else 
    "This value is a little shorter" 
    end 

這是相當容易一目瞭然比三元等同於閱讀。

ifcase都以這種方式工作,返回被觸發的值。

的普遍做法三元效果最好,當你處理得非常短值:

method_call(value > 5 ? :high : :low) 

除此之外,它變得相當困難的遵循這可能會導致意想不到的錯誤。

相關問題