阅读更多
下面的两种代码编写风格,你更倾向于哪一种呢?

第1种:
public static void happyBirthday(int age)
{  
        if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0))))        
    {
        System.out.println("Super special party, this year!");
    }
    else
    {
        System.out.println("One year older. Again.");
    }
}

第2种:
public static void happyBirthday(int age)
{
    boolean sweet_sixteen = (age == 16);
    boolean majority = (age == 21);
    boolean adult = (age > 21);
    boolean decade = (age % 10) == 0;
    boolean quarter = (age % 25) == 0;

    if (sweet_sixteen || majority || (adult && (decade || quarter)))
    {
        System.out.println("Super special party, this year!");
    }
    else
    {
        System.out.println("One year older. Again.");
    }
}

尽管这两段代码实现方式区别不大,但是单从代码行数方面考虑,第1种有效代码行数仅为第2种的一半。你更倾向于哪种风格呢?

这是问答网站Stackexchange(Stackoverflow扩展版)中的一个问题。提问者Ankit是一名Java开发者,他经常被代码审查者要求减少代码行数,审查者认为他应该专注于使用更少的代码来完成同样的工作,而Ankit则希望能够使代码更加清晰,即使这样会增加代码的行数,他认为这不是简单的去除冗余代码的问题,而是有关个人编程风格。

那么LOC(代码行)小的话,对于代码执行有什么影响?如果大的话,又有什么影响呢?下面来看看其他开发者怎么说的。

mattnz认为统计SLOC完全没有必要,与之相比,更应该去统计代码的重要性、可读性和复杂性:

引用
这涉及到软件项目度量的问题,不管目的如何,可以对项目中重要的代码进行衡量。

衡量SLOC(Source lines of code)是否真的重要?当然不,除了混淆编程竞赛外,对于商业组织来说,SLOC从来都不重要,未来也不会重要。

问自己一个简单的问题,减少SLOC是否可以使你的代码更好?SLOC往往被天真地用来衡量项目复杂度,这种情况下,SLOC少的代码也许是好的代码。你应该极力避免去统计那些容易统计的东西(比如SLOC),尝试去统计重要性、可读性、复杂性等难以统计的东西。


Erik Dietrich表示认同代码审查者的建议:

引用
你在代码中所写的每一个语句都是一个技术责任,也是一个潜在的故障点。如果解决同一个问题,你用了10句话,而你的同事只用5句话,那么从出错可能性上考虑,你同事的代码可能会被认为更好,因为你的代码可能更容易出错。

当然我指的是语句,不是代码行。比如下面的代码:
void someMethod() {   
someobject.doSomething(someSingleton.getInstance().with().a().lot().of().law().of().demeter().violations()).and().if().that().werent().enough().theres().more();
}

只有一行,但是其中可能会有大量的地方出问题。因此我想说的是,专注于使用最少量的语句来实现(注意是“语句”),而对于代码行,你需要写多少就写多少吧。我认为这也是你的代码审查者所希望的。

我个人认为,还需要取得一个平衡点。正如我说,你所写的每一条语句都是一处技术责任,但如果你使用描述性的名称来命名一个局部变量,使你的代码更加清晰、可读,这样也是好的。我认为你比较容易卷入人们对较小审美差异的争论中,但整体上,我比较认同你的代码审查者的观点,因为这样有利于最大限度地减少可能出错的东西。


Xion更喜欢简洁的解决方案:

引用
代码审查者的建议从字面上来说,不会对程序有什么提高的地方。我比较认同的是——让你的代码做更少的事情。

换句话说,就是要求代码简单。代码是一种责任,而不是资产,因此应该减少它的量。你可以通过一个更直接、更朴实的方式来解决问题。

就像Ken Thompson曾经说的——“我最有效率的一天是扔掉了1000行代码。”


jhewlett比较认同提问者所说的“使代码更加清晰,即使这样会增加代码的行数”:

引用
我见过很多简洁的程序,代码行数相当少,但是从这些代码中不能马上看出它们的意思。

可读性为王,因为其他开发者还要维护你的代码。

我认为最好是——将更短的方法作为目标,不要单单追求减少代码行,而是让代码“短”到只做一件单一的事情。


Joshua Volearix认为简洁、容易阅读的代码是开发中的最重要的因素:

