设为首页 收藏本站
查看: 770|回复: 0

[经验分享] 程序媛想事儿(Alexia)

[复制链接]

尚未签到

发表于 2018-1-15 21:52:03 | 显示全部楼层 |阅读模式
  每一行代码都有一块被隐藏了的文档信息。
  下面的代码片段不管是谁写的,其第4行因为某些原因要访问一个DOM结点的clientLeft属性,但却对结果不作任何处理。这十分的莫名其妙,你能告诉我他们为什么要这样做吗?以后改变或移除这个调用安全吗?
// ...if (duration > 0) this.bind(endEvent, wrappedCallback) this.get(0).clientLeft this.css(cssValues)  即使曾有人像我一样给你贴过该段代码,你可能还是不知道谁写的这行代码,他们的用意是什么,有必要继续保留这行吗?无论如何,大部分在你致力于一个项目时,你一般会通过版本控制系统访问它的历史。
项目的历史是其最有价值的记录
  当我们观察下面这行命令输出的提交信息时,一切谜底都揭开了:
$ git show $(git blame example.js -L 4,4 | awk '{print $1}')  Fix animate() for elements just added to DOM
  Activating CSS transitions for an element just added to the DOM won’t work in either Webkit or Mozilla. To work around this, we used to defer setting CSS properties with setTimeout (see 272513b).
  This solved the problem for Webkit, but not for latest versions of Firefox. Mozilla seems to need at least 15ms timeout, and even this value varies.
  A better solution for both engines is to trigger “layout”. This is done here by reading clientLeft from an element. There are other properties and methods that trigger layout; see gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit
  正如结果所示,这一行—更确切地说,是引进这一行所做的改动—大量记载了有关于为什么它是必要的,为什么先前的方法(指的是通过提交SHA)不奏效,哪些浏览器受到影响以及进一步阅读的链接这些信息。
  上面的结果也显示,这行莫名其妙的代码的作者就是我,实际上我有方法将这行代码本身写的更好:通过在函数中用意图明显的名字如triggerLayout()封装magic属性的访问,或者至少通过添加触发动画这样一个简短的解释作为代码注释。不管什么原因,我那天就是没能让这段特殊的代码赋有表达力。这样的代码发生了,就不总是完美的。
  即使这段代码更具表达力,或者它已经包含了数行代码注释,项目的历史都能提供更加丰富的信息:
  1. 谁添加的这行代码;
  2. 他们什么时候添加的这行代码;
  3. 哪部分是accompanying test(如果有的话);
  4. 完整的提交信息可以是整部小说(但其中的代码注释应该保持简洁)。
  代码质量仍然十分重要。但是在琢磨如何进一步提高你的编码水平时,你应该考虑完成更好的提交信息。你不仅仅应该请求你自己,还应该请求整个团队甚至所有的贡献者做到这一点。一个软件的故事与其最新的检出一样重要
对项目历史有效的深层次探索
git blame
  我已经在上面的命令中证明了如何使用git blame。当你不能够访问本地git库时,你也可以打开GitHub上任何文件的“Blame”视图。
  一个非常有效的探索文件历史的方法是使用Vim和Fugitive:
  1. 在缓冲区里使用:Gblame打开blame视图;
  2. 如果你需要进一步探索,在blame面板那行按下Shift-P在那次提交的parent上重新blame;
  3. 按下o打开一个拆分面板显示出blame面板当前选中的提交信息。
  4. 在提交分区使用:Gbrowse打开GitHub web接口的commit;
  5. 按下gq关闭blame面板返回到主缓冲区。



  • 避免不相关改动间的推导:坚持基于行的编码风格,允许你添加,编辑或删除列表中的值而不用改动相邻行。一些例子:var one = "foo"    , two = "bar"    , three = "baz"   // Comma-first style allows us to add or remove a                      // new variable without touching other lines   # Ruby:  result = make_http_request(    :method => 'POST',    :url => api_url,    :body => '...',   // Ruby allows us to leave a trailing comma, making it  )                   // possible to add/remove params while not touching others  你为什么要使用这样的编码风格?好吧,总得想想将要git blame这个的人们。在JavaScript的例子里,如果你要添加一个值“baz”然后提交,当有人blame添加“bar”的行时你不想你的名字呈现把,因为这两个变量可能不相关。
奖励脚本
  既然你已经读到这里,我将奖励你一个额外的脚本。我称之为git-overwritten,它能够显示出指定分支处所改动或删除的行其原始作者的blame信息:
$ git overwritten feature origin/master   28 2014-02-04 1fb2633  Mislav Marohni?: Add Makefile for building and testing   1 2014-01-13 b2d896a  Jingwen Owen Ou: Add -t to mktemp in script/make  17 2014-01-07 385ccee  Jingwen Owen Ou: Add script/make for homebrew build  当打开每个GitHub Flow的pullrequests时,这是非常有用的;你要是想要你的pull request被同伴审查,但是你可能不太确定该ping谁,使用git-overwritten你可以获得你刚刚改动代码行的原始作者名字,所以你就会知道当打开一个pull request时@-mention谁了。
  声明:本文编译自Mislav Marohnić,已投稿给伯乐在线

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435491-1-1.html 上篇帖子: git 入门操作 下篇帖子: Git diff 常见用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表