在你心目中,需要具备哪些条件的代码才是好代码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
niuer
V2EX    程序员

在你心目中,需要具备哪些条件的代码才是好代码?

  •  1
     
  •   niuer 2015-03-06 16:21:50 +08:00 3886 次点击
    这是一个创建于 3880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    你如何评估两个模块代码的优劣?请列出你认为重要且可测量的参数,并尝试构造一个函数来描述你对代码优劣评估的经验公式。根据这个公式,请举例说明哪些形态的代码是代码臭味的典型(请结合自身过去经验中的例子)。

    17 条回复    2015-03-07 02:54:41 +08:00
    akira
        1
    akira  
       2015-03-06 16:40:22 +08:00
    能实现功能需求 并且能一眼看懂的代码就是好代码
    alexapollo
        2
    alexapollo  
       2015-03-06 16:44:05 +08:00
    臭代码:看上去第一眼就有个感觉:这段代码是不是做过混淆?
    NewYear
        3
    NewYear  
       2015-03-06 17:23:46 +08:00
    注释:欢迎niuer光临!niuer是最帅的
    mengzhuo
        4
    mengzhuo  
       2015-03-06 17:56:53 +08:00
    简单
    易读
    结构清晰
    命名准确
    参见:代码大全()
    jybox
        5
    jybox  
       2015-03-06 18:02:03 +08:00   1
    按顺序:

    功能性:如果不能实现功能要这代码何用?
    正确性:是否正确地处理了边界数据,是否考虑到了异常情况
    可维护性:是否给所有标识符起了一个恰当的名字,是否有过长或意义不明的函数,注释是否是必要的且反应了代码的最新情况
    可拓展性:在多大程度上考虑了需求在未来可能做的变更
    可测试性:是否能够简单地进行手工测试和自动测试,是否和其他模块有强依赖关系导致很难单独测试
    Septembers
        6
    Septembers  
       2015-03-06 18:02:16 +08:00
    架构层次清晰
    分类清晰
    语意明确
    Tink
        7
    Tink  
    PRO
       2015-03-06 18:11:38 +08:00 via iPhone
    功能完整,简单易懂。
    msg7086
        8
    msg7086  
       2015-03-06 18:39:34 +08:00
    能 赚 钱
    spacewander
        9
    spacewander  
       2015-03-06 18:51:52 +08:00
    通过函数名和变量名可以猜它们的用途,而且在大多数情况下都能猜对。
    joyeblue
        10
    joyeblue  
       2015-03-06 20:00:17 +08:00
    臭代码:
    1. 一段功能相似或者相同的代码到处拷贝
    2. 代码中充斥着魔数
    3. 无日志或者日志未充分打印相关信息(仅针对后台)
    4. 变量函数命名随意
    5. 代码格式差(参考google c++编程规范)
    6. 代码逻辑混乱
    7. 长函数 (一个函数可达1k行)
    8. 大文件 (一个文件可达2w行)

    好代码:
    1. 代码即注释
    2. 逻辑简单
    3. 层次分明
    4. 可维护性高
    momo5269
        11
    momo5269  
       2015-03-06 21:13:52 +08:00
    看得懂 结构清晰 扩展性强
    zhishihei
        12
    zhishihei  
       2015-03-06 23:15:55 +08:00
    赚到钱的,或赚到用户的。毫无疑问。
    mcfog
        13
    mcfog  
       2015-03-07 00:28:58 +08:00
    谁都看得懂,而且很容易迅速定位到一块逻辑
    谁来加功能改功能得到的结果都差不多
    和需求文档神似
    lint
    SmiteChow
        14
    SmiteChow  
       2015-03-07 00:50:11 +08:00
    就三条
    1.变量名不能是汉语拼音
    2.对齐
    3.注释
    monkeylyf
        15
    monkeylyf  
       2015-03-07 02:16:50 +08:00
    readability/extendibility/clean APIs if any
    KentY
        16
    KentY  
       2015-03-07 02:46:01 +08:00 via Android
    思路巧妙的实现让我觉得赏心悦目
    randyzhao
        17
    randyzhao  
       2015-03-07 02:54:41 +08:00
    我比较讨厌的
    1. 变量名: 同段代码里存在两个相似的变量名 > 错误意义的英文 > 拼音 > 英文单词拼错 > 有易懂单词, 却用不易懂单词
    2. 上下文都是驼峰命名, 中间突然冒出来一个什么鬼啦??!!
    3. 缩进问题: 规定说用 3 个 space, IDE 编辑器什么的, 能不能抽2分钟设置一下嘛...
    4. "无休止" 的三目套三目套三目... ( 运算符两边还不空格, 堆成一团的, 罪加一等. )
    5. 千行以上的函数.
    6. 简单粗暴的避免大函数, 硬拆函数. 好吧, 每个函数行数是少了, 效率就不管了?
    7. 换行过度: 举个例子, 写 sql, 一行平均 6 ~ 10 个字符, 硬生生写40多行. ( 我屏幕不大, 上上下下这样折腾我, 真的好么... )
    8. 行尾有空格: code review 的时候, reviewboard 会标红, 我看的难受.
    9. 知道建表, 不知道加 index.
    10. 可以一个函数搞定的, 偏偏给你复制成两个.

    嗯, 凑齐10个, 心里好舒服.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     933 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:45 PVG 02:45 LAX 11:45 JFK 14:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86