ActionScript - 变量声明的区别

时间:2015-02-10 14:24:24

标签: actionscript-3

有什么区别:

var arr3 = new Vector.<int>(6);

var arr3:Vector.<int> = new Vector.<int>(6);

谢谢!

4 个答案:

答案 0 :(得分:1)

声明变量类型与否之间的区别。虽然在AS3中声明类型是可选的,但最佳做法是始终声明类型。

对你的代码的影响是,如果你声明一个类型,它只会编译并运行,如果该类型的值被赋值给变量,并且它将始终被严格地视为该类型的对象而没有任何东西其他。这被称为“类型安全”。如果你没有声明一个类型,你可以为该变量分配任何内容,并将代码编写为任何类型的对象 - 这听起来很方便,但最终会使代码更加混乱,容易出错并容易出错。

另请注意,不声明类型相当于将其声明为“通配符”类型,如下所示:var arr3:*

以下是代码中无类型vs类型变量的示例:

var untyped:*;
var string:String;
var number:Number;
var integers:Vector.<int>;

untyped = 1; // ok
untyped = "hello"; // ok
untyped = new Vector.<int>(); // ok

string = 1; // compile error
string = "hello"; // ok
string = new Vector.<int>(); // compile error

number = 1; // ok
number = "hello"; // compile error
number = new Vector.<int>(); // compile error

integers = 1; // compile error
integers = "hello"; // compile error
integers = new Vector.<int>(); // ok

if (untyped == 1) // ok
if (untyped == "hello") // ok
if (untyped.fixed) // compiles ok, but throws runtime error if "fixed" not defined on non-dynamic object

if (string == 1) // compile error, invalid comparison
if (string == "hello") // ok
if (string.fixed) // compile error, "fixed" not a property of String

if (number == 1) // ok
if (number == "hello") // compile error, invalid comparison
if (number.fixed) // compile error, "fixed" not a property of Number

if (integers == 1) // compile error, invalid comparison
if (integers == "hello") // compile error, invalid comparison
if (integers.fixed) // ok

这些编译错误可以向您展示您(或其他开发人员)在难以找到SWF中的问题之前所犯的错误。例如,请考虑以下无类型代码:

var value = "hello";
if (value.x < 10) { }

该代码没有多大意义,但它会编译。然后,当它尝试执行if语句并且在x“hello”上找不到String时,您将遇到运行时错误。在现实生活中,你可能需要进行大量的狩猎才能弄清楚什么是错的,特别是如果这两条线彼此不是很接近的话。但是,如果程序员在变量上指定了一个类型,它将使代码更安全:

var value:Point;
if (value.x < 10) { }

在这种情况下,如果您尝试分配value = "hello",代码将无法编译。编译器还将验证xPoint类型的属性。如果不是,那么你也会遇到编译错误。它甚至知道x可以使用<进行比较,因为它是Number。这有助于及早发现错误。

除了让程序员更清楚地编写代码之外,它还使编写工具变得更加清晰 - 大多数创作工具都会为类型化对象提供更好的代码完成建议,因为它确切地知道了哪些属性和方法对象的类型有。

由于这些原因以及其他原因,您很少会发现不使用严格类型声明的AS3代码示例,并且大多数程序员(包括我)会建议您始终使用它们。

答案 1 :(得分:0)

使用第二个选项。在第一种情况下,您将收到警告消息:

Warning: Error code: 1008: variable 'arr3' has no type declaration.

答案 2 :(得分:0)

第一个变量是无类型的。如果声明一个变量但不声明其数据类型,则将应用默认数据类型*****,这实际上意味着该变量是无类型的。如果您也没有使用值初始化无类型变量,则其默认值为undefined。

第二个输入为Vector ..用Vector声明的变量。数据类型只能存储使用相同基类型int构造的Vector实例。例如,通过调用new Vector。()构造的Vector不能分配给用Vector声明的变量。数据类型。

答案 3 :(得分:-1)

每个人的好答案。但真正的答案还有很多。在情况1中,变量没有类型,在情况2中,变量具有类型。不同之处在于,在第二种情况下,编译器能够在代码中出现错误的情况下为您提供信息。在第一种情况下,如果代码出现问题,编译器可能会提供一些信息甚至根本没有信息。如果使用无类型变量(案例1),如果代码中有任何错误,则开发人员可以自行处理。您将成为寻找它们并尝试修复它们的人。在第二种情况下,编译器会告诉您哪里出现错误,并且很可能是出现错误的原因。