2014-04-30 55 views
0

我正在製作一個涉及大量邏輯的2人棋牌遊戲。這是我第一次編寫一個涉及大量邏輯,繼承和代碼組織的程序。我發現自己遇到了很多意大利麪條代碼和功能,這些代碼和功能並沒有限制自己做一件事,就像我所知道的那樣是一種很好的做法。我試圖想出想法來限制我的意大利麪條代碼,但我不確定最好的方式去實現它。這是我遇到很多問題的例子。Javascript,與意大利麪代碼和組織的問題

if (that.selected && that.selected != target) { 
    if (that.positions[target] && that.positions[target].color == piece.color) { 
     ... 
    } else { 
    var ind = xyz...; 
    if (piece.type == "king" && ind != -1) { 
    } else { 
    ... 
    } 
    } 

我最好的想法迄今減少,這是移動的條件語句爲單獨的功能(例如,而不是我貼的第一行代碼,我可以做這樣的事情......

var selected_non_target = selectedNonTarget(that.selected, target); 
if (selected_non_target) { 
    continue above code; 
} 
function selectedNonTarget(selected, target){ 
    if (selected && selected != target) { 
    ... maybe do some stuff ... 
    return true; 
    } 
} 

但我真的不知道這將如何幫助和更多的代碼...這裏是存儲庫,我會喜歡任何建議https://github.com/natecraft1/javascript_chess/blob/master/index.html

回答

1

我覺得你自己的建議是一個好的開始,你可以減少它一點點 - 不需要第一個var

​​

這是良好的編碼做法,以減少複合條件,以一個良好的命名函數,然後把它像一個簡單的真|你的主要邏輯錯誤。隨着代碼庫的增長,這應該有助於減少認知負載 - 並且每一點都有所幫助。

當然,我們都明白&&!=都應該是說和做,但12小時編碼後的凌晨2點,你會容易出錯少用if (selectedNonTarget(that.selected, target))

我也強烈建議花一些時間分裂1000行左右的代碼可以分爲多個文件。你會發現這是值得的。

+0

因此,即使只是做一個簡單的布爾檢查,做一個函數是值得的嗎? – natecraft1

+0

我會說它只有在它是一個複合條件時才值得,你可以很好地命名它,也可能複合條件被用在多個位置。當複合條件具有三個或更多條件時,回報更好。 –