引用
下面的代码我完全无法接受:
void someMethod() {   
someobject.doSomething(someSingleton.getInstance().with().a().lot().of().law().of().demeter().violations()).and().if().that().werent().enough().theres().more();
}

但是我发现如果将下面的代码:
if (boolean == true){
value.prop = option1;
}
else{
value.prop = option2;
}

改变如下:
value.prop =  boolean ? option1 : option2;

这样即减少了代码行数,又不牺牲可读性。

至于修改后如何影响代码执行?我反正没注意到性能的增加或减少。比起使用多少行代码来实现,更重要的是使用了多少过程来实现。我之前看到过一些很简洁的代码,但是它们的执行效率比不上那些拥有更好的设计流程但行数多的代码。


Vitim.us认为更少的代码更易读,但Joe提出了异议:

引用
我不认为更少的代码==代码更易读。然而现实中,大段的代码往往没有经过合理的设计。因此,我认为要求减少代码行,可以迫使程序员想出更好的设计。


更详细的讨论可以参阅原帖:How important is it to reduce the number of lines in code?

对于这个问题,你是怎么看待的呢?
7
2
评论 共 29 条 请登录后发表评论
9 楼 云上太阳 2013-04-13 10:46
这就需要找一个平衡点,平衡点的问题在programmer世界简直太常见了,然而把握这个平衡点的能力也是评价一个coder是否是一个优秀的programmer的参照点之一
8 楼 xieyongwei 2013-04-13 09:41
我认为编程必须需要考虑易读易维护、执行效率,其中包括 “写更少的代码” !
当然这个 “写更少的代码” 看你是怎么实现的,最常用的方式封装和重构,做得好就更易懂和易维护。
7 楼 lg_asus 2013-04-13 08:18
I prefer 2nd style, reader or maintainer can't understand the meaning of conditional expresstion at first sight in the 1st style, so you need comments, the 2nd style is almost self-explanation. From the view of maintenance, if you are asked to add or modify the `conditional` expression in 1st style, you must be more careful.
6 楼 PetriNet 2013-04-13 00:42
没做过global deployment吧,宝强哥
5 楼 freezingsky 2013-04-12 20:37
代码清晰了,自然可以考虑更少的代码量!
4 楼 suneyejava 2013-04-12 20:20
最重要的是要逻辑清晰,一个封装要保持功能尽量单一,接口清晰。
3 楼 laogao3232 2013-04-12 19:42
我觉得第一段代码的可读性足够了。
第二段是把业务逻辑带出来了,这个没必要吧。
当然就是只对这个简单的代码而言。
如果是复杂的代码,还是要通过命名等,让每一段代码的意义都清晰明了。
2 楼 clxy 2013-04-12 19:22
必须是可读性优先啊。

之前有篇文章说得好,
引用
程序代码是写给看的!

(编译给机器用的。)

