if-else嵌套过多时的优化方案

//if-else嵌套过多时的优化方案

在垒代码的时候经常会遇到 if-else 的嵌套判断,就是下一个判断依赖于上一个判断的结果,其基本的表现形式为
if(){//first judge
if(){//second
//do something
}else{
if(){//third
//do something
}else{
//do something
}
}
}else{
//do something
}

当嵌套的个数不是太多的时候,看上去也不是太乱,顺着每个判断写下来也不会太困难,
但是当嵌套个数太多的时候依然依照上面的写法来写的话,就会感觉很吃力、思绪很乱。
所以我想要优化一下代码。

思考的结果如下:
1.函数化
2.将步骤判断和每个步骤要做的事情分开

所以有了两个函数:
function getStep(){//得到步骤,返回为步骤
var step = 0 ;
return step ;
}
function gotoStep(step){}//根据不同步骤来做不同的事情

假如我们有5个判断条件 judgement1,judgement2,judgement3,judgement4,judgement5,
条件相互依赖,即当判断 judgement1之后根据它的判断结果再来判断judgement2
最后根据这五个判断条件的真假来得到步骤

所以完成第一个函数
function getStep(){//得到步骤,返回为步骤
if(judgement1){//如果judgement1为true则进行下一步判断,否则直接返回step
if(judgement2){
if(judgement3){
if(judgement4){
if(judgement5){
return 6;
}else{
return 5;
}
}else{
return 4;
}
}else{
return 3;
}
}else{
return 1;
}
}else{
return 0;
}
}

然后再完成第二个函数
function gotoStep(step){
switch(step){
case 1://doSomething
break;
case 2://doSomething
break;
case 3://doSomething
break;
case 4://doSomething
break;
case 5://doSomething
break;
case 6://doSomething
break;
}
}

如此调用两个函数 gotoStep(getStep()) 即可;
但是第一个函数的只是步骤清晰了起来,看上去还是比较繁琐,在与同时讨论之后,
想到递归调用方法来改写第一个得到step的函数
具体步骤如下
//将判断条件依照先后顺序写进一个数组
var judgement = [
judgement1,
judgement2,
judgement3,
judgement4,
judgement5,
];

var step = 0; //设置第一步

//递归函数
function getStep()
{
if(step==6){ return ;}else{
if (judgement[step]){
step++;
getStep();
}else{
return ;
}
}
}
//执行递归函数之后执行gotoStep();
getStep();
gotoStep(step);

ps:小小见解,希望大神给出更简单的方案

时间: 2024-09-30 19:05:53

if-else嵌套过多时的优化方案的相关文章

Foreach嵌套Foreach速度慢优化方案

有时候这样的效率还可以,但是只要牵涉到操作数据库,那就GAMEOVER.. 最近在维护项目,一个Foreach循环,4分半才能出来结果. 代码: foreach ($content as $key => $val) { $user = $userModel->where(array('username'=>$val))->Field('id,username')->find(); if ($user) { //查找群里是否存在 if(!$ck_group_userModel-

web前端优化方案(Yahoo)

目录(分7类,共35条): [内容]尽量减少HTTP请求数    [服务器]使用CDN(Content Delivery Network)    [服务器]添上Expires或者Cache-Control HTTP头    [服务器]Gzip组件    [css]把样式表放在顶部    [js]把脚本放在底部    [css]避免使用CSS表达式    [js, css]把JavaScript和CSS放到外面    [内容]减少DNS查找    [js, css]压缩JavaScript和CSS

mysql大内存高性能优化方案

mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看:key_buffer = 3840Mmax_allowed_packet = 16Mtable_cache = 1024sort_buffer_size = 32Mread_buffer_size = 32Mread_rnd_buffer_size = 32Mmyisam_sort_buffer_size

RecyclerView使用 及 滑动时加载图片优化方案

RecyclerView使用 及 滑动时加载图片优化方案 简述 本篇博文主要给大家分享关于RecyclerView控件的使用及通过继承RecyclerView来实现滑动时加载图片的优化方案,也同样能解决防止图片乱序的问题,之前有在网上有看到大神对Android中ListView异步加载图片乱序问题进行过分析,并深入剖析原理后分别给出了3种对应的解决方案:一 .使用findViewWithTag.二.使用弱引用关联.三.使用Volley框架提供的NetworkImageView. 看了之后思索了很

大型php网站性能和并发访问优化方案

网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢?本文为你提供一份大型php网站性能和并发访问优化方案. 一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.这几个解决思路在一定程度上意味着更大的投入.

百万级数据库优化方案数据库SQL优化大总结

一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注.描述.评论之类的可以设置为 NULL,其他的,最好不要使用NULL. 不要以为 NULL 不需要空间,

前端性能优化方案

前端开发性能优化方案 在JS中尽量减少闭包的使用(原因:闭包会产生不释放的栈内存) A:循环给元素做事件绑定的时候,尽可能的把后期需要的信息(例如索引)存储到元素的自定义属性上,而不是创建闭包存储 B:可以在最外层形成一个闭包,把一些后续需要的公共信息进行存储,而不是每一个方法都创建闭包(例如单例模式) C:尽可能的手动释放不被占用的内存 ... 尽量合并CSS和JS文件(把需要引入的CSS合并为一个,JS也是合并为一个),原理是在减少HTTP请求次数,尽可能的把合并后的代码进行压缩,减小HTT

针对MySQL大表优化方案

详解MySQL大表优化方案 (1).字段 (2).索引 (3).规范查询SQL (4).存储引擎 (5).mysql配置参数优化 (6).mysql读写分离 (7).分区和分表 单表优化: 当单表的数据不是一直在暴增,不建议使用拆分,拆分会带来逻辑,部署,运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量 (1).字段 l 尽量使用TINYINT.SMALLINT

mysql 性能优化方案 (转)

网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一