我喜歡評估單個表達式作爲一個值和一個布爾值的語言。例如,A = 1的計算結果爲真,而且1的計算結果爲真。如果這種做法對我的智庫中的開發人員來說非常普遍,假設沒有副作用,重構這些表達式是否錯誤?C風格的邏輯和重構
我在工作中討論代碼氣味時有一個長期的討論,但是這個邏輯複雜度是爲什麼我喜歡C這麼好。例如,對於我來說,切換到Java是很困難的,因爲它不允許這種效果(false!= 0)。
有什麼想法?
我喜歡評估單個表達式作爲一個值和一個布爾值的語言。例如,A = 1的計算結果爲真,而且1的計算結果爲真。如果這種做法對我的智庫中的開發人員來說非常普遍,假設沒有副作用,重構這些表達式是否錯誤?C風格的邏輯和重構
我在工作中討論代碼氣味時有一個長期的討論,但是這個邏輯複雜度是爲什麼我喜歡C這麼好。例如,對於我來說,切換到Java是很困難的,因爲它不允許這種效果(false!= 0)。
有什麼想法?
沒有什麼真正的理由要大量地將非零值重用爲true,將零/零作爲false。然而!通常這些可能會妨礙可讀性。通常在使用指針時,我將使用if (somePtr != NULL)
而不是僅僅使用if (somePtr)
,因爲我覺得它更好地描述了......不解除引用空指針的意圖。
如果邏輯過於複雜,這是一個可讀性的問題,但如果你不認爲它很難閱讀?爲什麼需要重構?
這是完全主觀的,但我認爲這使得Perl(它允許你用許多不同的方式表達某種東西,以不同程度的清晰度)和Java(更多 - 或者不是一種束縛與紀律的語言)。有些人喜歡(或需要)結構,在這種情況下,Java更適合他們。其他人喜歡更自由的語言允許的創造力。
如果你有一個經驗豐富的程序員團隊,那麼創造性語言將允許他們完成更多的工作。如果你有喜歡「更緊密」語言的同事,那麼也許這也說明了一些事情,或者不是。但那只是我的個人意見。 :-P
Java是嚴格打字,我碰巧認爲有很多優點;如果防止了一件事的交叉錯誤。我認爲C的靈活性和控制力有其自身的地位,但Java確實發揮了作用,確保大型團隊不會被糟糕的程序員拖得太遠。 C和Java在語法上類似但不相同; Java被認爲是有原因的,我都是這個原因。
儘管我的看法;再加上你可以用一些聰明的重載或新功能打破Java的嚴格打字。
我認爲這確實只是成語熟悉程度的問題。例如,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的忠實粉絲。哎呀...我轉移話題。