论坛首页 Java企业应用论坛

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

浏览 10076 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-01-02   最后修改:2011-01-03
之前贴子的地址:
http://www.iteye.com/topic/857316?page=3#1828961

gdpglc 写道
evanzzy 写道
用异常判断正常逻辑不太好,一是程序结构不清晰,因为异常不仅仅代表了验证错误,还可能代表网络错误、内存溢出等问题;二是异常做判断,比用普通的判断方法耗费的系统资源要大得多,这个大得多的数量级在10倍以上。所以还是不要用异常处理正常逻辑,虽然功能用起来没问题,但不代表这种写法就是好的


张冠李代 乱其八糟

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

这些理由是死的,用法是活的...


能把c写到比java快10倍的人 确实不多.....

特别在server side....

-------------------------------------
请看一下上一贴子的测试。再你看来c和java的自身速度是由人来决定的?

====================================================================



我只能说楼主是刚出道的。哈哈。。。

面试我绝对不要这种固执的人,不听好的建议。。。

虽然代码实现了功能,但是抛出异常的性能明显要减低,而且你还直接用exception来抛出。

希望你工作的时候不要做出这么低级的代码出来。。

随便拍砖。
--------------------------------------
不好意思,我工作快八年了。我参与过的项目,有银行的、证券的、还有游戏...
你看看你说的话,说一句半句是错的,你还要面试别人...
第一,做程序员的我见过的都偏执
第二,你又说性能,看之前的贴子吧。那exception是Integer.parseInt方法抛的,不是我抛的。之所以不用NumberFormatException进行catch的原因,是无论抛什么,都可以认为解析失败,这样不用死记或者现去查找parseInt方法会抛什么异常,会抛几个异常。
第三,代码低不低级,对有些人不过是个人好恶问题。

我工作几年了,不是个问题,我想信 学无先后达者为师


=============================================

也尽量不用异常.
Java代码

   1. try{ 
   2. while(true){//不用hashnext用异常不好么? 
   3.  list.add( it.next());   
   4. } 
   5. }cache(Exception e ){ 
   6.  return list; 
   7. } 

try{
while(true){//不用hashnext用异常不好么?
list.add( it.next()); 
}
}cache(Exception e ){
return list;
}

------------------------------------------
第一,我说的是我写的那6行代码。那个代码很清晰。

第二,我没说让别人用异常打乱正常的代码表达。降低代码的可读性。我说的是,别用教条的眼光去看我写的6行代码。别用教条的眼光去看待异常使用。


==============================================================
不建议使用异常
1、异常是怎么来的?
很久以前,编程里没有异常,用跳转(ASM),错误号(C/C++),然后OOP的时候,加入了这个结构化的异常,用来控制程序结构的,不是用来做业务处理的。

2、性能
处理异常比正常的一个判断,性能确实差了很多,参见efficient java
-----------------------------------------
1.对异常结果的处理,不算业务逻缉的一部份?。你看看我在上一贴中的JTable的代码好不好。闭着睛眼在这乱写...
2.性能的问题,你多看看前面写的吧。


=============================================================
这是我最后一贴。 投我隐藏的你记住,我发过这贴。当你写代码时,用了异常做判断,你应该想起这贴,也许你该脸红...


关于异常的性能问题,请看IcyFenix的贴子,有深入的讲解:
http://www.iteye.com/topic/857722

异常能不能做判断,之前以有过一次讨论,请大家看一下:
http://www.iteye.com/topic/2038
   发表时间:2011-01-02   最后修改:2011-01-02
引用
第一,我说的是我写的那6行代码。那个代码很清晰。

第二,我没说让别人用异常打乱正常的代码表达。降低代码的可读性。我说的是,别用教条的眼光去看我写的6行代码。别用教条的眼光去看待异常使用。


引用
使用goto & 指针写的好的程序多了去了
但大多数人都不能用的好.
盖狗舍不需要多严格的代码规范
但盖大楼时不需要多少hack技巧


教条不教条 我不知道
但在多人合作的状态下
少用诡异的跳转方式
比如异常
比如 break  xxxx;
比如 在cache final 中的return
比如 ................

这些东西会对调试代码产生非常大的阻碍.
非结构化的代码需要有更多的思考在里面
才能避免不必要的麻烦.

