为了账号安全,请及时绑定邮箱和手机立即绑定

这个问题是关于代码规范或者说代码习惯

这个问题是关于代码规范或者说代码习惯

繁星点点滴滴 2019-03-29 22:08:12
楼主是一名javascriptcoder,最近遇到一个问题,是关乎代码的规范和风格的,需要从业在代码领悟多年的大侠指点一二,望打通我的几根血脉,茅舍顿开。说明:其实这个问题不好表达,也不好描述。我思考了几天整理了一些问题,大致是:思维逻辑,代码规范,规范标准1.思维逻辑比如1+2+3....100咱们写一个1加到100的代码:functionsum1(n){varn=0;for(vari=1;i
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

tl;dr
算法
抽象
同2
第二种看着简洁,但未必永远都最好;在本例中当然是好的,大部分时候也应该是除了可读性之外都更优于第一种的,然而即使是第一种,好程序员也不应该写成那个样子,还有改善空间。说到可读性方面也要看受众:对于数学不好的的人,比如我,看第一种更容易明白。但对于数学基础扎实的人,第二种应该也没什么障碍吧。因此,若你追求第二种写法,就去提高用数学解决/表达问题的能力。这方面我很差,就不多扯了。
抽取更小粒度的方法是重构里最基础最常用的技巧,应否抽取是要看上下文的。基本上只要有可重用的机会,抽取出来就是OK的。你举的例子,我明白你的意思,但由于缺少上下文,所以无法说好与坏。现实中的选择,也是要取决于实际的代码环境,没有必然的规则。
第2条实际上是从一个方面体现了你的抽象思维能力,第3条也是类似的——从代码组织的层面。我觉得这方面的话题真是见仁见智,而且很多时候并不是自己决定就OK了,还得看身边的人。
说白了,你写的代码如果只是你自己看,你写成什么样都无所谓,只要它能用;如果糟糕的结构和组织性带来了性能和维护上的问题,你自然会慢慢改善它——但是好代码都不是一次写成的。另一方面,如果你不是只给自己看,你要考虑和团队之间的协作等问题,那么代码风格或规范之类的东西应该是来自整个团队的共识。有时候你不得不妥协退化,或者努力学习进步,一切都是为了让大家能够说“同一个宇宙的语言”,否则你会很痛苦,用不了多久就会心灰意冷。
题主应该是有受Ruby语言影响的人,上个月RailsConf开场时DHH作的KeynotePresentation不知道你看了没有?如果没有,去看看吧,你要的答案里面就有:WritingSoftware-RailsConf2014byDHH
                            
查看完整回答
反对 回复 2019-03-29
?
慕森王

TA贡献1777条经验 获得超3个赞

关于第一点,数学能力在编程上的体现应该不是这个样子的。就好比这个李白喝酒的问题,固然可以用数学组合数之类的来搞定,但做为程序员更应该掌握的是动态规划,因为组合数之类的数学技巧如果改改参数弄点小数点乃至无理数出来很容易就崩溃了。
如果说1加到100的话,那么程序员应该掌握的是map-reduce,而不是(1+n)*n/2,因为只有map-reduce才能同样适用于1000W条复杂记录的统计,(1+n)*n/2不行
第二点我觉得如果一个函数只会被用在一个地方,又给他起了个名字,那最好是有明确含义的,而且确实会需要改变他的行为的。console.log单独封一下我觉得很好,没啥问题。因为IE或者正式环境的情况下确实可能会要改这个行为
但这只是最好,并不强制,只要你封装函数没有多到影响代码理解的程度,我觉得都OK
第三点我觉得不能算纯粹的个人能力,应该是团队的能力。团队内部应该花时间讨论一套编码规范和风格,封装的惯例,粒度的选择等指导性原则,然后成员共同遵守并维护之。
最后我要顶一下被@oyanglulu踩的TDD。TDD对于Javascript来说相当重要,因为缺乏编译和类型安全机制,Javascript的代码重构尤其是公共代码的重构经常伴随著很大的风险,TDD是控制这种风险从而降低重构成本,提升代码质量的有力工具。
另外速读了一下那篇描述TPP的文章,通篇在描述怎么写正确地TDD啊……
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信