- 浏览: 127508 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (145)
- java (145)
- Java网络编程 (1)
- SWT 文本框Text通过GC重绘改变边框颜色 (1)
- tomcat部署web工程的两种方法 (1)
- JAX-RS 从傻逼到牛叉 1:REST 基础知识 (1)
- FreyjaJdbcTemplate 大致上完工了,想请人重构。。 (1)
- 开始认识自己 (1)
- 设计模式-Abstract Factory 模式 (1)
- 数据库中主键的设计原则 (1)
- JNI中jstring类型与c语言中的字符串的转换 (1)
- mac环境变量 (1)
- STC单片机ADC转换的例子 (1)
- myeclipse 8下安装Ibator . (1)
- OSGI与Android结合 (1)
- CSDN BLOG EXPERT (1)
- Java中网络操作的开源库CommonsNet (1)
- Apache License Version 2.0 英文内容及中文翻译 (1)
- JTest (1)
- GeoCon 用C#编写的开源的地理信息数据转换工具 (1)
- ERP简易教程 (1)
- 提高站点在搜索引擎上的排名 (1)
- Wifi (1)
- 腾讯Q+开放平台,相信又是一次成功的模仿 (1)
- C#坦克大战网络版代码 (1)
- Problem16 (1)
- Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较) (1)
- ava框架数据库连接池比较(c3p0 (1)
- dbcp和proxool)bonecp (1)
- 继续向成熟男人靠拢 (1)
- Qt4.7中 默认的构造函数 (1)
- xml CDATA (1)
- 只针对中英文混合分词的中文分词器 (1)
- 典型相关分析及其适用范围和spss操作(转) (1)
- llvm (1)
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access (1)
最新评论
-
xm3530:
什么鬼?都没法看,发出来干嘛
Android中利用App实现消息推送机制的代码实例 -
lvtenglongxiaohei:
太经典了!
学习一下!
ERP简易教程 -
lvtenglongxiaohei:
<br> 一天中午,丈 ...
ERP简易教程 -
hzw2312:
加油~~~!!!
开始认识自己 -
123048591:
显示乱码
tomcat部署web工程的两种方法
一说到判断,大家一定会想if-else呗,这个有啥的。可就是我们经常用的if-else给我们的程序带来了,繁琐的结构,晦涩的代码,凌乱的组织。我经常看到,完全看不懂的判断,在哪里疯狂猜测,这个是要干什么,有的时候甚至我要找到我需要调试的的一个分支,需要用去好长时间。到底判断语句怎么了,我想通过一个例子讨论一下判断怎么写才好:
判断应该是在程序中经常使用的,分支交交叉叉,当条件复杂,情况凌乱的时候,我们的判断也呈现了,恐怖的繁琐,应该怎么做,其实我也做了一些思考,下面就用一个例子,一步步探讨一下应该怎么写判断语句。
这是一段自动化测试执行的时候,判断弹出窗口,之后进行相应处理的代码,我想在遇到这样的情况,很多人都会选用跟我一样的方式进行处理。这样一个代码不知道真是让人不知道从何看起,就好像一团乱麻。有的人,会第一个提出来,说,嗯用switch的语句,比if-else好看,你这样应该用switch;稍等,这这里面判断用的是index()判断字符串是否包含一个字符串,switch是判断相等,这样做不行,也许可以合并if条件。那代码就化简成这个样子了:
这样吧判断移出来,看着好多了,但是我们还是发现,类似这样的判断 “msg.index("打印") || msg.index("对不起") || msg.index("错误信息") || msg.index("错误信息")”看起来还是很讨厌,而且我居然多出了三个函数(前往别说把三个函数判断简单合并起来形成一个函数,那样不是退回去了吗?)。我们还可以化简,其实我们发现函数一直都是在判断是否含有相应的操作,只是判断的内容不同,那也许可以进行这样的合并:
这样化简了好多,也看到这里也是用了swtich,我们可以清晰地看到哪些字段,是应该做哪种操作的。从头到尾,是把弹出窗口分类出三类,但是,是否有会有特殊情况,是否有特殊情况,就要加一类啊?似乎维护性还不是很好,还可以继续优化,那么继续:
判断应该是在程序中经常使用的,分支交交叉叉,当条件复杂,情况凌乱的时候,我们的判断也呈现了,恐怖的繁琐,应该怎么做,其实我也做了一些思考,下面就用一个例子,一步步探讨一下应该怎么写判断语句。
if pmd.text_field(:name,"msgholder").exist? msg=pmd.text_field(:name,"msgholder").text @log.info("弹出modal_dialg窗口信息如下:[#{msg}],标题:[#{p_title}]") if msg.index("是否缴费") pmd.button(:id,"btnyes").click elsif msg.index("检查通过,是否继续") pmd.button(:id,"btnyes").click elsif msg.index("用户目前积分") pmd.button(:id,"btnyes").click elsif msg.index("打印") pmd.button(:id,"btnno").click elsif msg.index("对不起") @log.warn("弹出异常窗口窗口[#{msg}],标题:[#{p_title}]") #pmd.button(:id,"btnok").click raise "出现异常窗口,提示信息如下:#{msg}" elsif msg.index("错误信息") @log.warn("弹出异常窗口窗口[#{msg}],标题:[#{p_title}]") #pmd.button(:id,"btnok").click raise "出现异常窗口,提示信息如下:#{msg}" elsif msg.index("检查不通过:当前用户不是正常在网用户err!!!") @log.warn("弹出异常窗口窗口[#{msg}],标题:[#{p_title}]") #pmd.button(:id,"btnok").click raise "出现异常窗口,提示信息如下:#{msg}" elsif msg.index("确定要提交") pmd.button(:id,"btnyes").click elsif msg.index("业务受理完成") pmd.button(:id,"btnok").click elsif msg.index("操作成功") pmd.button(:id,"btnok").click else @log.warn("不存在弹出modal_dialg窗口的默认处理方式:[#{msg}],标题:[#{p_title}]") if pmd.button(:id,"bunok").exists? pmd.button(:id,"bunok").click elsif pmd.button(:id,"btnyes").exists? pmd.button(:id,"btnyes").click elsif pmd.button(:id,"btnno").exists? pmd.button(:id,"btnno").click end endend
这是一段自动化测试执行的时候,判断弹出窗口,之后进行相应处理的代码,我想在遇到这样的情况,很多人都会选用跟我一样的方式进行处理。这样一个代码不知道真是让人不知道从何看起,就好像一团乱麻。有的人,会第一个提出来,说,嗯用switch的语句,比if-else好看,你这样应该用switch;稍等,这这里面判断用的是index()判断字符串是否包含一个字符串,switch是判断相等,这样做不行,也许可以合并if条件。那代码就化简成这个样子了:
if pmd.text_field(:name,"msgholder").exist? msg=pmd.text_field(:name,"msgholder").text @log.info("弹出modal_dialg窗口信息如下:[#{msg}],标题:[#{p_title}]") if msg.index("是否缴费") || msg.index("检查通过,是否继续") || msg.index("用户目前积分") || msg.index("确定要提交") pmd.button(:id,"btnyes").click elsif msg.index("打印") || msg.index("对不起") || msg.index("错误信息") || msg.index("错误信息") pmd.button(:id,"btnno").click elsif msg.index("业务受理完成") || msg.index("操作成功") pmd.button(:id,"btnok").click else @log.warn("不存在弹出modal_dialg窗口的默认处理方式:[#{msg}],标题:[#{p_title}]") if pmd.button(:id,"bunok").exists? pmd.button(:id,"bunok").click elsif pmd.button(:id,"btnyes").exists? pmd.button(:id,"btnyes").click elsif pmd.button(:id,"btnno").exists? pmd.button(:id,"btnno").click end endend恩,这样似乎简单了许多,就这样就大功告成了吗?请注意:这里的判断条件之长啊,看起来很不和谐,查询起来也有问题,怎么办啊?有的时候根本看不懂判断条件都判断了什么。关于各种判断条件过长的问题,也许可以定义一个函数去做处理,那就这样写
def ifbtnyes(msg) msg.index("是否缴费") || msg.index("检查通过,是否继续") || msg.index("用户目前积分") || msg.index("确定要提交")enddef ifbtnno(msg) msg.index("打印") || msg.index("对不起") || msg.index("错误信息") || msg.index("错误信息")enddef ifbtnok(msg) msg.index("业务受理完成") || msg.index("操作成功")endif pmd.text_field(:name,"msgholder").exist? msg=pmd.text_field(:name,"msgholder").text @log.info("弹出modal_dialg窗口信息如下:[#{msg}],标题:[#{p_title}]") if ifbtnyes(msg) pmd.button(:id,"btnyes").click elsif ifbtnno(msg) pmd.button(:id,"btnno").click elsif ifbtnok(msg) pmd.button(:id,"btnok").click else @log.warn("不存在弹出modal_dialg窗口的默认处理方式:[#{msg}],标题:[#{p_title}]") if pmd.button(:id,"bunok").exists? pmd.button(:id,"bunok").click elsif pmd.button(:id,"btnyes").exists? pmd.button(:id,"btnyes").click elsif pmd.button(:id,"btnno").exists? pmd.button(:id,"btnno").click end endend
这样吧判断移出来,看着好多了,但是我们还是发现,类似这样的判断 “msg.index("打印") || msg.index("对不起") || msg.index("错误信息") || msg.index("错误信息")”看起来还是很讨厌,而且我居然多出了三个函数(前往别说把三个函数判断简单合并起来形成一个函数,那样不是退回去了吗?)。我们还可以化简,其实我们发现函数一直都是在判断是否含有相应的操作,只是判断的内容不同,那也许可以进行这样的合并:
def getbtntype(msg) btnyes=["是否缴费","检查通过,是否继续","用户目前积分","确定要提交"] btnno=["打印","对不起","错误信息","错误信息"] btnok=["业务受理完成","操作成功"] btnyes.each do |b| if b.index(msg) return 1 end end btnno.each do |b| if b.index(msg) return 2 end end btnok.each do |b| if b.index(msg) return 3 end endendif pmd.text_field(:name,"msgholder").exist? msg=pmd.text_field(:name,"msgholder").text @log.info("弹出modal_dialg窗口信息如下:[#{msg}],标题:[#{p_title}]") case(getbtntype(msg)) when 1 pmd.button(:id,"btnyes").click when 2 pmd.button(:id,"btnno").click when 3 pmd.button(:id,"btnok").click default @log.warn("不存在弹出modal_dialg窗口的默认处理方式:[#{msg}],标题:[#{p_title}]") if pmd.button(:id,"bunok").exists? pmd.button(:id,"bunok").click elsif pmd.button(:id,"btnyes").exists? pmd.button(:id,"btnyes").click elsif pmd.button(:id,"btnno").exists? pmd.button(:id,"btnno").click end endend
这样化简了好多,也看到这里也是用了swtich,我们可以清晰地看到哪些字段,是应该做哪种操作的。从头到尾,是把弹出窗口分类出三类,但是,是否有会有特殊情况,是否有特殊情况,就要加一类啊?似乎维护性还不是很好,还可以继续优化,那么继续:
def getbtntype(msg) btns={["是否缴费","检查通过,是否继续","用户目前积分","确定要提交"]=>"pmd.button(:id,\"bunyes\").click", ["打印","对不起","错误信息","错误信息"]=>"pmd.button(:id,\"bunno\").click", ["业务受理完成","操作成功"]=>"pmd.button(:id,\"bunok\").click" } btns.each do |k,v| if(k.is_a?(array)) k.each do |item| if(msg.index(item)) return v end end else if msg.index(k) return v end end end return " if pmd.button(:id,\"bunok\").exists? pmd.button(:id,\"bunok\").click elsif pmd.button(:id,\"btnyes\").exists? pmd.button(:id,\"btnyes\").click elsif pmd.button(:id,\"btnno\").exists? pmd.button(:id,\"btnno\").click " endeval getbtntype(msg)经过一番,优化,现在已经把刚才复杂的函数化简成了,这个样子,从函数上看,非常清晰,如果再要增加相应的弹出窗口判断,也只要改那个hash对象就可以了。
发表评论
-
java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
2012-02-08 14:17 1058<div>Java数据库连接(JDBC)由 ... -
llvm
2012-02-07 16:29 880llvm ... -
典型相关分析及其适用范围和spss操作(转)
2012-02-07 15:43 1583看文章《科学学研 ... -
只针对中英文混合分词的中文分词器
2012-02-03 10:39 1013该版本说明 1、只针对中英文混合分词 需要一些中文和 ... -
xml CDATA
2012-02-03 08:45 1210<h2 style="font-si ... -
Qt4.7中 默认的构造函数
2012-02-01 09:14 1088<p><span style=&qu ... -
继续向成熟男人靠拢
2012-01-11 17:04 879转自徒儿的人人。 ... -
ava框架数据库连接池比较(c3p0,dbcp和proxool)bonecp
2012-01-11 14:13 1135<h1 style="text ... -
Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较)
2011-12-28 15:23 963<span style="font- ... -
Problem16
2011-12-28 12:53 668package com.shui.mu.yao.io. ... -
C#坦克大战网络版代码
2011-12-20 13:09 983简单C#坦克大战网络版代码 写完单机版 http ... -
腾讯Q+开放平台,相信又是一次成功的模仿
2011-12-20 10:44 861今天看到两则新 ... -
Wifi
2011-12-19 13:14 1086. Confirm if Wifi is On ... -
提高站点在搜索引擎上的排名
2011-12-19 12:04 937对于拥有网站的各位站长来说,都希望自己的站点能够在各种 ... -
ERP简易教程
2011-12-16 16:47 922注明:下面的帖子 ... -
GeoCon 用C#编写的开源的地理信息数据转换工具
2011-12-14 12:29 956<p class="MsoNorma ... -
JTest
2011-12-14 09:00 1029接到parasoft公司一位先生打来的电话,说下个月第 ... -
Apache License Version 2.0 英文内容及中文翻译
2011-12-13 12:59 2338</span> <p class= ... -
Java中网络操作的开源库CommonsNet
2011-12-13 12:39 817<p class="MsoNorma ... -
CSDN BLOG EXPERT
2011-12-13 08:59 1094<img src="http://p. ...
相关推荐
在MySQL数据库中,编写判断语句是数据处理和分析的关键环节。这有助于根据特定条件返回不同的结果,使得数据更加易读和理解。本文将详细总结三种在MySQL中编写判断语句的方法。 首先,我们来看**CASE函数**。CASE...
易语言判断语句+循环语句应用 学东西真的是欲速则不达,现在起我不在拿整例来研究,真正从0开始学习,并把学习过程写成例子来说明,我的口号是“教=学+练”,这次是判断+循环语句应用及我个人的理解,应该从最基本...
本教程主要介绍如何在TIA博途WINCC中使用VB脚本来实现IF THEN判断语句,从而进行条件控制。 首先,我们需要创建一个项目,并添加一个HMI界面。在项目中新建一个HMI变量表,包括两个整型变量`test1`和`test2`。这两...
判断语句 三目运算符代码
控件使用的是visual studio2010开发,对TextBox进行了改写,附带了验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,只需要配置下属性或者根据需求自定义验证事件即可,...
1. <!–[if !IE]><!–> 除IE外都可识别 <!–<![endif]–> 2. <!–[if IE]> 所有的IE可识别 <![endif]–> 3. <!–[if IE 5.0]> 只有IE5.0...[endif]–> 4....[endif]–> 5....[endif]–> 6....[endif]–> 7....
### WordPress模板中的PHP判断语句详解 ...本文将深入探讨WordPress模板...这些判断语句不仅可以让我们的模板更加智能和灵活,还能显著提升用户体验。希望本文能帮助读者更好地掌握这一技巧,并在未来的工作中灵活运用。
**VB判断语句详解** VB(Visual Basic)是微软公司推出的一种面向对象的、可视化编程工具,它简单易学,适合初学者入门。在VB编程中,判断语句是控制程序流程的重要组成部分,用于根据条件执行不同的代码块,实现...
本问题要求我们使用 case 语句设计一个 2 位较大数判断电路,并展示其真值表、程序、仿真程序、RTL 图以及仿真结果。下面将详细介绍这个设计过程。 首先,我们需要理解 2 位较大数判断电路的基本功能。电路有两个...
在JavaScript编程语言中,`for`循环和`if`判断语句是两种基本的控制流程结构,它们在编写逻辑和处理条件时起着至关重要的作用。让我们深入了解一下这两个概念。 **1. JavaScript `for`循环** `for`循环用于重复执行...
if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and、or和not连接,expr_true_suite是代码块,expression为true时执行,代码块如果只有一行,上面的整个条件语句便可全部写到一...
代码如下:/*If语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给变量 pnum number := #begin if pnum = 0 then dbms_...
一、if语句中的判断条件(nginx)介绍 1、正则表达式匹配: ==:等值比较; ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写; ~*:与指定正则表达式模式匹配时返回“真”,判断匹配...
该自定义控件利用visual studio2017开发,使用VB.NET语言对TextBox进行了改写,附带了验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,节省了对内容验证的时间。...
控件使用的是visual studio2010开发,对TextBox进行了改写,附带了验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,只需要配置下属性或者根据需求自定义验证事件即可,...
该控件使用的是visual studio2010开发,对TextBox进行了改写,附带了验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,节省了对内容验证的时间,下面为大家介绍下控件的...
该自定义控件利用visual studio2017开发,使用VB.NET语言对TextBox进行了改写,附带了验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,节省了对内容验证的时间。...
但要注意,过多的索引会影响写操作的性能,因此要平衡读写需求。 - 使用复合索引,当查询涉及多个字段时,将这些字段组合成一个索引可能更有效。 2. **避免全表扫描** - 尽量避免在WHERE子句中使用不等式或函数,...
在Linux Shell脚本编程中,内置判断语句是不可或缺的一部分,它们用于检查各种条件并根据结果执行相应的操作。这些判断语句通常与`test`命令或方括号`[` `]`结合使用,用于测试文件状态、数值比较、字符串比较等。在...