- 浏览: 536574 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
飞天奔月:
public List<String> gener ...
实践中的重构30_不做油漆匠 -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道public class A {
...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在世界的中心呼喚愛 写道在classB ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在classB的finalize上打断 ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
iteye比较少上,如果可以的话,可以发e-mail交流:ch ...
深入理解ReferenceQueue GC finalize Reference
code review的时候,发现了如下代码。
第一反应是异常这么用,好奇怪。异常不应该这么用的啊,也许是为了图省事吧。
但是还是应该把异常用在异常情况下,而不是这么误用。这个用法和用异常判断文件的结束没有什么太大的区别。
仔细看了看,不仅仅是异常用的比较奇怪,这个方法是有漏洞的。
明明方法接口的约定是判断长度和数字,但是因为是用Long的valueOf方法,通过异常来实现,结果像"-100000000"这样本来不合法的字符串可以通过这个校验了。
重构后代码如下,直白的完成该方法的接口约定。
勿以恶小而为之,勿以善小而不为。
用道德来讨论代码唉!
effective java 里 前边还说 工厂方法比构造方法如何如何好,你是不是把所有的构造都换成工厂方法了呢?
软件最有意思的地方就是,教条不起作用,且害处很大,问题都得具体情况具体分析,每个问题,都要考虑前因后果。书上的一名话就方之四海皆准了...
用不用regex其实无所谓,但是string本来就有charAt方法,为啥还要转换呢?
不以恶小而为之,不以善小而不为。
---------------------------
看到你的回复,我想起一句话:中国很多程序员是认认真真的制造垃圾代码。
勿以恶小而为之,勿以善小而不为。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
《Effective Java》 chapter 8:
最重要的是,这里明明不用异常就可以把事情做的更好。
书是用来活学活用的,不是用来做教条的。
不过是一个数字验证,用不着上纲上线。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
《Effective Java》 chapter 8:
最重要的是,这里明明不用异常就可以把事情做的更好。
你的意思是,乾坤大挪移后,东西变好了是吧。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
+1
标题的重构的确有一定的误导性。这个我近期会改掉的。
上面怎么说的 说说为什么不能乱用exception?
/** * 验证一个字符串是一个长度为10,且内容都是数字。 * */ public static boolean validate(String str) { if (str == null || str.length() != 10) { return false; } // 纯数字 try { Long.valueOf(str); } catch (NumberFormatException ex) { return false; } return true; }
第一反应是异常这么用,好奇怪。异常不应该这么用的啊,也许是为了图省事吧。
但是还是应该把异常用在异常情况下,而不是这么误用。这个用法和用异常判断文件的结束没有什么太大的区别。
仔细看了看,不仅仅是异常用的比较奇怪,这个方法是有漏洞的。
明明方法接口的约定是判断长度和数字,但是因为是用Long的valueOf方法,通过异常来实现,结果像"-100000000"这样本来不合法的字符串可以通过这个校验了。
重构后代码如下,直白的完成该方法的接口约定。
/** * 验证一个字符串是一个长度为10,且内容都是数字。 * */ public static boolean validate2(String str) { if (str == null || str.length() != 10) { return false; } char[] data = new char[str.length()]; str.getChars(0, str.length(), data, 0); for (int i = 0; i < data.length; i++) { char c = data[i]; if (c < '0' || c > '9') { return false; } } return true; }
评论
24 楼
xibaiben
2010-12-30
使用正则表达式是不是会抛出异常?
23 楼
gdpglc
2010-12-30
logicgate 写道
gdpglc 写道
书是用来活学活用的,不是用来做教条的。
不过是一个数字验证,用不着上纲上线。
不过是一个数字验证,用不着上纲上线。
勿以恶小而为之,勿以善小而不为。
用道德来讨论代码唉!
effective java 里 前边还说 工厂方法比构造方法如何如何好,你是不是把所有的构造都换成工厂方法了呢?
软件最有意思的地方就是,教条不起作用,且害处很大,问题都得具体情况具体分析,每个问题,都要考虑前因后果。书上的一名话就方之四海皆准了...
22 楼
dwangel
2010-12-30
hobitton 写道
这,,为啥不用regex呢?奇怪……
重构出来的代码看起来一坨坨的,觉得可读性很一般。很好奇string转换成char的array的时候为啥要这样写。
重构出来的代码看起来一坨坨的,觉得可读性很一般。很好奇string转换成char的array的时候为啥要这样写。
用不用regex其实无所谓,但是string本来就有charAt方法,为啥还要转换呢?
21 楼
jzinfo
2010-12-30
不要使用异常来作为系统流程的判断
重构前和重构后的代码都比较垃圾。
应该使用正则表达式来进行。
重构前和重构后的代码都比较垃圾。
应该使用正则表达式来进行。
20 楼
mtnt2008
2010-12-30
楼主实现的没有问题
如果是一个常用方法的话,因为效率的问题,没有使用regex,虽然那样可读性更好一些
如果是一个常用方法的话,因为效率的问题,没有使用regex,虽然那样可读性更好一些
19 楼
Durian
2010-12-30
logicgate 写道
gdpglc 写道
书是用来活学活用的,不是用来做教条的。
不过是一个数字验证,用不着上纲上线。
不过是一个数字验证,用不着上纲上线。
不以恶小而为之,不以善小而不为。
---------------------------
看到你的回复,我想起一句话:中国很多程序员是认认真真的制造垃圾代码。
18 楼
logicgate
2010-12-30
gdpglc 写道
书是用来活学活用的,不是用来做教条的。
不过是一个数字验证,用不着上纲上线。
不过是一个数字验证,用不着上纲上线。
勿以恶小而为之,勿以善小而不为。
17 楼
gdpglc
2010-12-30
logicgate 写道
gdpglc 写道
logicgate 写道
异常还是不要乱抛的好。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
《Effective Java》 chapter 8:
引用
• Because exceptions are designed for use under exceptional circumstances, few, if any, JVM implementations attempt to optimize their performance. It is generally expensive
to create, throw, and catch an exception.
• Placing code inside a try-catch block precludes certain optimizations that modern
JVM implementations might otherwise perform.
• The standard idiom for looping through an array does not necessarily result in
redundant checks; some modern JVM implementations optimize them away.
The moral of this story is simple: Exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow. A well-designed API must not force its client to use exceptions for ordinary control flow.
to create, throw, and catch an exception.
• Placing code inside a try-catch block precludes certain optimizations that modern
JVM implementations might otherwise perform.
• The standard idiom for looping through an array does not necessarily result in
redundant checks; some modern JVM implementations optimize them away.
The moral of this story is simple: Exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow. A well-designed API must not force its client to use exceptions for ordinary control flow.
最重要的是,这里明明不用异常就可以把事情做的更好。
书是用来活学活用的,不是用来做教条的。
不过是一个数字验证,用不着上纲上线。
16 楼
logicgate
2010-12-30
gdpglc 写道
logicgate 写道
异常还是不要乱抛的好。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
《Effective Java》 chapter 8:
引用
• Because exceptions are designed for use under exceptional circumstances, few, if any, JVM implementations attempt to optimize their performance. It is generally expensive to create, throw, and catch an exception.
• Placing code inside a try-catch block precludes certain optimizations that modern JVM implementations might otherwise perform.
• The standard idiom for looping through an array does not necessarily result in redundant checks; some modern JVM implementations optimize them away.
The moral of this story is simple: Exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow. A well-designed API must not force its client to use exceptions for ordinary control flow.
• Placing code inside a try-catch block precludes certain optimizations that modern JVM implementations might otherwise perform.
• The standard idiom for looping through an array does not necessarily result in redundant checks; some modern JVM implementations optimize them away.
The moral of this story is simple: Exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow. A well-designed API must not force its client to use exceptions for ordinary control flow.
最重要的是,这里明明不用异常就可以把事情做的更好。
15 楼
yvfish
2010-12-30
字符串转换为数值用异常没有这么大的罪吧(虽然程序的本意是进行数值格式检查),当然了,用异常比不用异常性能会差一点,但也比楼主所讲的方法效率高吧。
14 楼
gdpglc
2010-12-30
logicgate 写道
异常还是不要乱抛的好。
有些人说楼主重构的代码象一砣。。。其实可能是楼主为了说明问题,直接把代码放在这里了。
实际项目中如果经常需要判断数字,完全可以把这段代码提取出来放到utility class里。
有些人说楼主重构的代码象一砣。。。其实可能是楼主为了说明问题,直接把代码放在这里了。
实际项目中如果经常需要判断数字,完全可以把这段代码提取出来放到utility class里。
你的意思是,乾坤大挪移后,东西变好了是吧。
第一种写法,代码很清晰,你称之为 乱抛异常吗?
13 楼
ch_space
2010-12-30
超级潜水员 写道
重构出来的代码跟坨屎一样.
+1
12 楼
logicgate
2010-12-30
异常还是不要乱抛的好。我觉得用regex判断会更优雅。
11 楼
zhang_xzhi_xjtu
2010-12-30
ouchxp 写道
LZ对重构的理解有偏差..
重构不是改BUG.
重构不是讲解代码规范
重构不是优化代码效率.
重构的目的是在不改变"软件之可察行为"前提下,提高其可理解性,降低其修改成本.
重构不是改BUG.
重构不是讲解代码规范
重构不是优化代码效率.
重构的目的是在不改变"软件之可察行为"前提下,提高其可理解性,降低其修改成本.
标题的重构的确有一定的误导性。这个我近期会改掉的。
10 楼
starmb
2010-12-30
原来代码是一个,经过lz重构后变成了一坨。。。
原来代码固然不是个好方法,经过lz重构后的代码虽然完成了所需的期望,但是以牺牲可读性为代价的。满足你的希望,没有错,可你不能强加你的思想于别人,那等同于弓虽女干.可以感觉到你的水平其实并不比原代码作者高哪里去。
原来代码固然不是个好方法,经过lz重构后的代码虽然完成了所需的期望,但是以牺牲可读性为代价的。满足你的希望,没有错,可你不能强加你的思想于别人,那等同于弓虽女干.可以感觉到你的水平其实并不比原代码作者高哪里去。
9 楼
whaosoft
2010-12-30
jiangshaolin 写道
请参考《实现模式》和《重构》
上面怎么说的 说说为什么不能乱用exception?
8 楼
jiangshaolin
2010-12-30
请参考《实现模式》和《重构》
7 楼
ouchxp
2010-12-30
LZ对重构的理解有偏差..
重构不是改BUG.
重构不是讲解代码规范
重构不是优化代码效率.
重构的目的是在不改变"软件之可察行为"前提下,提高其可理解性,降低其修改成本.
重构不是改BUG.
重构不是讲解代码规范
重构不是优化代码效率.
重构的目的是在不改变"软件之可察行为"前提下,提高其可理解性,降低其修改成本.
6 楼
sxq51189540
2010-12-30
为什么不用正则表达式去验证
5 楼
hobitton
2010-12-30
这,,为啥不用regex呢?奇怪……
重构出来的代码看起来一坨坨的,觉得可读性很一般。很好奇string转换成char的array的时候为啥要这样写。
重构出来的代码看起来一坨坨的,觉得可读性很一般。很好奇string转换成char的array的时候为啥要这样写。
发表评论
-
实践中的重构32_使用标准的IO操作写法。
2012-07-14 18:42 1436看到这样一段代码,功能为读取一个指定文件的内容然后返回。 ... -
实践中的重构31_结果类两种实现的比较
2011-09-13 19:58 1093在查询接口结果类设计 ... -
实践中的重构30_不做油漆匠
2011-08-15 23:42 1297油漆匠的故事是编程文化中的一个著名故事。本地化如下。 小强毕业 ... -
实践中的重构29_不自动的自动化测试
2011-07-31 18:00 1068测试的精髓之一就是自 ... -
实践中的重构28_小心怀疑类库
2011-07-24 10:25 1070一般而言,类库的使用频率较高,场景较多,隐藏的bug就较少。 ... -
实践中的重构27_不要忘了内存空间
2011-06-06 18:31 1196方法在设计中,一般关注的是方法的功能契约,即方法需要什么样的参 ... -
实践中的重构26_奇怪的接口注释
2011-06-06 16:10 1361最近又看到奇怪的注释。 /** * 用户查询服务。 ... -
实践中的重构25_UT也需要持续重构
2011-05-01 11:20 1024UT是个好东西,在对代 ... -
实践中的重构24_持续的方法重构
2011-05-01 02:20 1092很少有人可以一遍就写出好的代码。写代码和写文章差不多,大部分人 ... -
实践中的重构23_详尽的注释未必是好注释
2011-03-20 17:37 1552注释一直是软件开发中的一个老大难问题。 代码中一个注释都没有是 ... -
实践中的重构22_不要垃圾
2011-03-20 13:31 1067Java引入了GC当然很好,减轻了程序员手工管理内存的负担,但 ... -
实践中的重构21_给她一个好名字
2011-03-20 13:03 923名字的重要性实在是再怎么强调都不为过的。 为什么名字这么重要呢 ... -
实践中的重构20_一段可笑的异常处理逻辑
2011-03-06 20:32 1715Code review也是一个充满 ... -
实践中的重构19_脱裤子放屁
2011-03-03 23:17 2071每当看到代码中有一个 ... -
实践中的重构18_不对称的美
2011-02-26 22:30 997一般而言,自然界是以 ... -
实践中的重构17_表驱动法
2011-02-22 00:10 865代码以及初始的单元测试见 http://zhang-xzhi- ... -
实践中的重构16_多即是少
2011-01-16 23:44 1524在编写UT的过程中,随处可见重复,硬编码等等使得代码僵化的代码 ... -
实践中的重构15_null的意义和集合类作为方法结果类型
2011-01-12 22:16 653在编程中,估计null应该是一个很常写的词汇了。 实践中,经常 ... -
实践中的重构14_用方法设计保证正确性
2011-01-04 21:40 1024一般来说,方法的调用方遵循方法的契约调用某方法来完成某功能。每 ... -
实践中的重构13_利用递归提高代码的可维护性
2010-12-30 01:38 742有这么一段代码,是用来解析国内的地址信息的。 AddressI ...
相关推荐
描述中的“幅值谱重构语音”指的是从MFCC中恢复出幅度谱,然后使用IFFT将其转换回时间序列。 **谱重构**是指根据频率域信息(如幅度谱或功率谱)重建原始信号的过程。在语音处理中,谱重构对于语音识别、语音合成...
在机械故障诊断中,EMD能帮助识别设备的异常振动模式。 "EMDchonggou.m"函数的具体实现可能包括以下步骤: 1. 输入原始信号。 2. 应用EMD算法,逐次提取IMF分量,直到剩余的残余项满足成为单一趋势或恒定值的要求。...
标题中的“用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构_源码.rar.rar”揭示了该压缩包文件包含的是与信号处理相关的源代码,特别是涉及了三种重要的信号分解方法:Empirical ...
《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...
在本文中,我们将深入探讨基于Matlab的压缩感知(Compressive Sensing,简称CS)重构算法的实现。压缩感知是一种理论先进的信号处理方法,它允许我们以远低于奈奎斯特定理所要求的采样率捕获信号,并能恢复原始信号...
配电网重构是电力系统领域中的一个重要研究课题,它涉及到电力系统的稳定运行与经济效率。配电网重构的目标是在满足一系列约束条件下,通过改变开关状态,优化网络结构,以达到提高供电可靠性、降低运营成本、改善...
重构__改善既有代码的设计_高清 绝对清晰
资源名:用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构 资源类型:matlab项目全套源码 源码介绍:用于信号的分解、降噪和重构,实现故障诊断 源码说明: 全部项目源码都是经过...
牛顿拉普逊法就算配电网重构的潮流程序,结构清晰易懂。
在IT领域,尤其是在信号处理和数据采集系统中,压缩感知(Compressed Sensing,简称CS)是一个非常重要的理论。这个理论突破了传统采样定理的限制,允许以远低于奈奎斯特定理所规定的速率对信号进行采样,然后通过...
在IT行业中,尤其是在医疗影像处理领域,三维重构技术扮演着至关重要的角色。"NewPrjName.rar" 是一个与三维医学图像重构相关的项目文件压缩包,它涉及到的是使用C++编程语言来实现这一复杂的计算过程。这个项目的...
压缩传感重构算法中的子空间追踪算法,用于信号的重构
这个压缩包中的"第13章 MATLAB图像重构实战"可能包含了一系列的MATLAB脚本和函数,用于演示如何使用MATLAB实现fanbeam变换。这些脚本可能包括数据读取、预处理、fanbeam投影、反投影以及图像重构等步骤。在学习和...
经验模态分解(Empirical Mode Decomposition,简称EMD)是一种强大的数据分析技术,尤其...通过对这些资源的深入理解和实践,我们可以更好地掌握EMD技术,并将其应用到实际问题中,实现非平稳信号的有效分析和重构。
在电力系统领域,配电网重构是一项关键的技术,其目的是通过改变配电网络的...总之,配电网重构源码的获取为研究和实践提供了宝贵的工具,通过深入学习和应用,可以提升电力系统的运行效率,为智能电网的发展做出贡献。
这个压缩包中的源码很可能是实现了以上步骤的MATLAB函数或脚本,对于学习和实践互信息和相空间重构的学者来说,这是一个宝贵的资源。用户可以通过阅读和运行这些代码,理解相关算法的原理,并将其应用到自己的项目中...
在本项目中,`wavetansform1.m` 文件很可能是用MATLAB编写的一个脚本,用于执行小波分解和重构的过程。 小波分解是将图像分解成一系列不同频率和位置的小波系数。这个过程通常包括选择一个适当的小波基,如...
北理新源,TBOX项目RTT代码重构项目_BTFS_TBOX_RTT
在OMP中,信号被分解为一系列原子(如基函数或字典元素),每次迭代选择与残差最相关的原子,然后更新信号的近似值,直到达到预设的迭代次数或重构误差阈值。 具体来说,OMP的工作流程如下: 1. 初始化:设定一个空...