反for-if编程模式

【设计模式系列2】如何使用策略模式替换编程中大量的if判断 本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!MySQL50道高频面试题整理:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

这些年来,我看到过大量的反编程模式。我感觉应该向大家分享一些。

今天,我要介绍的是被我称作反for-if编程模式的反模式「如果感兴趣可以查看一下这篇文章:for 循环为何可恨?」,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。”

这是一个特殊的反for-case模式,其中所有的情况中只有一次会是null。

  1. for (int i = 0; i < 100; i++) {  
  2.   if (i == 42) { do_something(i); }  
  3. }  

这种情况可以简单的写成

  1. do_something(42);  

这个反for-if模式可以表现成各种各样的形式。比如:

  1. foreach (string filename in Directory.GetFiles("."))  
  2. {  
  3.     if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase))  
  4.     {  
  5.         return new StreamReader(filename);  
  6.     }  
  7. }  

它是在一个目录里遍历查找一个指定文件,如果找到了,就返回文件的数据流。这段代码的一种不是那么折腾的写法是

  1. if (File.Exists("desktop.ini"))  
  2. {  
  3.     return new StreamReader("desktop.ini");  
  4. }  

请注意,两个版本的代码片段具有相同的竞争条件:如果这个desktop.ini本来是存在的,但在你创建Stream­Reader之前被删掉了, 你就会得到一个File­Not­Found­Exception错误。

