技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

随笔分类 -  代码风格&质量

上一页 1 2 3 4 5 6 下一页

!a && !b 和 !(a || b) 的故事
摘要:// awk代码,当continue执行时说明书是免费的if(!(int(use_curr) == 0 || int(use_curr) == 30000)) { continue }这段代码大概是半年前写的,半年后过来读,发现已经不理解这段代码了,虽然理解当contniue执行时意味着书是免费的,但到底是use_curr等于0或30000免费,还是不等于时免费,已经迷糊了!这里需要进行仔细推导:0 进入表达式 -> use_curr==0 为真 -> 反转为假 -> continue不执行 -> 收费的 -> 0和30000是收费的,其他为免费if(int(us 阅读全文

posted @ 2014-01-16 16:04 codestyle 阅读(1864) 评论(0) 推荐(0) 编辑

编写易于理解代码的六种方式
摘要:http://www.ibm.com/developerworks/cn/linux/l-clear-code/我学习编写、改善和维护代码的过程是很艰苦的。在过去的 12 年里,我一直在编写计算机游戏并通过曾红极一时的共享软件技术进行网络销售,并以此为生。这就是说,我常常要从空白的屏幕开始从头编码,当代码达到数万行之后才能拿去销售。这也就是说,如果我出了错,我必须要自己去解决问题。当我在凌晨三点还在竭力寻找 bug 的时候,看着这些不知所云的晦涩代码,我不禁自问:“我的天啊,这些垃圾代码究竟是哪个笨家伙写的啊?”,很不幸,问题的答案是 “我”。在学习了良好、正规的编码技巧之后,我大受其益。本文 阅读全文

posted @ 2014-01-08 16:27 codestyle 阅读(391) 评论(0) 推荐(0) 编辑

Kent Beck揭秘Facebook开发部署流程
摘要:http://www.infoq.com/cn/news/2013/10/facebook-development-deploymentFacebook是世界上最大的社交网站,有超过10亿用户每月至少要登录一次,他们每天要上传超过25亿内容,支持这样一个站点的运行,还要不断发布新的功能,Facebook的工程师是如何做到这一切的?目前就职于Facebook的极限编程创始人Kent Beck在近期发表的一篇与别人合著的论文里向大家详细介绍了Facebook的开发与部署流程。显而易见,Facebook的工程师们不会像传统软件行业那样使用瀑布模型进行开发,他们不断地开发新的功能,并迅速上线,让用户能 阅读全文

posted @ 2014-01-07 17:38 codestyle 阅读(378) 评论(0) 推荐(0) 编辑

代码行数是致命因素吗?
摘要:http://www.infoq.com/cn/news/2007/12/does-lines-of-code-killSteve Yegge最近的一个帖子触动了开发社区的神经。Steve主张将代码数量保持在一个绝对的最小值,是软件开发中最重要的事情。依他的看法,即便仅仅出于缩减代码行数的理由,你或许也该牺牲一些设计模式和避免一些重构。如果问题域太大,做不到这一点——那么你可以换到另一种编程语言。……我相信,相当坚定地相信,对于一个代码库来说,最坏的事情就是它的大小。Steve认为,代码大小有毁灭性的影响:多数人可能不认同我的观点:山一样的代码是一个人、一个团队、一家公司所能遭遇的最严重的灾害 阅读全文

posted @ 2014-01-07 17:19 codestyle 阅读(242) 评论(0) 推荐(0) 编辑

