2011-11-06 27 views
3

我發現自己寫保持相當長的一行代碼(由殼管的影響),像這樣:寫一長串單行代碼是不好的做法?

def parseranges(ranges, n): 
    """ 
    Translate ":2,4:6,9:" to "0 1 3 4 5 8 9...n-1" 
       == === ==  === ===== ========= 
    """ 
    def torange(x, n): 
     if len(x)==1: 
      (x0,) = x 
      s = 1 if x0=='' else int(x0) 
      e = n if x0=='' else s 
     elif len(x)==2: 
      (x0, x1) = x 
      s = 1 if x0=='' else int(x0) 
      e = n if x1=='' else int(x1) 
     else: 
      raise ValueError 
     return range(s-1, e) 
    return sorted(reduce(lambda x, y:x.union(set(y)), map(lambda x:torange(x, n), map(lambda x:x.split(':'), ranges.split(','))), set())) 

我覺得OK,當我寫的。
我認爲長單線程代碼是一種功能性編程風格。
但是,幾個小時後,我感覺很糟糕。
恐怕我會受到可能維護它的人的批評。不幸的是,我已經習慣於寫這些單行內容。
我真的很想知道別人的意見。
請給我一些建議。謝謝

回答

1

第一個和第三個例子對我來說是可以接受的。它們足夠接近應用程序域,以便我可以輕鬆看到代碼的意圖。

第二個例子太聰明瞭。我甚至不知道它的目的。你可以重寫它可能是五行,賦予變量更長的名字?

+0

第二個例子翻譯':2,4:6,9:'到'0 1 3 4 5 8 9 ... n-1' – kev

4

我會說如果你犧牲可讀性是不好的做法。

1

源代碼一次寫入但多次被不同的人讀取是普遍的看法。因此,爲常見情況優化源代碼是明智的:正在閱讀,試圖理解。

我的建議:按照這個原則行事。問問自己:任何人都可以更容易地理解我的代碼片段嗎?當答案是而不是時100%「不,我甚至不能想出更好的方式來表達問題/解決方案。」然後遵循你的直覺,重新編排或重新編碼該部分。

1

除非性能是主要考慮因素,否則代碼的可讀性應該被賦予高優先級。它的可維護性非常重要。

「計算機程序結構與解釋」一書的相關引用。

「程序應該寫入供人閱讀,並且只能附帶執行機器。」

相關問題