为什么写函数:void?

时间:2011-02-01 01:26:00

标签: actionscript-3

我养成了写作的习惯:

function functionName():void
{

}

但是,如果我的函数没有返回类型(“:void”),我注意到如果我写的话我的函数会起作用:

function functionName()
{

}

...而不指定返回类型。为什么将返回类型显示为好的形式为:void?

4 个答案:

答案 0 :(得分:5)

因为它遵循严格使用数据类型,如果有:void返回类型,编译器可以警告非void返回。 (虽然标准编译器没有。)

没有它,函数声明在语义上是不明确的。

(编辑:更新以便澄清,代码是让我们人类能够阅读,如果可读性和语义丰富性不是那么重要,我们都会使用翻转开关进行二进制编码。)

答案 1 :(得分:4)

它的长短是Flash中的每个对象都有一个数据类型。这可以是本机数据类型,如“String”或“Number”或“Array”或“int”,也可以是自定义数据类型,如“MyCustomClass”或“ICustomInterface”。

如果Flash知道对象的数据类型,它可以更快地处理它,因为它确切地知道对象具有或没有的方法和属性。这就是为什么,例如,你可以比迭代数组更快地迭代Vector - 一个Vector强制每个元素都是相同的类型,这意味着运行时不必坐在那里并键入 - 检查Vector中的每个项目。例如,它只知道向量中的每个项都实现了IWhatever接口,而这就是它所关心的。

所以,这就是:void进来的地方。在AS3中,函数也是对象。函数可以返回任何内容 - 因此您为函数指定一个类型声明,以告诉Flash Player当从该函数返回一个对象时,它是一个特定类型。

还有另一个原因,上面已经提到了。声明返回类型时,您的函数是类型安全的。如果你声明:int并尝试返回一个String,你将收到一个错误。这很好 - 该错误告诉您代码的行为不符合您的预期。

当我们声明函数为:void时,那么我们告诉flash的是这个函数不会返回。如果该函数应该发生任何返回,它将抛出一个错误。

我希望有所帮助! :)

答案 2 :(得分:0)

在前者中,这会导致错误:

var expectedValue:String = functionName();

而在后者中,上述内容将不会被检测到,而是可能导致运行时错误(可能更难找到并修复)。

即。静态类型可以帮助您帮助编译器帮助您在代码中找到错误。

答案 3 :(得分:-3)

这不是“写好的形式:无效”这只是一种来自C语言的做法,其中函数必须始终返回一个类型。

某些语言,如Pascal不需要该定义(void)但是,在Pascal中,无返回函数称为“过程”。例如:

procedure sayHello();
begin
  writeln("Hello, from pascal!");
end;

function addTogether(a, b: integer);
begin
  Result:=a+b;
end;

编辑:像PHP这样的语言也没有指定要返回的内容,在这种情况下,默认值是(奇迹奇迹......)null。批评者认为PHP没有类型系统,因此可能不需要完整的功能签名。我会给你一个观点,但问题仍然存在,没有任何返回类型容易被认为不期望一个或null的值。