之前C#代码的重新设计
摘要:/*我用python重构了一把这个代码大家的反应似乎是过度设计了好吧,我决定不那么激进,采用更中庸一些的重构我也有些疑惑:是否如果重构后的代码比重构前要多,就算过度了呢?*/void main(){ Queue queue = new Queue(); while(Message message=queue.Get()) { process(message); }}void process(Message message){ if(isAllowSend(message, setChargeFlag) == true) { set... 阅读全文

posted @ 2014-01-03 16:28 codestyle 阅读(227) 评论(0) 推荐(0) 编辑

记 tower.im 的一次重构
摘要:原文in here:http://outofmemory.cn/wr?u=http%3A%2F%2Fblog.mycolorway.com%2F2013%2F05%2F01%2Ftower-refactor%2FTower.im上线已经快半年了,这半年来我们团队小步快跑,为 tower 增加了许多新的功能,使它渐渐完善起来,在这个过程中,tower 的代码量也逐渐增加,随着时间的流逝,系统中积淀的糟糕的代码渐渐增多,于是趁着节假日的到来,花了些时间对代码做了部分重构,在这里记录下来,和大家分享。我们知道,重构代码,目的是为了对内让代码变得更精简,提高阅读性和可维护性,而对外不改变旧有的功能,所 阅读全文

posted @ 2014-01-03 16:18 codestyle 阅读(741) 评论(1) 推荐(0) 编辑

编程规范之 if 语句的简单规则
摘要:原文:http://www.oschina.net/translate/basic-rules-for-code-readability-and-the-if-statement代码应该是可阅读就像你的自然语言一样。我将从一个有趣的条件语句开始。if ( !notOk != false ) { userObj.ask();}这样的表达式有点混乱,你永远不会使用自然语言构建这样的表达式。通过几个步骤,这个问题可以很简单解决:( !notOk != false )( !notOk == true )( !notOk)现在你应该重新想一个变量名啦:isOk = !notOk这个结果更适合阅读:if. 阅读全文

posted @ 2014-01-03 15:29 codestyle 阅读(976) 评论(0) 推荐(0) 编辑

追求代码质量: 驯服复杂的冗长代码
摘要:追求代码质量貌似是连载在IBM开发者社区的系列文章http://www.ibm.com/developerworks/cn/java/j-cq/专栏作者Andrew Glover是Stelligent Incorporated的总裁,这家公司用有效的开发人员测试策略和能够让团队在早期经常地监视代码质量的持续集成技术,帮助企业解决软件质量问题。他是Java Testing Patterns(Wiley,2004 年 9 月)一书的合著者。本文的原地址http://www.ibm.com/developerworks/cn/java/j-cq06306/index.html#N1007A我毫不惭愧 阅读全文

posted @ 2014-01-03 15:22 codestyle 阅读(289) 评论(0) 推荐(0) 编辑

通过调试的重构代码(设计是对的,但是实现过程却有诸多的问题)
摘要:#!/usr/bin/env pythonclass Processor: def __init__(self, processor): self.processor = processor def isAllowSend(self, message, setChargeFlag): passclass WhildListProcessor(Processor): def isAllowSend(self, message, setChargeFlag): print "WhildListProcessor.isAll... 阅读全文

posted @ 2014-01-02 16:32 codestyle 阅读(538) 评论(0) 推荐(0) 编辑

针对上一篇文章中的代码,想出的重构方案(python实现)
摘要:#!/usr/bin/env pythonclass Processor: def __init__(self, processor): self.processor = processor def isAllowSend(self, message, setChargeFlag): passclass WhildListProcessor(Processor): def isAllowSend(self, message, setChargeFlag): if message.sender in (1,2): ... 阅读全文

posted @ 2014-01-02 13:09 codestyle 阅读(1147) 评论(0) 推荐(0) 编辑

一段代码,欢迎讨论
摘要:/*从朋友那看来的,因为他十分警惕的守护自己的代码所以下面的代码都是凭着我的记忆写下的伪代码,别问我这是什么语言,大致就是类C语言吧这是一个消息转发系统的一个子系统,这个系统通过转发消息收取费用子系统的功能是读取消息,判断能不能转发,并设置收费标志由别的子系统完成收费,转发的动作问题:这个程序需要重构吗?如果需要怎么重构?*/void main(){ Queue queue = new Queue(); while(Message message=queue.Get()) { process(message); }}void process(Message... 阅读全文

posted @ 2013-12-31 14:24 codestyle 阅读(772) 评论(1) 推荐(0) 编辑

重构后的程序:通过rsync命令抓取日志文件
摘要:push.sh#!/bin/bashfunction push(){ local ip=$1 local user=$2 local password=$3 local path=$4 local localPath=$5 local error=$6 :>$error export RSYNC_PASSWORD="$password" rsync -Cavz $user@$ip::$path $localPath > $error 2>&1 # 判断是否... 阅读全文

posted @ 2013-12-27 17:40 codestyle 阅读(704) 评论(0) 推荐(0) 编辑

重构前的程序:通过rsync命令抓取日志文件
摘要:基本概况:我有一台服务器每天每个小时都会生成一个日志文件,这些日志文件会被保留2天,超过2天会被一个程序压缩放到备份目录,日志文件的文件名是有命名要求的,例如:project_log.20130101.01,project_log.20130101.02 意思即:2013年1月1日1点和2点生成的日志文件,他们被备份后的文件名是:project_log.20130101.01.gz,project_log.20130101.02.gz另外有一台服务器可从这台服务器上抓取文件,它即可以抓取昨天生成的尚未备份的日志,也可以抓取比较早的已经被备份的数据,还可以抓取当天已经生成了的日志文件#!/bin 阅读全文

posted @ 2013-12-27 17:35 codestyle 阅读(1167) 评论(0) 推荐(0) 编辑

测试和恢复性的争论:面向对象vs.函数式编程
摘要:Michael Feathers最近的博文在博客社区引发了一场异常激烈的论战。Feathers发表言论说一些面向对象编程语言的内嵌特性有助于测试的进行,并且使用面向对象编程语言编写的代码更容易恢复。他举了这样一个例子,class X有一个叫作badMethod的方法,这个方法处理一些“痛苦”的工作,比如调用并更新产品数据库、或者处理一些甚至关系到底层硬件的事务:public class X { public void method() { ... badMethod(); ... } ...}理想的设计是,系统可以允许独立测试一般的类和类组... 阅读全文

posted @ 2013-12-25 13:14 codestyle 阅读(398) 评论(0) 推荐(0) 编辑

追求代码质量: 监视圈复杂度
摘要:http://www.ibm.com/developerworks/cn/java/j-cq03316/每位开发人员对代码质量的含义都有着自己的看法,并且大多数人对如何查找编写欠佳的代码也有自己的想法。甚至术语代码味道(code smell)也已进入大众词汇表,成为描述代码需要改进的一种方式。圈什么?关于这篇文章和代码质量主题的任何其他文章的问题,请访问由 Andrew Glover 主持的Improve your Java Code Quality讨论论坛。代码味道通常由开发人员直接判定,有趣的是,它是许多代码注释综合在一起的味道。一些人声称公正的代码注释是好事情,而另一些人声称代码注释只是 阅读全文

posted @ 2013-12-24 13:27 codestyle 阅读(731) 评论(0) 推荐(0) 编辑

代码度量工具——SourceMonitor的学习和使用
摘要:http://www.cnblogs.com/bangerlee/archive/2011/09/18/2178172.html引言我们提倡编写功能单一、结构清晰、接口简单的函数,因为过于复杂的函数会给我们带来很多问题:加深其他开发人员理解代码的难度;不方便测试人员对其编写测试用例;容易隐藏错误;出现问题难以定位……怎样的函数算是复杂的函数?哪些代码散发着“臭味”?除了依靠经验丰富的程序员的敏锐嗅觉,我们还可以通过工具,对我们的函数和代码进行度量。不像一位严格苛刻的代码检视人员,代码度量工具并不会板着脸对我们说:“嗯……这段代码糟糕透了!",它反馈给我们的是一组度量值(Metrics 阅读全文

posted @ 2013-12-24 13:20 codestyle 阅读(1433) 评论(0) 推荐(0) 编辑

过多if-else分支的优化
摘要:http://www.udpwork.com/item/9294.html我想谈一谈这个话题是因为我的上一篇博客在ITEye上有一些朋友回复,说if-else过多的分支可以使用switch或者责任链模式等等方式来优化。确实,这是一个小问题,不过我们还是可以整理一下这个小问题的重构方式。为什么要优化?你没有看错。这是要放在第一条谈论的。有许多人会说,叠起来一堆if-else分支,代码就不优雅了。可是,怎样去定义“优雅”的概念呢?再退一步说,即便不“优雅”,又有什么问题?对于这样一段再普通不过的代码:int code;if("Name".equals(str)) code = 阅读全文

posted @ 2013-12-20 14:35 codestyle 阅读(2473) 评论(0) 推荐(0) 编辑

史上最烂的代码
摘要:http://www.udpwork.com/item/8592.html其实本没有什么代码是“史上最烂”的,要有也只有“史上更烂”的,我想随便说说这个话题,也是源自豆瓣的一个讨论。事实上,系统复杂了被骂代码烂是一件司空见惯的事情。当然,也有一些短小的代码片段,就足以看出代码作者是个不怎么样的人。布尔类型的使用是很容易变成最烂代码的:if (isTrue()) if (isTrue()) doSomething();if(boolVal == true) { ..... }有一些毫无意义的注释:return 1; // 返回 1//如果标志为真,就返回truei... 阅读全文

posted @ 2013-12-20 14:30 codestyle 阅读(1053) 评论(0) 推荐(0) 编辑

史上最糟糕的两个变量名
摘要:http://blog.jobbole.com/18304/作为一个程序员,“起名字”是他们工作中非常重要的一部分。Phil Karlton就说过:“在计算机科学领域,有两大难题,如何验证缓存和如何给各种东西命名。”虽然很难,但是每次在写代码的时候,给事物起名字又是不可回避的工作。无论是程序变量名还是数据库表名或者是表里的列名,甚至是文件系统中的文件名,以及你的项目名称、产品名称,给这些东西起名字可不是个轻松活儿。糟糕的命名方式随处可见。你会发现,有的变量名字起得太短,根本没法提供足够的描述信息。或许有这个问题的人都做过TRS-80 BASIC程序员,在这种BASIC语言里,无论你起多长的变量 阅读全文

posted @ 2013-12-18 15:58 codestyle 阅读(337) 评论(0) 推荐(0) 编辑

如何写出无法维护的代码
摘要:http://blog.jobbole.com/23739/酷壳里有很多我觉得很不错的文章,但是访问量最大的却是那篇《6个变态的Hello World》,和它能在本站右边栏“全站热门”中出现的还有“如何加密源代码”,以及编程真难啊等这样的文章。可见本站的读者们的偏好,我也相信你们都是“身怀绝技”的程序员。所以,今天给大家推荐这篇文章,相信一定能触动大家的兴奋点。这篇文章的原文在这里(http://mindprod.com/jgloss/unmain.html),我看完后我想说——1、什么叫“创造力”,创造力就是——就算是要干一件烂事都能干得那么漂亮那么有创意的能力。2、什么叫“抓狂”,抓狂就是 阅读全文

posted @ 2013-12-18 15:55 codestyle 阅读(299) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 下一页