用异常作选择这种事还不到大逆不道的地步

你要是看了有些公司把所有的返回值定义为同一个类型
(这里面有异常信息或是成功信息)
那才叫崩溃呢...........
根本没有语义含义在其中

不如返回一个object 死还死个痛快呢

上个贴子不应该隐有很多有价值的回贴呢.

PS:对于你那6行代码你如何扩展为非负数?
如果不是由于java的正则非常难用
一行代码的问题你非要用6行去作是否有点奢侈?
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-03
抛出异常的爱 写道
引用
第一,我说的是我写的那6行代码。那个代码很清晰。

第二,我没说让别人用异常打乱正常的代码表达。降低代码的可读性。我说的是,别用教条的眼光去看我写的6行代码。别用教条的眼光去看待异常使用。


引用
使用goto & 指针写的好的程序多了去了
但大多数人都不能用的好.
盖狗舍不需要多严格的代码规范
但盖大楼时不需要多少hack技巧


教条不教条 我不知道
但在多人合作的状态下
少用诡异的跳转方式
比如异常
比如 break  xxxx;
比如 在cache final 中的return
比如 ................

这些东西会对调试代码产生非常大的阻碍.
非结构化的代码需要有更多的思考在里面
才能避免不必要的麻烦.


1. 呵呵.. 我那6行代码,就算刚学java的一看就懂,6行代码再跳能跳哪去,发这么多贴,回来回去,不是说书上不让,就是性能不好。唉!
说书上不让,其实把书上那些条条框框,分析一下都不是问题。

性能不好,我不想说了...

2.如果有人是从管理者的角度思考,要用一刀切的办法管理代码。那我可以理解。只是那是别一回事,并不是说这6行代码,有什么问题。

3.拼命的说这代码这样不好,那样不好。用的都是和那6行代码挨不上的理由,没有一个是真实的案例,纸上谈兵,说的天花乱坠又如何?。可是,在实际的软件逻缉表达时,真出现了不得不用异常进行判断的情况,还是得该写写。
要我举例,行,你看sun的代码。我相信写那代码的sun公司的人,不是没看过effective java,而是知道,可以这样用。
而那些对我那6行代码口诛笔伐的人,当你不得不用异常做判断时,你是怎么想的呢?难到你的思想和实践是完全两回事?


0 请登录后投票
   发表时间:2011-01-02  
写8年代码了, 还这个样子。 几个帖子我都看了, 大部分人都是不建议你这么做而已。 有谁说你这个代码会有问题?  我觉得你不适合做团队工作, 跟你一起干活会很累。非要拿6行代码灌给所有人, 说这样不教条, 这样简练, 你这样说, 我承认没有错,但不是一个适合所有场景, 一个不能适合所有场景的代码, 那就意味着有人对你口诛笔伐。

至于有没有例子, 我已经回复过你了。 自己不去看。

sun的代码又怎么了, 有问题的地方多了去了。 再说了, 你举例的仅仅是ui里的, 没有代表性。
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
gdpglc 写道

1. 呵呵.. 我那6行代码,就算刚学java的一看就懂,6行代码再跳能跳哪去,发这么多贴,回来回去,不是说书上不让,就是性能不好。唉!
说书上不让,其实把书上那些条条框框,分析一下都不是问题。

性能不好,我不想说了...

2.如果有人是从管理者的角度思考,要用一刀切的办法管理代码。那我可以理解。只是那是别一回事,并不是说这6行代码,有什么问题。

3.拼命的说这代码这样不好,那样不好。用的都是和那6行代码挨不上的理由,没有一个是真实的案例,纸上谈兵,说的天花乱坠又如何?。可是,在实际的软件逻缉表达时,真出现了不得不用异常进行判断的情况,还是得该写写。
要我举例,行,你看sun的代码。我相信写那代码的sun公司的人,不是没看过effective java,而是知道,可以这样用。
而那些对我那6行代码口诛笔伐的人,当你不得不用时,你是怎么想的呢?难到你的思想和实践是完全两回事?



一行:

NumberUtils.isDigits(str);
总比六行要强上一点点

并且你估计想要的是:
Number.toInt(java.lang.String str, int defaultValue)
这个函数

