2013-08-04 47 views
2

我喜歡儘可能簡潔地編寫我的代碼,但也許這是不可讀的?這個javascript代碼段被認爲是不好的?

var filters = {}; 
function addFilter(type, name) { 
    filters[type] && filters[type].push(name) || (filters[type] = [name]); 
} 

,甚至(在答案中指出):

var filters = {}; 
function addFilter(type, name) { 
    filters[type] ? filters[type].push(name) : (filters[type] = [name]); 
} 

-edit--

不不可讀的,但也許壞的風格?替代方案將被寫出

var filters = {}; 
function addFilter(type, name) { 
    if (!filters[type]) { 
    filters[type]= []; 
    } 
    filters[type].push(name); 
} 
+7

不可讀給誰?您?你在六個月內?你在Objective-C工作一年後?與你一起從事這個項目的其他人?有人知道Javascript嗎? –

+0

那麼它是一個opionion然後,我知道Javascript和考慮這個不可讀但很多其他好的JavaScript程序員認爲這是非常具有可讀性,比如引導的作者[名言](https://github.com/twbs/bootstrap/issues/3057 ):P – Esailija

+0

對不起,我的意思不是不可讀,而是不好的形式?我編輯了這個問題。也許到另一個JavaScript開發人員?我只是想知道人們怎麼看待第一種方式而不是更長的方法? – Nonconformist

回答

9

語言有很好的原因成語和模式。特別是,Javascript具有專爲此目的而設計的if/else聲明。應該編寫代碼,以便讀取,因爲將來讀取的次數比寫入次數要多得多。

我不會接受在代碼審查上述「簡潔」的代碼。

0

我想說的不必要的不​​可讀。這也取決於你在做什麼以及你在爲誰工作。如果你確定你是唯一支持這個應用程序的人,那麼也許這樣可以。

2

你至少可以使用三元:

filters[type] ? filters[type].push(name) : (filters[type] = [name]); 

或者,你可以用你的代碼的擴展版本,但多了幾分簡潔:

if (! filters[type]) filters[type] = []; 

filters[type].push(name); 

這導致兩個語句在數組第一次創建時運行,但我發現這種方式更具可讀性。

+1

@downvoter - Downvotes是壞的答案,而不是當你不同意:) –

+1

不是downvoter,但可以說是一個不好的答案(在你看來)是你不同意。 :) –

+1

@JonathanLonowski - Downvotes是*事實上*錯誤的答案。回想起來,這是一個有爭議的問題,並且很可能是題外話... –

0

可讀性強,但也具有誤導性。我從所謂addFilter功能期待是添加一些過濾器,或者如果這樣的存在我應該得到(即告訴我它複製的東西)異常或虛假或-1

0

你缺少;var filters = {}而且,在第二種形式更好,因爲新編碼器更容易理解它(或將來你自己)。 你可以使用你的第一種形式和評論它,但薩米·拉爾在Common Excuses Used To Comment Code說,如果你覺得你的代碼太複雜,沒有註釋的理解,你的代碼可能是只是壞

0

使用& &和||對於更熟悉三元組的Javascript人員可能會有些困惑。

function addFilter(type,name) { 
    filters[type] ? filters[type].push(name) : filters[type] = [name]; 
} 
相關問題