论坛首页 Java企业应用论坛

验证String是不是整数,用异常作判断怎么了!(续2)

浏览 6915 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-01-01   最后修改:2011-01-01
evanzzy 写道
用异常判断正常逻辑不太好,一是程序结构不清晰,因为异常不仅仅代表了验证错误,还可能代表网络错误、内存溢出等问题;二是异常做判断,比用普通的判断方法耗费的系统资源要大得多,这个大得多的数量级在10倍以上。所以还是不要用异常处理正常逻辑,虽然功能用起来没问题,但不代表这种写法就是好的


张冠李代 乱其八糟

总共6行代码:哪里能看出不清晰呢???
这6行代码里,哪有网络的事...
又是性能,c比java估计也能快10倍,你会因为这个不用java吗?

这些理由是死的,用法是活的...
0 请登录后投票
   发表时间:2011-01-01  
楼主息怒,按你自己说的“总共6行代码”,你这想怎么写都行。

不过公司或自己有了规范或者什么框框的,那就是另外一回事了
就像以前那个检测空肥皂盒子的故事一样,都是方法

楼主是我在JE看到几乎是最执着的人,居然连续几个隐藏贴
0 请登录后投票
   发表时间:2011-01-01  
lucane 写道
楼主息怒,按你自己说的“总共6行代码”,你这想怎么写都行。

不过公司或自己有了规范或者什么框框的,那就是另外一回事了
就像以前那个检测空肥皂盒子的故事一样,都是方法

楼主是我在JE看到几乎是最执着的人,居然连续几个隐藏贴

其实这些个东西不必较真。闷声发财才是王道。另外和楼主说一下,这本来就不是可不可以的问题,而是一种策略,每个人都能有自已的想法。如果你是拍板的人,你说的就是对的。
0 请登录后投票
   发表时间:2011-01-01  
感觉楼主的做法并没有什么问题,个人习惯而已。如果有人太较真,那只能说是教条了。
其实字符串转换的问题可以进一步引申:
如果验证字符串是否符合yyyyMMdd的日期该怎么做?
A.写上一两百行的校验代码,可能需要正则表达式,月份和日期的判定,闰年平年的计算等。
B.SimpleDateFormat...
0 请登录后投票
   发表时间:2011-01-01   最后修改:2011-01-01
一个逻辑十种写法,都能正确完成逻辑任务
但是有些写法就很优雅,很简单,很清晰,不暴力。
我想说神马,你应该知道了。
这个不是教条不教条的问题,好的代码,大家都一致认为,这样维护起来才更有说服力。
没有任何人说你那样写不对,只有建议或不建议之分。
另外,多说一句,不管你工作有几年了,给我的感觉你就是一个还没毕业的毛头小子,虽然我也是一个毛头小子!
0 请登录后投票
   发表时间:2011-01-01  
支持楼主,反对教条主义。
public static boolean validateInteger(String str) { 
try { 
        Integer.parseInt(str); 
     } catch (Exception ex) { 
         return false; 
     } 
     return true; 
}

就这段代码而言。
楼主的实现从逻辑清晰度上没有问题,更不存在维护的问题。
唯一的问题在于效率上,我不认为异常的开销会比普通的判断高到哪去,也就相当于一个GOTO语句。
但是Integer.parseInt()方法的效率绝对要低于遍历一次字符串(apache的实现),因为它要一边遍历,一边计算。
我喜欢楼主这样的人,不喜欢那种说不出个所以然就开始鄙视楼主的人。
1 请登录后投票
   发表时间:2011-01-01   最后修改:2011-01-01
楼主估计没毕业!你毕业3年后还是这个观点的话,建议转行!!
1 请登录后投票
   发表时间:2011-01-01  
楼主,你有做任何事的自由,我们尊重你的这种自由。
但我这和你讨论另一个问题,
让我们再回顾一下你的代码:
public static boolean validateInteger(String str) { 
try { 
        Integer.parseInt(str); 
     } catch (Exception ex) { 
         return false; 
     } 
     return true; 
}


这段代码的功能是什么?我的理解是判断转入字符串是否为整数,那好,判断这个的目的是什么呢?Integer.parseInt(str)的功能是什么,是解析字符串为Int值,而不是判断是不是为整数(虽然可以通过异常来实现这个功能),当然这只是我的理解。我的原则是代码要完全忠实于其目的。对我而言,在写方法的实现中,尽可能做到只专注自已的功能实现。

让我们再猜测一下,调用这个函数的方法接下来是不是会还进行一次parseInt操作呢,如果是那validateInteger(String str)里面用parseInt来判断是不是有点不好呢。
如果不是,那这个判断有何用呢?因为判断其整数的行为肯定是会在接下来的一个地方会用到其整数属性。如果不是,那判断其整数的行为就很难理解。
另外,关于楼主专注的用异常来判断的话题,个人认为可行但是尽可能避免,理由有上面说的也有个人风格问题。
另给大家说句迟到的元旦快乐。^.^
0 请登录后投票
   发表时间:2011-01-01   最后修改:2011-01-02
gdpglc 写道
不好意思, 把 能不能 三字 看成不能了。 基本上我同意你说的。 我只是反对那些教条的人。

但注意:
你说的“不建议这么作...”

如果说因为有现成的可用,没必要自已写,而不建议我赞同。

如果说是因为用了异常做判断。呵呵,我还是那句话:用异常做判断是可以的。



一些好的编码习惯,解决问题的典型方式我们应该去遵守,这并不是教条!
我承认你的代码能工作,但不要认为这就是"创新"!!
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.
In fact, the exception-based idiom is far slower than the standard one on virtually all current
JVM implementations

基于异常的模式降低了代码意图也比正常的慢很多.也上这段话摘自<<Effective Java>>.可能你要说我"教条"了!
well,suit yourself.
0 请登录后投票
   发表时间:2011-01-02  
phoenixlf 写道
楼主,你有做任何事的自由,我们尊重你的这种自由。
但我这和你讨论另一个问题,
让我们再回顾一下你的代码:
public static boolean validateInteger(String str) { 
try { 
        Integer.parseInt(str); 
     } catch (Exception ex) { 
         return false; 
     } 
     return true; 
}


这段代码的功能是什么?我的理解是判断转入字符串是否为整数,那好,判断这个的目的是什么呢?Integer.parseInt(str)的功能是什么,是解析字符串为Int值,而不是判断是不是为整数(虽然可以通过异常来实现这个功能),当然这只是我的理解。我的原则是代码要完全忠实于其目的。对我而言,在写方法的实现中,尽可能做到只专注自已的功能实现。

让我们再猜测一下,调用这个函数的方法接下来是不是会还进行一次parseInt操作呢,如果是那validateInteger(String str)里面用parseInt来判断是不是有点不好呢。
如果不是,那这个判断有何用呢?因为判断其整数的行为肯定是会在接下来的一个地方会用到其整数属性。如果不是,那判断其整数的行为就很难理解。
另外,关于楼主专注的用异常来判断的话题,个人认为可行但是尽可能避免,理由有上面说的也有个人风格问题。
另给大家说句迟到的元旦快乐。^.^


推测得有点道理,但只是对这个例子而言.但楼主的意思是可以利用异常来作判断,这一点我是支持楼主的,事实上有时候利用异常判断甚至是唯一(或优雅得多)的选择.
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics