if语句是最基础最可塑的条件关键字,提供你的应用中大部分的条件控制语句。条件表达式在if 后面的括号中,如果表达式返回 true,那么语句块里的代码会被执行:
~~~
if ( 3 == 3 ) someVar = someValue;
// rest of application
~~~
如果多于一条待执行的语句,要使用花括号把代码围起来:
~~~
if ( 3 == 3 )
{
someVar = 1; someVar++;
}
// rest of application
~~~
if语句后面的行或者代码块只有在条件返回true的时候才被执行。你可以反转条件语句的值,通过提供一个否定条件操作符,或者否定整个表达式,通过符号 (!) 执行:
~~~
if ( 3 != 3 )
// do this...
~~~
前面的代码和这个代码作用相同:
~~~
if ( ! 3 == 3 )
// do this...
~~~
否定操作符改变条件表达式的返回值,所结果原来为true就返回false,原来是false就返回true 。它不会改变if语句的规则。但是,如果需要一个false结果的执行语句,可以使用 else 关键字,提供另一个执行逻辑。else 必须跟在if执行代码块之后:
~~~
if ( 3 == 3 )
// if true, execute this line
else
// otherwise, execute this line
~~~
可以嵌套if语句,所以可以在多个条件满足的时候执行代码:
~~~
if ( thatVar == thatValue )
{
if ( thisVar == thisValue )
{
// do code
}
}
~~~
嵌套的if 语句表示只有外部的 if 语句为ture 才会执行。可以在 if 语句中组合表达式,使用条件操作符。因此,可以重写这个例子:
~~~
if ( thatVar == thatValue & & thisVar == thisValue )
{
// do code
}
~~~
当使用这种方式组合语句,虚拟机仍然认为这是单独的来执行。意思是说,如果前两个表达式返回false,那么第二个表达式不会执行,所以任何数据修改在第二个表达式中都不会发生。例如:
~~~
var myInt = 3;
if ( 4 == 3 & & ++myInt == 4 )
{
// do code
}
trace( myInt );
~~~
这里,一个期望 myInt 等于 4,因为 前递增操作。但是,因为表达式 4==3 不成立,第二部分表达式不会被执行,所以 myInt 被输出值为 3 。
嵌套 if 语句 通常是优先选择的,虽然有时候它是必须的因为逻辑流程。然而,通过组合条件语句为一个单独的 if 语句,只有一个表达式执行了验证,不是两个。然而,这个增加是忽略的,不会影响你的决策。
当嵌套一个 if 语句在 else 块,实际上提供一个新的分支测试一个表达式的相等。
~~~
if ( myVar == 1 )
// do this...
else
if ( myVar == 2 )
// do this
else
if ( myVar == 3 )
// repeat as necessary ...
else
// if all else fails, do this
~~~
if 语句用这种方式可以嵌套任意深度,尽管他们没有必要用这种缩进方式。多数开发人员通常提供嵌套的 if 关键字 直接在 else 关键字之后,提供一个新的语句类型:
~~~
if ( myVar == 1 )
// do this...
else if ( myVar == 2 )
// do this...
else if ( myVar == 3 )
// repeat as necessary ...
else
// if all else fails, do this
~~~
就像你看到的,这使你的代码看起来整洁易读。最后的 else 块用在嵌套 if 语句格式的最后,如果所有else 都失败,意味着任何比较都没有达成,执行这里的语句。
整理if 语句可以使你的代码大大缩短,虽然这是你的自由。例如:
~~~
if ( 3 == 3 )
myVar++;
else
myVar--;
~~~
还可以更易读:
~~~
if ( 3 == 3 ) myVar++ else myVar--;
~~~
如果你看了最后的示例,可能注意到 else 关键字之前的表达式不能立即用分号结尾。这是为了帮助使整个 if 语句更易读,允许单行语句直接跟随在条件表达式之后。
- 本书目录
- 第一章:Haxe介绍
- 互联网开发的一个问题
- Haxe是什么,为什么产生
- Haxe编译工具
- Haxe语言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必须条件
- 本章摘要
- 第二章:安装、使用Haxe和Neko
- 安装Haxe
- 使用Haxe安装程序
- 在Windows上手动安装Haxe
- Linux上手动安装Haxe
- 安装Neko
- Windows上手动安装Neko
- 在Linux上安装Neko
- Hello world! 一式三份
- 编译你的第一个Haxe应用
- 你的程序如何编译
- HXML编译文件
- 编译到Neko
- 编译为JavaScript
- 程序结构
- 编译工具开关
- 本章摘要
- 第三章:基础知识学习
- Haxe层级结构
- 标准数据类型
- 变量
- 类型推断
- 常数变量
- 简单的值类型
- 浮点类型
- 整型
- 选择数值类型
- 布尔类型
- 字符串类型
- 抽象类型
- Void 和 Null
- 动态类型
- unknown类型
- 使用untyped绕过静态类型
- 注释代码
- 转换数据类型
- Haxe数组
- Array
- List
- Map
- Haxe中使用日期时间
- 创建一个时间对象
- Date组件
- DateTools类
- 操作数据
- 操作符
- Math类
- 使用String函数
- 本章摘要
- 第四章:信息流控制
- 数据存放之外
- 条件语句
- if语句
- switch语句
- 从条件语句返回值
- 循环
- while循环
- for循环
- 循环集合
- Break和Continue
- 函数
- 类的函数
- 局部函数
- Lambda类
- 本章摘要
- 第五章:深入面向对象编程
- 类和对象
- 实例字段
- 静态字段
- 理解继承
- Super
- 函数重载
- 构造器重载
- toString()
- 抽象类和抽象方法
- 静态字段,实例变量和继承
- 继承规则
- 使用接口
- 高级类和对象特性
- 类的实现
- 类型参数
- 匿名对象
- 实现动态
- Typedef
- 扩展
- 枚举
- 构造器参数
- 本章摘要
- 第六章:组织你的代码
- 编写可重用代码
- 使用包
- 声明一个包
- 隐式导入
- 显式导入
- 枚举和包
- 类型查找顺序
- 导入一个完整的包
- 导入库
- Haxe标准库
- Haxelib库
- 其他项目中的库
- 外部库
- 使用资源
- 文档化代码
- 离线文档
- 在线文档
- 单元测试
- haxe.unit包
- 编写测试
- 本章摘要
- 第七章:错误调试
- trace函数
- trace输出
- haxe的trace和ActionScript的trace
- 异常
- 异常处理
- CallStack和ExceptionStack
- 异常管理类
- 创建完全的异常处理类
- 异常类代码
- 本章摘要
- 第八章:跨平台工具
- XML
- XML剖析
- Haxe XML API
- 正则表达式
- EReg类
- 模式
- 定时器
- 延迟动作
- 队列动作
- MD5
- 本章摘要
- 第九章:使用Haxe构建网站
- Web开发介绍
- Web 服务器
- 使用Web服务器发布内容
- HTML速成课程
- Haxe和HTML的区别
- NekoTools Web Server
- Apache安装mod_neko
- Windows安装Apache和mod_neko
- Linux安装Apache和Mod_Neko
- 第一个Haxe网站
- 使用Neko作为网页Controller
- neko.Web类
- Neko作为前端控制器
- 本章摘要
- 第十章:使用模板进行分离式设计
- 什么是模板
- Template类
- Template语法
- 使用资产
- 何时在模板中使用代码
- 服务器端模板的Templo
- 安装Templo
- 使用Templo
- haxe.Template和mtwin.Templo表达式上的区别
- Attr表达式
- Raw表达式
- 逻辑表达式
- 循环表达式
- set, fill, 和 use表达式
- Templo中使用宏
- 手动编译模版
- 第十一章:执行服务端技巧
- 第十二章:使用Flash构建交互内容
- 第十三章:使用IDE
- 第十四章:通过JavaScript制作更多交互内容
- 第十五章:通过Haxe远程通信连接所学
- 第十六章:Haxe高级话题
- 第十七章:Neko开发桌面应用
- 第十八章:用SWHX开发桌面Flash
- 第十九章:多媒体和Neko
- 第二十章:使用C/C++扩展Haxe
- 附加部分