再举一个例子:

  1. foreach (object o in hashtable.Keys)  
  2. {  
  3.     if (o == "target"return hashtable["target"];  
  4. }  

等同于

  1. return hashtable["target"];  

我猜测这些家伙不喜欢在图书馆里通过书名找一本书,因为他们的做法是如此的繁琐:

他们来到图书馆里员面前说,“把你所有的书都给我,”然后他们拿着装满了上千本书的篮子,坐到墙角里自言自语:

“不是,这本书的书名不对”,

“不是,这本也不是”,

“标题还是不对。”

“这本书呢?”

”不是,也不是这本。“

”老天,我要这样一本一本翻到什么时候…“

参数估计Picard迭代在非线性常微分方程参数估计中的应用研究(Matlab代码实现) 内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键环节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。 立即下载

相关推荐

XYF.SHX

XYF.SHX

java for循环_正向遍历和向遍历

前言之前搜索面试题的时候,出现了一个题:一个ArrayList在循环过程中删除,会不会出问题,为什么?心里想的答案是肯定会有问题但是又不知道是为什么,在搜索到答案后,发现里面其实并不简单,所以专门写篇文章研究一下。for循环正向删除先看示例,再解析原因:public static void main(String[] args){List list = new ArrayList();list.a...

weixin_39898854的博客 4210

焊接变位机_1.rar

焊接变位机_1.rar

简单汇编之for循环

   今天继续简单汇编之for循环,先看c++源码:#include "stdafx.h"void test(int a,int b){ int c=1; for(int i=0;i<10;i++) { c=c+a+b+i; } printf("%d/n",c);}int main(int argc, char* argv[]){ t

收破烂的 2894

汇编FOR 循环

tangyanzhi11110我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 收破烂的 目录视图摘要视图订阅 有奖征集活动系列——【HTML5游戏编程之旅】        博客导入工具      【限时优惠】第五届云计

tangyanzhi1111的专栏 789

写代码不用“if“行不行,曾经的if“ 运动

"if"运动早已结束,对"if"彻底抛弃显得很荒谬,但也不能对此全盘否定。"if"语句会影响阅读代码时流畅的思路,对代码中"if"的使用保持慎重的态度还是很有必要的。

程序员小麦的博客 1122

“把 if 往上提,for 往下放!”

简单说就是:少就是少,多就是多。实际上,你甚至不必按特定顺序处理实体,可以先对所有实体的某个字段统一处理,再处理其他字段,利用向量化或结构化数组技巧。,不如集中放在一个地方处理——比如放在主函数里统一决定怎么走,然后把具体的执行任务交给其他小函数去做,这样结构更清晰,出错的概率也更低。而且,如果所有的判断都集中在一个地方,程序员在看代码的时候也能更容易发现有没有重复判断,或者根本不会被执行的“死代码”!好的写法避免了在循环内部复判断条件,减少了循环里的分支,提高了性能,甚至可能解锁向量化优化?

CSDN资讯 1万+

shell编程的基础操作

shell编程 bash编程 创建shell脚本文件 使用vim(或其他文本编辑器)创建脚本文件(一般以.sh结尾) 在shell脚本中可以运行所有linux命令 shebang 在bash的脚本中开头第一行要写shebang 指定以bash运行该文件 #! /bin/bash 给shell脚本添加运行权限 chmod +x shell脚本文件名 运行shell脚本 输入shell脚本的文件路径...

qq_43287952的博客 219

别在再满屏的 if、else 了,试试策略模式,真香!!

你还在写满屏的 if/ else/ switch 之类的判断逻辑吗? 栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ switch,让你的代码更优雅。 什么是策略模式? 比如说对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。 策略模式结构图如下: 策略模式需要一个策略接口,不同的策略实现不同的实现类,在具体业务

Java技术栈,分享最主流的Java技术 3万+

shell编程6,if条件判断语句+for循环结构

在`if`语句中使用测试表达式时,需要特别注意格式。`[ ]`是`test`命令的一种符号链接形式,用于进行条件测试。 **参数:** - 文件测试:`-e`存在,`-d`目录,`-f`普通文件等。 - 字符串测试:`-z`空字符串,`-n`非空字符串,`==`相等,`!=`不等。 - 数字比较:`-eq`等于,`-ne`不等于,`-lt`小于,`-le`小于等于,`-gt`大于,`-ge`大于等于。

2202_75361164的博客 961

基于多尺度集成极限学习机回归(Matlab代码实现)

内容概要:本文详细介绍了一种基于多尺度集成极限学习机(Extreme Learning Machine, ELM)的回归方法,并提供了完整的Matlab代码实现。该方法通过构建多尺度特征表示与集成学习机制,有效提升了ELM在处理非线性、高维复杂数据时的预测精度与模型鲁棒性,特别适用于时间序列回归任务。文档不仅阐述了算法的核心原理与技术流程,还系统展示了其在风电功率预测等工程场景中的应用潜力。同时,文中附带了丰富的科研仿真案例集合,涵盖智能优化算法、深度学习、信号处理、电力系统调度等多个前沿方向,体现了多学科交叉融合的技术优势与实践价值。; 适合人群:具备一定Matlab编程能力,从事科学研究或工程应用的研究生、科研人员及工程技术开发者,尤其适合专注于机器学习、智能算法优化、新能源预测与电力系统建模等相关领域的专业人员。; 使用场景及目标:①用于风电、光伏、负荷等时间序列数据的高精度回归预测任务;②为科研工作者提供可复现的多尺度集成ELM模型代码框架,支持快速算法验证与二次开发;③满足实际工程项目中对高效建模、实时预测与智能决策的技术需求。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解多尺度特征构造与集成策略的设计思想,同时可参考文档中其他相关算法案例进行横向比较与综合应用,以提升整体科研创新能力。

精密钟表配件叉片插针组装机 -原创设计.rar

精密钟表配件叉片插针组装机 -原创设计.rar

精密制造基于桥式三坐标的深孔同轴度测量:半导体流体控制阀PTFE阀体形位公差定量检测方案

内容概要:本文针对高精密制造中深孔内部特征难以精确定量测量的技术瓶颈,提出了一套基于中图仪器Mars Classic 10128桥式三坐标测量机的解决方案,重点解决长径比大于5:1的PTFE四氟阀体深孔同轴度与圆柱度测量难题。通过采用自主研发的深孔加长测针组件与CP500S扫描测头,克服了传统接触式测针刚性不足和光学设备视场遮挡的问题,实现了对深孔内部形貌的连续扫描与三维拓扑建模,输出精度可达≤0.025mm,建立了可追溯、可量化的测量标准流程。; 适合人群:从事半导体流体控制阀、高精密PTFE阀体等零部件设计、制造与质量检测的工程技术人员及测试管理人员,具备一定几何公差与三坐标测量基础知识的专业人员; 使用场景及目标:①解决“影像仪测不到深孔内部”或“深孔长径比大于5怎么测”的实际工程问题;②实现对深孔同轴度、圆柱度等形位公差的定量评价,替代传统通止规定性判断;③为工艺优化、刀具补偿和质量追溯提供精准数据支持; 阅读建议:此资源作为技术应用指南,兼具设备选型参考与测量方法指导价值,建议结合实际检测案例对照操作,并联系中图仪器技术中心获取实测验证支持。

上一篇: 为什么 jdk 中把 String 类设计成 final
下一篇: 一个合格的程序员应该读过哪些书
迷渡
迷渡 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄19年 2399粉丝 124原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值