气味识别应用

有时,我们在代码库中可能会遇到一些巨大的if语句。 这些语句必须维护并一次又一次地更改相同的代码块。 在if语句检查变量是否属于某个值范围内的情况下,这也是常见的。

假设您有一个枚举

public enum FoodType {FRUIT,VEGETABLES,RED_MEAT,WHITE_MEAT,FISH,DIARY,CERIAL
}

而且您有一个功能可以提出一些建议

public String recommend(FoodType foodType) {if(foodType==FoodType.FISH||foodType==FoodType.RED_MEAT||foodType==FoodType.WHITE_MEAT) {//execute a procedure} else if(foodType==FoodType.FRUIT||foodType==FoodType.VEGETABLES) {//execute a procedure} else {//execute a procedure}}

如您所见,现在已做出决定。 该决定与碰巧属于特定人群的某些类型的食物有关。
鱼,红肉和白肉对那些偏爱蛋白质的用户有益,而水果和蔬菜更适合以纤维为基础的饮食。
在将来的情况下,可能会增加该枚举并添加更多的食物类型。 如果代码块必须更改。 同样,如果在其他文件中使用了这种复杂的if语句,则必须更改每个文件。 不仅您将拥有巨大的if块,而且还必须在每个文件上维护一个块,这可能容易出错。

为了避免这种情况,您可以将if语句的内容更改为一个函数。

package com.gkatzioura;import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;import static com.gkatzioura.FoodType.*;public class DietFilter {private static final Set FOODS_WITH_PROTEIN = Collections.unmodifiableSet(new HashSet(Arrays.asList(FISH,RED_MEAT,WHITE_MEAT)));private static final Set FOODS_WITH_FIBER = Collections.unmodifiableSet(new HashSet(Arrays.asList(FRUIT,VEGETABLES)));public static boolean proteinBased(FoodType foodType) {return FOODS_WITH_PROTEIN.contains(foodType);}public static boolean fiberBased(FoodType foodType) {return FOODS_WITH_FIBER.contains(foodType);}}

因此,我们没有在if语句中添加每种食物类型的案例,而是创建了一个函数来检查给定的参数是否属于特定组。

因此,您的if语句将变为此。

public String recommend(FoodType foodType) {if(DietFilter.proteinBased(foodType)) {//execute a procedure} else if(DietFilter.fiberBased(foodType)) {//execute a procedure} else {//execute a procedure}}

如果将更多食物类型添加到枚举中,则开发人员将只需更改集合的结构并添加其他食物类型。
这将比更改代码的多个部分容易得多,并且可读性更高。

翻译自: https://www.javacodegeeks.com/2018/07/fixing-if-smell.html

气味识别应用

气味识别应用_解决气味相关推荐

  1. HighNewTech:支付宝全球首发5G手机,四大逆天功能(防骗三折叠气味识别自由飞)!

    High&NewTech:支付宝全球首发5G手机,四大逆天功能(防骗&三折叠&气味识别&自由飞)! 导读       2019年4月1日,支付宝,今天重磅发布!旗下首款 ...

  2. 电脑不读u盘怎么解决_电脑无法识别U盘解决方法

    u盘是我们在日常办公中经常需要使用到的一个移动存储设备,但有些时候我们却会遇到电脑无法识别u盘的问题,该怎么办?这里笔者就给大家带来了关于解决电脑无法识别u盘的详细解决方法,希望对你有所帮助. 电脑无 ...

  3. win7无法识别u盘解决方法

    有部分win7系统用户发现自己的U盘插上去提示无法识别,重新拔插了之后也无法读取,在确定自己U盘没有问题的时候,那就是系统设置上的问题了,下面我们一起来看看解决方法吧. win7无法识别u盘解决方法: ...

  4. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

    usb无法识别怎么办? 随着计算机硬件飞速发展,外围设备日益增多,键盘.鼠标等早已为人所共知,数码相机.MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的.USB是一 ...

  5. java 不识别enum_Java enum关键字不识别的快速解决办法

    从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了. 我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择 ...

  6. phpstudy中php页面不识别php代码解决方法

    phpstudy中php页面不识别php代码解决方法 参考文章: (1)phpstudy中php页面不识别php代码解决方法 (2)https://www.cnblogs.com/dailinfu/p ...

  7. 安装centos后 启动mysqld显示mysqld: 未被识别的服务 解决方法

    安装centos后 启动mysqld显示mysqld: 未被识别的服务 解决方法 参考文章: (1)安装centos后 启动mysqld显示mysqld: 未被识别的服务 解决方法 (2)https: ...

  8. vue学习笔记(四)- cmd无法识别vue命令解决方法

    vue学习笔记(四)- cmd无法识别vue命令解决方法 参考文章: (1)vue学习笔记(四)- cmd无法识别vue命令解决方法 (2)https://www.cnblogs.com/suRimn ...

  9. 教你win10系统无法识别语音识别的解决方法

    win10语音识别功能给用户带来了方便,但有用户遇到了win10语音识别功能打不开的问题,怎么解决呢?就此问题,今天小编教你win10系统无法识别语音识别的解决方法吧. win10内置有语音识别功能, ...

最新文章

  1. 《术以载道——软件过程改进实践指南》—第1章1.1节对CMMI的基本认识
  2. pytorch基于卷积层通道剪枝的方法
  3. 转://Oracle 复合压缩索引场景及性能对比
  4. different behavior dialog popup display no
  5. centos 6.3 64bit 安装VMware workstation 9.1 64bit
  6. HTML代码 笔记 部分
  7. 【设计模式】-工厂模式->简单工厂模式(源码与类图解析)
  8. 线程执行完之后会释放吗_有人说,爬完黄山之后的第二件事就是去歙县徽州古城,你会去吗?...
  9. workman 搭建tcp服务器,和websocket互相通信
  10. Ceph 故障排查笔记 | 万字经验总结
  11. switch按钮文字切换
  12. 软件工程导论08-基于构件的软件开发
  13. java播放swf文件_Java-如何在应用程序中嵌入并执行swf文件?
  14. 20201214c列出最简真分数序列
  15. 小程序.silk转MP3格式
  16. 好嗨游戏:游戏界的《千与千寻》,7年等待,游戏禅师陈星汉新作《Sky光遇》登录App Store
  17. BCG库的一个bug
  18. 编程中保护眼睛的颜色
  19. 跟着omnipeek学802.11之Omnipeek无线空中抓包入门
  20. 欧几里得算法、扩展欧几里得算法(特解、应用、通解)

热门文章

  1. CodeForces 1517G Starry Night Camping(网络流最小割)
  2. AtCoder4515 [AGC030F] Permutation and Minimum(dp)
  3. YBTOJ:比赛得分(期望)
  4. AT3957-[AGC023F]01 on Tree【贪心,堆】
  5. P4151-[WC2011]最大XOR和路径【线性基】
  6. P6046-纯粹容器【数学期望,组合数】
  7. P3203-[HNOI2010]弹飞绵羊【分块】
  8. HDU6736 F.Forest Program(dfs找环)
  9. 【DP】【递归】分离与合体
  10. Full_of_Boys训练2总结