不过这里讨论的“行数”,我认为毫无意义。
行数多少即不等于代码质量好坏,也不等于代码可读性好坏。
1 楼 ccheng123456 2013-04-12 18:43
[b][/b].  板凳。  代码还是易读的。不然维护的人头大了。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 代码要写注释吗?写你就输了

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 HelloWorld杰少 即可关注。 如何看待程序员不写注释?...好的代码就是最好的注释,我的代码可读性很好,没必要写注释 只要有完善的文档,代码.

  • 你真正了解低代码么?(国内低代码平台状况分析)

    国内低代码发展趋势解读。

  • 程序员的代码注释需要写么?

    “别给糟糕的代码加注释——重新写吧。”—Brian W. Kernighan与P. J. Plaugher 什么也比不上放置良好的注释来得有用。什么也不会比乱七八糟的注释更有本事搞乱一个模块。什么也不会比陈旧、提供错误信息的注释更有...

  • java必背代码_java必背代码入门有哪些?如何写出优质代码?

    学习java还是要不断的积累,有必要的话,还是需要大家记忆的,这样更加有利于大家学习java,那么今天我们就给大家分享一些java入门必背代码,希望能够对大家有用!1、把 Java util.Date 转成 sql.Datejava.util....

  • 8.3-写代码必须要写注释吗?(为什么现实中不写注释?)

    一、写代码要写注释 “写代码要写注释”自从学编程,这就话就伴随着你。可见注释的重要性。 注释的作用: 说明函数的功能 说明函数参数的意思 说明函数这样设计的原理(计算公式) 说明函数的使用场景 作者和日期 ...

  • 去银行写代码是种什么体验?

    本文转载自程序员技术 一线互联网岗位和银行/国企还是有点区别的,这篇文章,讲详细讲一讲银行或者金融科技...但我想应该还是有不少同学,是打算找一个轻松点的工作的。 而银行,就是轻松的首选(关键是妹子也多~)

  • 学生为什么要在CSDN写博客?

    学生为什么要在CSDN写博客?引言写博客的好处构建知识体系提升写作能力扩展人脉为简历加分帮助他人为什么是CSDN如何写博客记录学习总结错误总结与展望 引言 就目前来说,学生应该是...这还是在很多人说写博客有非常非常

  • 如何写出高质量的C代码?快来学习这些coding技巧

    优秀的程序员往往将bug扼杀在萌芽中,很明显这是“另一种”程序猿,那么我们应该怎样写出一手高质量的优秀代码呢?

  • 如何让你的代码变得更优雅?这些代码规范和技巧必须知道(进阶必备,建议收藏)

    ‍♂️:先把简历写好,机构老师特别交代:一出去就要说三年工作经验???? ????‍♂️:面试题要背,工资不能要低了~ ????‍♂️:包装一下 ????‍♂️:… 面试中 ????‍⚖️:问题回答的不错,可以看看你最近做的...

  • 代码注释的艺术,优秀代码真的不需要注释吗?

    似乎和我们很类似,我们程序员届也有这 2 件相辅相成的事:最讨厌别人不写注释,更讨厌让自己写注释。一段糟糕的代码,往往大家最低的预期是把注释写清楚,最合理的做法通常应该对代码做优化。如果我们将代码真正...

  • 对计算机专业来说学历真的重要吗?

    我本科学校是渣渣二本,研究生...先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...

  • 淘宝程序员拿几十万工资,写出来的代码到底怎么样?

    来源:淘系技术我们编写的代码,除了用于机器执行产生我们预期的效果以外,更多的时候是给人读的,这个读代码的可能是后来的维护人员,更多时候是一段时间后的作者本人。如何能够写出优雅整洁且不让人【...

  • 写代码不行,考研没考上,怎么办?

    写代码的时候,有位粉丝私聊小孟,遇到了一些问题。 调试完代码,然后聊了聊! 当然,小孟当时也是从迷茫中过来的,幸运的是我在各个阶段都遇到了一些"贵人"。如果有问题的,欢迎评论区留言。 下面先看下这名粉丝的...

  • 个人项目有没有必要用TS?

    第一个原因是啊TS越来越火,很多东西都在用TS写包括BO3本身也是。很多大公司呢也对TS有要求。所以大家就很纠结啊,我对这个东西不了解呀啊能给我带来什么? 先了解一下什么是啊TS,这里其实啊我们来看一下这个官方...

  • 重点项目却总是腐化,程序员为什么会写烂代码?

    写在前面:作者李子昂,阿里巴巴集团研发效能部的第一个算法工程师,目前工作主要方向是代码管理和CI。本文探讨的是:从优化研发交付流程的角度,如何根本上提升研发效能。 先说结论 现在阿里主流的分支开发模式,...

  • 怎么看懂别人写的单片机项目代码?

    记得刚开始接触代码的时候,总觉得很神秘,也好奇到底是怎样的牛人,才能把这么多复杂的”天书”写出来去。 当时多希望自己一夜之间也拥有这种能力,能自己写代码去把自己的想法通过技术的手段制造出来。 现实哪有...

  • 程序员写代码都用什么样的笔记本?

    程序员一般喜欢用thinkpad或者Mac,因为价位等方面的因素...那个时期AMD的cpu还能和intel抗衡一下,不像现在有这么大的差异,记得第一家公司属于创业性质的公司,公司配置的电脑是神州牌子的,在上面开发软件,需要...

  • 这么糟糕的代码,真的是我以前写的吗?

    “很多程序员不知道怎么组织代码、怎么提升效率、怎么提高代码的可维护性、可重用性、可扩展性、灵活性,写出来的代码一团糟,但这样一团糟的代码居然能正常运行。” 这样的代码经历,你是否也似曾相识? 身边好多...

  • 代码重构,最佳实践,你真的会代码重构吗?

    Martin Fowler:重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。 大型重构 对象:对系统、模块、代码结构、类与类之间的关系等的重构 方法:有分层垂直...

Global site tag (gtag.js) - Google Analytics