好了轮子已经造好不要再写这么伤心的代码了.
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
sdh5724 写道
写8年代码了, 还这个样子。 几个帖子我都看了, 大部分人都是不建议你这么做而已。 有谁说你这个代码会有问题?  我觉得你不适合做团队工作, 跟你一起干活会很累。非要拿6行代码灌给所有人, 说这样不教条, 这样简练, 你这样说, 我承认没有错,但不是一个适合所有场景, 一个不能适合所有场景的代码, 那就意味着有人对你口诛笔伐。

这个话题太模糊,什么叫所有场景?不想做深入讨论。我只想说,那6行在我目前所经历的项目里都够用。


至于有没有例子, 我已经回复过你了。 自己不去看。

你就是那个写这个的人吧?

“快10倍的话,java早死了。 真不知道你在想什么。”


你没看到有位仁兄做的对比测试吗??? 你这样枉下断言...呵呵...

如果你在互联网企业, 并且大规模的处理数据, 数据又不是那么规整的时候,你就知道你这段代码造成多大的悲剧了。

你这叫例子??? 脑门子拍的啪啪的。
到底什么样的悲剧??? 场景什么样?给用户造成什么损失。
整个一个大言不惭愧。


sun的代码又怎么了, 有问题的地方多了去了。 再说了, 你举例的仅仅是ui里的, 没有代表性。
唉! 你还不如说,你说什么都是错的呢!你爱说啥说啥吧...

0 请登录后投票
   发表时间:2011-01-02  
http://shootout.alioth.debian.org

http://sdh5724.iteye.com/blog/647930

0 请登录后投票
   发表时间:2011-01-02  
引用
这是我最后一贴。 投我隐藏的你记住,我发过这贴。当你写代码时,用了异常做判断,你应该想起这贴,也许你该脸红...


我是会脸红啊 ,不过不是因为你的贴子,而是我知道我为了工作进度而不得不给程序加入了bad smell。就像我有时候不得不copy+paste,而不是认真的花点时间去extract method。
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
说个验证日期的问题...
大家觉得应该怎么验证???
String eL= "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]? ((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";   
Pattern p = Pattern.compile(eL);   
Matcher m = p.matcher(value);   
boolean flag = m.matches();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
        try {
            Date d = sdf.parse(dateStr);
        } catch (ParseException e) {
            return false;
        }


请问大家都用了哪个????
0 请登录后投票
   发表时间:2011-01-02  
抛出异常的爱 写道
gdpglc 写道

1. 呵呵.. 我那6行代码,就算刚学java的一看就懂,6行代码再跳能跳哪去,发这么多贴,回来回去,不是说书上不让,就是性能不好。唉!
说书上不让,其实把书上那些条条框框,分析一下都不是问题。

性能不好,我不想说了...

2.如果有人是从管理者的角度思考,要用一刀切的办法管理代码。那我可以理解。只是那是别一回事,并不是说这6行代码,有什么问题。

3.拼命的说这代码这样不好,那样不好。用的都是和那6行代码挨不上的理由,没有一个是真实的案例,纸上谈兵,说的天花乱坠又如何?。可是,在实际的软件逻缉表达时,真出现了不得不用异常进行判断的情况,还是得该写写。
要我举例,行,你看sun的代码。我相信写那代码的sun公司的人,不是没看过effective java,而是知道,可以这样用。
而那些对我那6行代码口诛笔伐的人,当你不得不用时,你是怎么想的呢?难到你的思想和实践是完全两回事?



一行:

NumberUtils.isDigits(str);
总比六行要强上一点点

并且你估计想要的是:
Number.toInt(java.lang.String str, int defaultValue)
这个函数

好了轮子已经造好不要再写这么伤心的代码了.


呵呵... 我在上一贴是这样说的:

不好意思, 把 能不能 三字 看成不能了。 基本上我同意你说的。 我只是反对那些教条的人。

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

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

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


可见我也赞同使用现成的:
我反对的是:
一是拿effective java说事,或者其它的什么书。
   引经具典可以,但请正确的使用,和加入自已的思考。
二是拿性能说事。
   这是个万能理由,我做过的项目告诉我,没人能事先预测热点。热点要靠Profiler工具。拿这个说事,除非有具体案例,不然我个人是不会相信的。
0 请登录后投票
论坛首页 Java企业应用版

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