Ruby提供了unless
和elsif
聲明。假設會有類似的elsunless
陳述似乎是自然的,但是沒有。這是否有特定的原因?爲什麼Ruby中沒有`elsunless`語句?
爲了說明,這個聲明將允許這樣的代碼。
unless broken
# do something
elsunless done
# do something else
end
我知道,這個代碼可以被改寫爲使用if
和elsif
,但在使用unless
某些情況下,更清晰。
Ruby提供了unless
和elsif
聲明。假設會有類似的elsunless
陳述似乎是自然的,但是沒有。這是否有特定的原因?爲什麼Ruby中沒有`elsunless`語句?
爲了說明,這個聲明將允許這樣的代碼。
unless broken
# do something
elsunless done
# do something else
end
我知道,這個代碼可以被改寫爲使用if
和elsif
,但在使用unless
某些情況下,更清晰。
背後if
/else
語句的邏輯通常是:
有一個例外:
if exception_a
# do exception stuff
else
# do standard stuff
end
unless exception_a
# do standard stuff
else
# do exception stuff
end
在這種情況下添加unless
是非常有用的,因爲你可以切換你的代碼。我還喜歡unless
的是,你可以單獨做你的標準東西,同時檢查異常。 (該else
塊可以被排除在外)
擁有多個例外:
這裏談到棘手的部分:
if exception_a
# do exception stuff a
elsif exception_b
# do exception stuff b
else
# do standard stuff
end
unless exception_a
# do standard stuff
elsunless exception_b
# do ???
else
# do exception stuff
end
除了是完全不可讀的,我無法找到一個合乎邏輯的意義elsunless
block:你會在那裏輸入什麼代碼?我仍然不知道這是否會是一些例外或標準代碼。
也許你可以進一步解釋你將在這個塊中使用什麼代碼。
Ruby已經提供了if
,else
,elsif
和unless
,那麼真的需要elsunless
嗎?它看起來像一個龐然大物的龐然大物。我認爲Matz沒有看到將語句添加到ruby語法的原因。 此外,一些紅寶石編碼器調查排除unless
聲明使用,從Perl遺傳的ruby編碼標準。
至於我,我會完全刪除該語言的unless
關鍵字。
看一看在styling guide
儘管我同意'elsunless'會成爲屁股疼痛,但我絕不會去除語言中的'除非'。當你掌握它時,它變得非常有用。 –
「if!」要短得多,當然我們總是可以使用DeMorgan的規則。 =) –
「如果不是」更短,而且不是符號。在閱讀代碼時,符號很容易跳過,儘管我們應該注意,但我們也想說清楚。在語義上,!意味着興奮,而不是'不'。儘管如此,它在表達方面很有價值。只是我的觀點。 – vgoff
沒有'elseunless'因爲它的意思不直觀。 –
其實,我會加關鍵字'otherwise'和'otherwisif'。它比'else'好得多。想一想:「如果真的把」嗨「放在其他地方,否則將」低「末端' – mjnissim
在我看來,'除非..else'很難讓你的頭,特別是對不熟悉代碼的人。我從來沒有遇到過使用'if..else'重寫它並沒有改進的情況。增加另一種選擇會使情況更加複雜。 –