2009-11-18 72 views
1

我最近在Code Complete中讀到,處理涉及數字的表達式的推薦方式是將它們按照數字順序排列。「數字線」的比較風格

該書有2個例子:

if ((MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS)) 

if ((i < MIN_ELEMENTS) || (MAX_ELEMENTS < i)) 

隨着表示i是最小和最大的元素,和第二個例子是,我落在元件之間的範圍外之間的第一個例子。

我一直在試圖通過它,我不確定它是否只是我的想法,但我認爲它並沒有讓代碼變得更清晰。

例子:

if (m_Health > BOSS_HALF_HEALTH) // The way it was 

if (BOSS_HALF_HEALTH <= m_Health) // The "number line" method 

難道只是我,還是數線方法似乎不那麼清楚了嗎?你對這種做法有什麼想法?

他提到把常量放在比較的左側與數字行方法相矛盾也很奇怪,但在這裏似乎數字線方法會導致將常量放在左側。

回答

1

我認爲最初的動機來自同一個邏輯表達式中的多個比較。兩個引用的例子都是比較一個範圍的較低的上限。這種排序方法在這些情況下可能有價值。

但是,如果您正在測試單個條件(例如m_Health > BOSS_HALF_HEALTH),我認爲它不一定適用。在這種情況下,你所做的比較是某事(變量)是否大於其他事物。這是完全合乎邏輯的,不需要以任何特定的方式進行排序。

如果總是訂購的比較在「數軸」的方式,你甚至從來沒有需要>>=比較操作。它們存在的理由很充分。

+0

是的,即使有多部分條件,我認爲首先處理「條件元素」而不是常量,因爲這就是人們的想法。 – Anonymous 2009-11-18 01:54:26

+0

沒錯,我不會在任何情況下使用常量的方式,因爲如果我這樣做,編譯器會警告我(當然,它並不總是這樣,但今天是這樣)。我發現使用比較左側的變量讀得更加順暢。 – 2009-11-18 01:56:40

+0

而且,對於不允許在表達式中賦值的理性語言,將常數置於左邊的原始原因甚至不適用。 – 2009-11-18 01:57:27

0

我認爲這不是一種天生優越的方法。優勢在於在整個代碼中以相同的方式使表達式,使您在習慣它時更快地閱讀代碼。

1

我認爲它應該按照您期望閱讀的方式書寫。

因此,我會做:

if (i > MIN_ELEMENTS && 
    i <= MAX_ELEMENTS) 

代替:

if ((MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS)) 

因爲我READ C一樣英語,像

如果i大於最大

小於分鐘,更

而不是

如果min小於is且小於max

因爲我關心我,而不是最小。

+0

我知道,我們在這裏討論可讀性。 – Anonymous 2009-11-18 01:43:45

+0

我認爲這個問題更多的是比比較任務。 – xpda 2009-11-18 01:45:17

+0

我很抱歉第一次沒有正確閱讀問題。 – 2009-11-18 01:55:06

0

史蒂夫麥康奈爾的工作非常出色,但有些事情我不同意他的看法。這可能是你的其中一件事。

如果您覺得這會讓您的代碼變得不那麼清晰,那麼不要僅僅因爲史蒂夫麥康奈爾認爲這是該走的路。

+0

完全同意你在這裏。我只是想確保它不僅僅是我,而且對其他人更清楚。 – Anonymous 2009-11-18 01:52:00

0

我想初衷就是養成一個習慣。

語言只是一個熟悉安排的話。一旦它成爲一種習慣,你會習慣它。

如果你可以訓練你的大腦閱讀:

if (CONST == i) //[1] 

以同樣的方式爲:

if (i == CONST) //[2] 

你將永遠不會墮入到的錯誤:

if (i = CONST)  //[3] 

然而,應該指出的是,大多數現代編譯器今天給構造[3]提出警告

總之,如果您正在修復所有編譯器警告,則可以使用任一種編碼風格。