2009-04-17 60 views
1

我喜歡評估單個表達式作爲一個值和一個布爾值的語言。例如,A = 1的計算結果爲真,而且1的計算結果爲真。如果這種做法對我的智庫中的開發人員來說非常普遍,假設沒有副作用,重構這些表達式是否錯誤?C風格的邏輯和重構

我在工作中討論代碼氣味時有一個長期的討論,但是這個邏輯複雜度是爲什麼我喜歡C這麼好。例如,對於我來說,切換到Java是很困難的,因爲它不允許這種效果(false!= 0)。

有什麼想法?

回答

4

沒有什麼真正的理由要大量地將非零值重用爲true,將零/零作爲false。然而!通常這些可能會妨礙可讀性。通常在使用指針時,我將使用if (somePtr != NULL)而不是僅僅使用if (somePtr),因爲我覺得它更好地描述了......不解除引用空指針的意圖。

如果邏輯過於複雜,這是一個可讀性的問題,但如果你不認爲它很難閱讀?爲什麼需要重構?

1

這是完全主觀的,但我認爲這使得Perl(它允許你用許多不同的方式表達某種東西,以不同程度的清晰度)和Java(更多 - 或者不是一種束縛與紀律的語言)。有些人喜歡(或需要)結構,在這種情況下,Java更適合他們。其他人喜歡更自由的語言允許的創造力。

如果你有一個經驗豐富的程序員團隊,那麼創造性語言將允許他們完成更多的工作。如果你有喜歡「更緊密」語言的同事,那麼也許這也說明了一些事情,或者不是。但那只是我的個人意見。 :-P

1

Java是嚴格打字,我碰巧認爲有很多優點;如果防止了一件事的交叉錯誤。我認爲C的靈活性和控制力有其自身的地位,但Java確實發揮了作用,確保大型團隊不會被糟糕的程序員拖得太遠。 C和Java在語法上類似但不相同; Java被認爲是有原因的,我都是這個原因。

儘管我的看法;再加上你可以用一些聰明的重載或新功能打破Java的嚴格打字。

1

我認爲這確實只是成語熟悉程度的問題。例如,linux內核有很多成語。

例如,你永遠不會做

static int x = 0;

取而代之,您需要:

static int x;

(編譯器將使其爲零內核傢伙爭論,不是我。)

你不這樣做:

如果(X!= NULL)

你這樣做:

如果(X)

你不這樣做:

如果(東西==什麼) 返回0; else return 1;

你這樣做:

return(something!= whatever);

而且,整數偶爾出現這種混合與布爾可以出來真的很方便,像這樣:build_assert.h

它的肉是:

 
#define EXPR_BUILD_ASSERT(cond) \ 
    (sizeof(char [1 - 2*!(cond)]) - 1) 

他們使用goto的寬鬆的錯誤處理路徑,這有點逆勢。

當涉及到可讀性和可維護性時,一行或兩行事情可能是一次洗牌。這是微不足道的東西。可維護性和可讀性部門中的真正肉食(從我的經驗)是更大規模的事情。對我來說,很多面向對象的東西往往會使代碼更易於寫入,但難以閱讀,而且難以進行DEBUG。對我而言,這是一個淨虧損。所以,我不是oop的忠實粉絲。哎呀...我轉移話題。