`
pioneer21th
  • 浏览: 25735 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

请问这种判断方法叫什么名字?从哪里出来的?

阅读更多
大家好,我相信不少人都常用这样一种判断方法:
if (status == 1) {
          doSomething();
          return;
      }
     if (status == 2) {
          doSomething();
          return;
      }
      doSomething();


还有另外一种写法是:
if (status == 1) {
          doSomething();
           }
     else if (status == 2) {
          doSomething();
          return;
      }
     else
      doSomething();

     
我常用第一种写法,因为我觉得可读性更好也更简洁,但是现在我们team里有人不知道第一种写法,认为很难懂,我不知道怎么说服他。所以请问大家第一种写法出自哪里?叫什么名字?你们经常用第一种吗?(不讨论if/else可以重构成其他模式)
分享到:
评论
43 楼 pioneer21th 2007-05-11  
抛出异常的爱 写道
pioneer21th 写道
Lucas Lee 写道
我认为一般情况下,第一种方式是比较危险的。
如果你想表达的就是if..else if..else这样的意义的话,最好用第二种,这样的无论性能还是可读性都很好,意义表达很精确。
用第一种方式,虽然能少些几个字,但是:
每个if都要独立的判断,为了达到if else的效果,需要保证表达式是互斥的,楼主的例子简单,如果是if(x>0),if(x<0),的情况,就要注意x==0的临界情况,如果是if(x>0) else就简单多了。

我认为简洁而精确的表达含义是最大的理由。



请问危险在何处?

你有没有发现,第一种表达方式很类似于switch语句,只是如果比较的值不是原始类型,所以才不能用switch语句而已。

另外还有人说到比较的性能问题,你们仔细分析分析,第一种方式比第二种方式不多一次比较次数,无论有多少个分支。
status == 2
是没什么开销
万一是equls() O(n^2)


我觉得你没有看清我说的话,在第一种方式下的开销在第二种方式下一点都不减少,你知道,开销主要是看比较次数的。
42 楼 jkit 2007-05-10  
Godlikeme 写道
jkit 写道
pioneer21th 写道
所以请问大家第一种写法出自哪里?叫什么名字?你们经常用第一种吗?


出自Java编码规范,名字叫“恶例”,从来不用。


查过编码规范,不知 “恶例” 从何而来。



单入口单出口原则
41 楼 jimmy.shine 2007-05-10  
为何不使用switch,一了百了!
40 楼 抛出异常的爱 2007-05-10  
pioneer21th 写道
Lucas Lee 写道
我认为一般情况下,第一种方式是比较危险的。
如果你想表达的就是if..else if..else这样的意义的话,最好用第二种,这样的无论性能还是可读性都很好,意义表达很精确。
用第一种方式,虽然能少些几个字,但是:
每个if都要独立的判断,为了达到if else的效果,需要保证表达式是互斥的,楼主的例子简单,如果是if(x>0),if(x<0),的情况,就要注意x==0的临界情况,如果是if(x>0) else就简单多了。

我认为简洁而精确的表达含义是最大的理由。



请问危险在何处?

你有没有发现,第一种表达方式很类似于switch语句,只是如果比较的值不是原始类型,所以才不能用switch语句而已。

另外还有人说到比较的性能问题,你们仔细分析分析,第一种方式比第二种方式不多一次比较次数,无论有多少个分支。
status == 2
是没什么开销
万一是equls() O(n^2)
39 楼 pioneer21th 2007-05-10  
Lucas Lee 写道
我认为一般情况下,第一种方式是比较危险的。
如果你想表达的就是if..else if..else这样的意义的话,最好用第二种,这样的无论性能还是可读性都很好,意义表达很精确。
用第一种方式,虽然能少些几个字,但是:
每个if都要独立的判断,为了达到if else的效果,需要保证表达式是互斥的,楼主的例子简单,如果是if(x>0),if(x<0),的情况,就要注意x==0的临界情况,如果是if(x>0) else就简单多了。

我认为简洁而精确的表达含义是最大的理由。



请问危险在何处?

你有没有发现,第一种表达方式很类似于switch语句,只是如果比较的值不是原始类型,所以才不能用switch语句而已。

另外还有人说到比较的性能问题,你们仔细分析分析,第一种方式比第二种方式不多一次比较次数,无论有多少个分支。
38 楼 pioneer21th 2007-05-10  
忘了几年前怎么受的第一种方式的影响,可以说是根深蒂固,我的代码里面几乎不出现else分句,所以到现在我都觉得用第二种方式的人很落后,看来我太想当然了呵呵,习惯第二种的人也还是不少的。
37 楼 Godlikeme 2007-05-10  
jkit 写道
pioneer21th 写道
所以请问大家第一种写法出自哪里?叫什么名字?你们经常用第一种吗?


出自Java编码规范,名字叫“恶例”,从来不用。


查过编码规范,不知 “恶例” 从何而来。

36 楼 it_weigang 2007-05-10  
强烈建议用第二种写法
35 楼 clamp 2007-05-10  
两段程序的逻辑其实是不等价的

1、在第一种写法中,如果第一个判断中的doSomething改变了status的值,那么第二个判断中的doSomething依然会被执行
事实上,对于单一变量的不同取值来选择分支的方式,我们的规范中是要求写成case语句的,这是一个很清晰的逻辑,也比较容易扩展。
而对于不同的组合条件形式的判断,是要非常谨慎的使用if语句的。


2、在一些校验页面输入是否合法的业务逻辑中,也有类似的情况。第一类写法可以判断出每一个不合法输入,第二类写法则只判断第一个不合法输入,选择哪个取决于页面交互设计的理念。
34 楼 jkit 2007-05-09  
pioneer21th 写道
所以请问大家第一种写法出自哪里?叫什么名字?你们经常用第一种吗?


出自Java编码规范,名字叫“恶例”,从来不用。
33 楼 jinlibing 2007-05-09  
支持第二种
32 楼 Godlikeme 2007-05-09  
逻辑判断对性能有影响,这也能想出来。
thinking in java中有一些基本操作的代价,
31 楼 xly_971223 2007-05-08  
dovecat 写道
...我不太赞成用第一种写法,
不记得是在哪里看到的了.

if
if
if
这样一条条的判断对性能有影响,当然你可以忽略不计,除非很大的循环.

if
else if
else if
则只命中一个条件,其余的if 条件jvm都会跳过.

对性能有影响
你测试一下for 循环楼主的代码100万次试试 估计用不了一秒
30 楼 lordhong 2007-05-08  
同上同上上。。。第一种表达有歧义。。。
29 楼 抛出异常的爱 2007-05-08  
同上
代码要会说话才是好代码。
28 楼 LucasLee 2007-05-08  
我认为一般情况下,第一种方式是比较危险的。
如果你想表达的就是if..else if..else这样的意义的话,最好用第二种,这样的无论性能还是可读性都很好,意义表达很精确。
用第一种方式,虽然能少些几个字,但是:
每个if都要独立的判断,为了达到if else的效果,需要保证表达式是互斥的,楼主的例子简单,如果是if(x>0),if(x<0),的情况,就要注意x==0的临界情况,如果是if(x>0) else就简单多了。

我认为简洁而精确的表达含义是最大的理由。
27 楼 janh 2007-05-08  
喜欢第1种,结构简单,各个if之间互不干扰,添加或减少一个方便。
26 楼 fhjxp 2007-05-08  
zelsa 写道
个人用第二种,可读性比较强,至少一看就知道这是一组的。

同感
25 楼 Godlikeme 2007-05-08  
综合了重构和设计模式两本书,还是喜欢看原汁原味的。
24 楼 coolwangyu 2007-05-08  
也可以看看 《重构与模式》 :第7章 简化

这本书不错

相关推荐

    滤镜名称:抽出滤镜

    这种分层处理的方式使得即使是最复杂的图像也能被精确地分离出来。 二、使用步骤 1. 打开图像:在Photoshop中打开包含你要提取的对象的图片。 2. 应用滤镜:选择"滤镜"菜单,然后找到"抽出"选项并点击。 3. 边缘...

    Chatgpt的本质是什么?人工智能是否会取代人类?

    说简单点,就是你投喂了什么,他就生产什么,都是训练出来的。 你认为使用聊天GPT很神奇,但它并不神秘。这种人工智能的本质是什么?就是用算法模拟人类的思维方式,给出一个问题的答案。据业内专业人士介绍,这个...

    java课后答案[参考].pdf

    * 什么叫方法重载?:方法重载是多态性的一种,是指一个类中可以有多个方法具有相同的名字,但是这些方法的参数必须不同或者参数的个数不同,或者参数的类型不同。 * 构造方法可以重载吗?:可以。 * 为什么类方法不...

    你必须知道的495个C语言问题

    2.4 在C语言中用什么方法实现抽象数据类型最好? *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明...

    中文人名自动识别的一种有效方法

    ### 中文人名自动识别的有效方法 #### 一、引言 中文信息处理技术发展至今已有数十年的历史,但仍存在不少未解决的技术难题。其中,中文姓名自动识别问题尤为突出,因为它不仅涉及到基础的文本处理技术,还直接...

    统计方法来识别中文姓名

    - **姓氏驱动策略**: 利用中文姓名“姓氏+名字”的特点,一些方法采取“姓氏驱动”的策略,即在扫描文本时遇到姓氏用字才触发人名的候选或识别。然而,这种方法无法识别非标准形式的姓名。 - **规则匹配**: 文献中...

    深度学习模型的藏文人名识别方法.pdf

    【藏文人名识别方法】藏文人名识别是自然语言处理中的一个重要任务,它涉及到对藏文中的人名实体进行定位和分类。由于藏文的独特性质,如缺乏像英文大写字母那样的边界特征,也没有汉文姓氏和名字的明显区分,识别...

    电子功用-将电视节目中所取名字改为观众要求的名字的系统和方法

    在电子功用领域,本文将深入探讨一种创新的系统和方法,该系统允许电视节目根据观众的要求实时更改节目中出现的名字。这种技术的引入不仅提升了观众的互动体验,还为电视制作带来了全新的可能性。以下是对这一独特...

    电信设备-手机向“短信名字”发送短信的方法.zip

    这种“短信名字”通常是联系人在手机通讯录中的别名或昵称,使得用户在发送短信时可以快速识别和选择接收方。 首先,我们来理解一下“短信名字”的概念。在手机通讯录中,每个联系人都有一个唯一的手机号码,但为了...

    《你必须知道的495个C语言问题》

    2.4 在C语言中用什么方法实现抽象数据类型最好? 22 *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 23 2.7 我...

    网络游戏-一种能叫出被拍摄者名字的网络摄像机.zip

    这种摄像机通常配备有面部识别功能,能够通过分析捕获的视频图像来识别并呼叫出被拍摄者的名字。在现代科技中,这种技术的应用不仅限于家用监控,也可能在网络游戏、虚拟社交等领域有所应用。 首先,我们来探讨一下...

    电信设备-利用“短信名字”代替数字号码的短信发送方法.zip

    这种方法使得用户可以更直观、更容易地识别发送和接收短信的对象,尤其是在联系人名单庞大或频繁与特定组织、企业交互时,更加便捷。 “短信名字”实际上是一种基于通讯录或服务提供商提供的功能,它允许用户为联系...

    Java 实现文章汉字关键词(违禁词)识别

    但这种方法效率较低,不适用于大量文本的处理。 2. **正则表达式**:Java的Pattern和Matcher类支持正则表达式的匹配,可以用来编写复杂的匹配规则,如匹配多个关键词或词组。但是,正则表达式在处理大量数据时也会...

    WIFI无线网用户名字怎么改成中文?.docx

    在现代家庭和办公室环境中,Wi-Fi 无线网络已经成为不可或缺的一部分。有时,为了便于识别或个性化,用户可能希望将 ...通过这种方法,你可以让家里的 Wi-Fi 更具个性,也能方便家人或客人更容易找到并连接到你的网络。

    java 面试题

    是否可以从一个static方法内部发出对非static方法的调用? 不可以。静态方法只能访问静态成员变量和调用静态方法,因为静态方法是在类加载时就初始化好的,而对象可能还未创建。 #### 14\. Integer与int的区别 -...

    PHP 面向对象技术(全面讲解).txt

    上面就是一个类的声明,从属性和方法上声明出来的一个类,但是成员属性最好在声明的时候 不要给初始的值,因为我们做的人这个类是一个描述信息,将来用它实例化对象,比如实例化出来 10 个人对象,那么这10 个人, ...

    命名实体识别(Standford)

    对于这种任务,需要从新闻文章中提取关键信息,如航空公司名称、票价上调幅度、公告日期等。例如: &gt; “鉴于燃油价格高企,联合航空周五宣布,将对飞往某些城市的航班票价上调6美元往返。美国航空公司,即AMR公司的...

    在电脑在电脑右下角显示你的名字

    通过在电脑右下角显示名字,用户可以轻松地识别自己的设备,尤其是在共享或公共空间中,这种个性化设置显得尤为重要。 #### 2. **操作步骤详解** 要实现在电脑右下角显示名字,我们需要遵循以下步骤: - 首先,...

    微软为什么把windows 7系统叫为windows 7呢?.docx

    Windows 7这个名字简洁明了,容易记忆,有助于品牌识别和消费者的接受度。 总的来说,Windows 7的命名策略反映了微软在技术和市场之间寻找平衡的努力。他们希望新版本能够继承Vista的技术成果,同时通过一个简单...

Global site tag (gtag.js) - Google Analytics