Chapter 3 使用ActionScript
在第二章中,我们介绍了ActionScript,但是我们能用它来做什么呢?你马上就会发现,相当多。
ActionScript是一种功能极其强大甚至需要花整本书来讲解的面向对象语言。这本书中,我们把焦点放在ActionScript的核心概念上,很显然在你开始进入更加强大的Flex的领域之前,你需要熟悉这些内容。这么说可能会使你对回到Flex感到紧张,但是掌握这些ActionScript的基础知识会使你前进得更快。 任何编程语言的一个基础概念就是注释,所以我们通过讲解Flex如何给支持代码添加文档开始我们的讨论。
3.1 注释
任何一种编程语言的一个基本的概念是能够在代码里添加解释某个应用原理的文档。你将会通过使用注释学会如何做这件事。
从实现的角度说,一条注释是一系列被Flex编译器忽略的被限定起来的文本。Flex的ActionScript语言支持两种主流的格式:对应特定代码的行注释和块样式的多行注释。
3.1.1 行注释
第一种注释类型是行注释,行注释通过两个斜线开始:
// one comment
var i:int;
var x:int; //another comment
正如你所见,注释可以单独一行或者和代码在同一行。使用行注释有一个限制:编译器从双斜线开始一直到当前行的结束来识别行注释。一个换行符意味着注释的结束以及程序代码的重新开始。
3.1.2 块注释
如果你想使用自由格式的更大块的文本,你可以使用多行注释。通过键入一个斜线和一个星号(/*)开始多行注释,并且通过键入一个星号和一个斜线结束(*/)。
/*
here is a chunk
of text
*/
给代码写注释有两个主要的目的:解释代码如何运行,帮助测试和调试。关于给代码添加注释,它不仅对于其他程序员来说有意义,并且有利于你自己跟踪已经完成了哪些工作。在调试方面,你可以在开发节点暂时性的注释代码来执行测试并进行诊断。
现在咱们转到变量。变量可以使我们获取和存储信息。
3.2 变量
变量是任何一种编程语言的基本构建基础。变量可以包含你使用的数据来保持跟踪信息,维护应用程序的状态,并且使用户可以管理数据。
尽管变量在各种编程语言都有变量,但是不同语言的实现方式却各不相同。ActionScript可能是和你目前熟悉的语言有较大的差别。ActionScript语言基于ECMAScript标准,这也是JavaScript语言实现的标准(尽管ActionScript实现的版本更新)。
3.2.1 变量名
变量有名称,正如你预料的那样,创建变量时需要遵循特定的规则。变量名只能包含字母、数字、下划线和美元符号。只要变量名不以数字开头,你可以使用任意上述字符的组合。
3.2.2 强类型
与JavaScript和CodeFusion不同,ActionScript使用强类型。这意味着当你声明某种类型的变量时,你必须给它赋予类型合适的变量值。看看下面的代码片段:
var myVar:Number;
myVar = “test”; //代码将出错
这段代码会报错,因为你试图将字符串赋给期望数值的变量。
3.2.3 静态和动态类型检查
Flex使用两种方式进行代码类型匹配检查,也就是众所周知的静态和动态类型检查。静态类型检查在编译器进行,编译器确保类型匹配的规则得到维护。从Java和C++转过来的程序员会比较适应这种方式。
ActionScript还可以执行动态类型检查。Flash Player在程序的执行期间通过动态类型检查来检查代码的类型。当然,对于这两种实现都有支持者和反对者。动态类型检查的一个好处是你可以快速构建应用的原型而不用去处理编译错误和警告。
默认情况下,在代码编译阶段使用的是静态模式。你可以在Project>Properties>Flex Compiler下面通过Enable Strict Type Checking选项来改变这个。
记住,即使你关闭静态类型检查,在执行阶段,Flash Player依然会执行类型检查,关闭静态类型检查只是在编译器跳过了这一步。
尽管避免编译器类型检查会免去不少麻烦,我还是建议你给自己留点悲伤把它开着吧。从长远来说,深入了解编译器到底在抱怨什么会使你学的更好。
创建一个变量实际上是创建一个类的实例,因此,让我们简要看看这是什么。
3.2.4 顶层类
变量实际上是类的实例,对于你这样的Java,C#,或者PHP使用者来说,这应该已经很熟悉了。对于CodeFusion使用者来说,你的CFCs类似于类。但是忽略你在这些领域的已有经验,有那么几点值得提一下。
一个类是一系列的方法(函数)与属性,类被组合进包里。
Flex 3 SDK有一些原始数据类型的概念这意味着默认情况下他们就是变量(你无需导入他们),由于他们是原始值,因此在使用它们时可以少花点功夫。
伴随着Flex 4中将这些原始数据类型转换成类并且被放置进所谓的顶层包中。由于默认情况下顶层包默认情况下会被加载进来,所以其中的所有类已经可用,从编码的角度上说,几乎没有不同。
顶层包中包含的部分类包括:
Array Boolean Class Date
int Number Object String
uint Vector XML XMLList
传统情况,大多数情况下你想创建一个类的实例,你需要遵循下面几行的一个模式:
import com.mypackage.MyClass;
var myVar:MyClass = new MyClass();
但是对于顶层包中的类,你不需要导入包,因为这一点默认情况下已经做了,并且他们中的一部分有一种创建实例的快捷方式。例如,尽管你可以通过下列方式创建字符串:
var myString:String = new String(“hello”);
你可以通过给字符串变量赋文本值来使用快捷方式创建字符串变量:
var myString:String = “hello”;
这里还有一些例子:
var myString:String = "hello";
var myInt:int = -32;
var myUint:uint = 32;
var myNumber:Number = 32.32;
var myXML:XML = <root><node></node></root>;
var myObj:Object = {x:1,y:2,z:3};
var myArray:Array = ["item1","item2","item3"];
var myBool:Boolean = false;
变量的事差不多结束了,最后需要提一下的是特殊数据类型。
3.2.5 特殊数据类型
特殊数据类型是那些保留字和值,这意味着如果你要用下面的值来创建变量,你会得到报错。表3.1是一个这些特殊数据类型及其描述的列表。
表3.1 特殊数据类型
数据类型 |
描述 |
* |
用来通知编译器你将在稍后设置数据类型 |
void |
用在函数声明中来表明函数不返回任何数据 |
undefined |
和void配合使用。void的值就是undefined。 |
null |
复杂数据类型和String用来表明这些变量目前没有关联的值 |
NaN |
不是数字。Number数据类型用来显示数值变量当前没被赋值 |
最后总结一下,ActionScript变量是大小写敏感的,你需要确认给变量的复制与他们的数据类型相匹配。ActionScript包含了一些日常要用而不需要导入的变量类型作为顶层类。
现在你知道创建变量,你将会经常使用它们集合。
未完待续......