编写长单行代码是不好的做法?

时间:2011-11-06 11:49:21

标签: coding-style

我发现自己一直在编写相当长的单行代码(受shell管道影响),如下所示:

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()))

我写的时候感觉很好 我认为很长的单行代码是函数式编程风格 但是,几个小时后,我对它感到很难过 我担心会受到维护者的批评 可悲的是,我已经习惯了写这种单线 我真的想知道别人的意见 请给我一些建议。感谢

4 个答案:

答案 0 :(得分:6)

我会说,如果你牺牲了可读性,这是不好的做法。

答案 1 :(得分:1)

第一和第三个例子对我来说是可以接受的。它们足够接近应用程序域,因此我可以很容易地看到代码的意图。

第二个例子太聪明了。我甚至都不知道它的目的。你可以用五行重写它,给变量更长的名字吗?

答案 2 :(得分:1)

众所周知,源代码只能编写一次,但会被不同的人多次读取。因此,为常见情况优化源代码是明智的:阅读,尝试理解。

我的建议:按照这个原则行事。问问自己:任何人都可以更容易地理解我的任何代码吗?如果答案 100%"不,我甚至无法想出更好的方式来表达问题/解决方案。"然后遵循你的直觉,重新格式化或重新编码那部分。

答案 3 :(得分:1)

除非性能是主要考虑因素,否则代码的可读性应该被赋予高度优先级。它的可维护性非常重要。

“计算机程序结构与解释”一书的相关引用。

“程序应该写给人们阅读,并且只是偶然让机器执行。”