`
pioneer21th
  • 浏览: 25740 次
  • 性别: 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可以重构成其他模式)
分享到:
评论
23 楼 lijie250 2007-05-08  
论情况而定,每个人有自己的风格,没必要去强求别人
但是我经常用第一种,是在简单的判断情况下
22 楼 coolwangyu 2007-05-08  
第二种写法虽然很符合逻辑,但是如果在每个if中都有return的特殊情形下,应该重构为第一种,这样结构更清晰。  当然,如果也可以选择case来使用。
如果,你们doSomething();  不同的话,比如doSomething11();doSomething22();doSomething33();
可以考虑用Strategy继续重构。    
21 楼 Godlikeme 2007-05-08  
1,2,3 magic number啊,
专门看了refactoring  conditional expressions一章,实在是太简单的情况,没有必要区分。
20 楼 yangke250 2007-05-08  
我被强制要求第二种!
19 楼 抛出异常的爱 2007-05-08  
你想想如果加3哪个好加就用哪种。。。。
18 楼 dovecat 2007-05-08  
...反正少用点这类的东东比较好.
17 楼 过儿oO 2007-05-08  
kdekid 写道
如果 status 是 primitive,为什么不用
switch (status) {
  case 1:
    doCase1(); break;
  case 2:
    doCase2(); break;
  default:
    doDefault();
}
return;

如果status不是primitive,可以考虑用对象+策略模式重构。


我一遇到判断条件多了就写这种,省不少代码,哈哈
16 楼 kdekid 2007-05-08  
如果 status 是 primitive,为什么不用
switch (status) {
  case 1:
    doCase1(); break;
  case 2:
    doCase2(); break;
  default:
    doDefault();
}
return;

如果status不是primitive,可以考虑用对象+策略模式重构。
15 楼 calmness 2007-05-08  
个人更倾向于第二种,不过和LZ写的有点出入
if (status == 1) {   
       doSomething();   
} else if (status == 2) {   
        doSomething();    
} else  doSomething();   
return;


第二种的表达更清晰些,像这样的问题最好是有个代码的规范最好。
14 楼 一衣带水 2007-05-08  
我大约记得在 测试驱动开发(实用指南) 一书里面的重构那一章有说到这一种说法的;习惯了用第一种
13 楼 过儿oO 2007-05-08  
一样的
但是这个编码格式简直。。
能不能好好调调,看着也清晰啊
12 楼 hgq0011 2007-05-08  
看个人的思维方式吧,有的人比较容易接受第一种,有的容易接收第二种,我似乎两种都写过。这种逻辑判断最好加上简单明了的注释,不然以后会难维护。
11 楼 zelsa 2007-05-08  
个人用第二种,可读性比较强,至少一看就知道这是一组的。
10 楼 温柔一刀 2007-05-08  
dovecat 写道
刚想起来,第二种其实就是短路法.


我喜欢第一种,第二种太啰唆了

但是不管用那种,遇到用这样代码的情况往往代码是需要改进的


9 楼 Qieqie 2007-05-08  

仅是输入参数验证、条件判断时,我使用-用法1:
if (event == null) {
    return;
    //or throw exception here, just like NullPointerException or IllegalArgumentException!
}
if (event.isExpired()) {
    return;
}
events.add(event);

策略/类别判断时,假如不使用switch,我使用-用法2:
if (event.getSource() == 1) {
    //put some statements, or call another method
    //not return statement here
}
else if (event.getSource == 2) {
    //put some statements, or call another method
    //not return statement here
}

用法3:
使用设计模式(策略配置+模式):
   略


------------------
怎么使用都没问题,你要书写人习惯,并保持良好的缩进对齐。
8 楼 抛出异常的爱 2007-05-08  
第一种扩展时比
第二种扩展时
限制多一点。。。
个人比较喜欢第二种。
7 楼 BIGN 2007-05-08  
还是让自己去接受别人吧
6 楼 pioneer21th 2007-05-08  
Qieqie 写道
有资深工程师吗,看看他对你们编码有什么规范没有?

能够统一的话不错,不统一也不妨碍
事情还多着了,不必死磕这一点,也不要说服别人


有几位都是有几年工作经验的工程师,我也有几年工作经验,只是他们几个在这个组呆很长时间了,我刚来几个月
5 楼 dovecat 2007-05-08  
刚想起来,第二种其实就是短路法.
4 楼 dovecat 2007-05-08  
...我不太赞成用第一种写法,
不记得是在哪里看到的了.

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

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

相关推荐

    滤镜名称:抽出滤镜

    这种分层处理的方式使得即使是最复杂的图像也能被精确地分离出来。 二、使用步骤 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)

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics