跳转至内容

ActionScript 3.0/函数介绍

来自维基教科书,开放世界中的开放书籍
ActionScript 3.0 简介
变量和数据类型 函数 运算符

关键概念


  • 函数定义
  • 函数声明
  • 函数调用
  • 参数
  • 返回值
  • 命名函数
  • 调用者和被调用者
  • 变量中的函数

现在我们已经学习了所有运算符,我们可以进入下一部分:函数。

什么是函数?

[编辑 | 编辑源代码]

在数学中,函数由输入、过程和输出组成。例如,如果将 x = 3 输入到 f(x) = 2x 中,我们将得到输出 6。

在计算机中,函数是一组语句。当执行一个函数时,函数内部的所有语句都将被执行。函数可以有或没有输入,也可以有或没有输出。(当然,后一种说法不能用于电子表格函数,因为电子表格函数必须有输出。)

有几种类型的函数

  • 构造函数,正如我们之前所讨论的,初始化和实例化一个对象。
  • 实例方法是属于对象实例的方法。
  • 静态方法是属于类本身的方法,而不是属于单个对象。
  • 全局函数属于包。
  • 顶层函数是特殊的函数,可以在程序的任何地方访问。你无法创建自己的顶层函数。
  • 此外,一些函数只是存储在变量中。

我们将在下面的文本中讨论每种类型的函数。首先,我们需要学习如何构造和“调用”函数。

如何声明一个函数?

[编辑 | 编辑源代码]

如何声明一个没有输入或输出的函数?

[编辑 | 编辑源代码]

这是一个没有输出和输入的简单函数。看看代码,我们会一步一步地解释它

private var someNumber:Number = 5;
private function addOneToSomeNumber():void{
    someNumber++;
}

首先,第一条语句是一个简单的变量声明语句,我们之前已经学习过了。

第二行有各种元素

  • function 被添加到函数声明的开头,就像 var 被添加到变量声明的开头一样。
  • addOneToSomeNumber 是我们函数的名称。
  • 括号用于函数的输入。虽然这个函数不涉及输入,但我们仍然需要添加括号。
  • :void 部分用于函数的输出。通常,void 将被输出的数据类型替换。由于此函数不涉及输出,因此我们使用关键字 void 代替。
  • 左花括号标记着的开始。

第二行称为函数的签名。它包含有关函数的重要信息。

现在让我们触发或调用函数

public function Main():void{
     //...
     addOneToSomeNumber();
     //The value of someNumber is now 6.
     addOneToSomeNumber();
     //The value of someNumber is now 7.
}

如你所见,要调用一个函数,只需键入函数标识符,后面跟着一对括号。

如何声明和调用一个带有输入的函数?

[编辑 | 编辑源代码]

在编程中,函数的“字段”称为参数,通过参数传递的值称为参数。让我们修改我们的 addOneToSomeNumber 函数,以适应将任何数字添加到 someNumber。

private var someNumber:Number = 5;
private function addAnyNumberToSomeNumber(anyNumber:Number):Void{
    someNumber += anyNumber;
}

在这个例子中,代码 anyNumber:Number 被放入了括号中。这是函数的输入,写成 变量名:数据类型。一旦输入,anyNumber 自动成为局部变量。

要调用函数 addAnyNumberToSomeNumber,我们只需要将值放入括号中。不需要数据类型!

public function Main():void{
     //...
     //The original value of someNumber is 5.
     addAnyNumberToSomeNumber(4);
     //The value of someNumber is now 9.
     addAnyNumberToSomeNumber(2);
     //The value of someNumber is now 11.
}

这是否给你一种似曾相识的感觉?应该!还记得我们看到的第一个类中的这些行吗?

                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        trace(HELLO_WORLD);
                        trace("Your name is " + name + ".");

它们都是函数调用!trace 是一个顶层函数,它在输出窗口中输出一个字符串。它对于调试非常有用,并且仅在调试版本中可用。

现在让我们修改我们的代码以包含两个输入

private var someNumber:Number = 5;
private function addTwoNumbersToSomeNumber(firstNumber:Number, secondNumber:Number):Void{
    someNumber += firstNumber + secondNumber;
}
public function Main():void{
     //...
     //The original value of someNumber is 5.
     addAnyNumberToSomeNumber(4, 3);
     //The value of someNumber is now 12.
     addAnyNumberToSomeNumber(1, 2);
     //The value of someNumber is now 15.
}

逗号用于分隔两个参数。这也可以用于三个或更多参数。

如何声明和调用一个带有输出的函数?

[编辑 | 编辑源代码]

再看看我们的 addAnyNumberToSomeNumber 代码。假设我们不想触碰原始变量,但无论如何都想要得到 anyNumber 和 someNumber 的总和。这就是带有返回值的函数派上用场的地方。

代码 结果
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
    return (originalNumber + anyNumber);
}
trace(addTwoNumbers(someNumber, 7));

12

在这个函数中,someNumber 的值被传递了,但函数没有改变 someNumber,而是将 someNumber 和 7 的总和直接返回给 trace 函数。

请注意,由于此函数只包含一个 return 语句,没有其他语句,因此将其作为单独的语句调用是没有意义的

var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
    return (originalNumber + anyNumber);
}
addTwoNumbers(someNumber, 7);

你看,什么也没发生!该函数适合返回一个值,但除此之外没有其他作用。

还要注意,返回值中的函数可以以多种多样的方式使用,而不局限于跟踪。例如,看看下面的代码

代码 结果
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
    return (originalNumber + anyNumber);
}
var yetAnotherNumber:Number = 6 / addTwoNumbers(someNumber, 7);
trace(yetAnotherNumber);

0.5

在这个脚本中,计算机首先评估 addTwoNumbers(someNumber, 7) 的值,它等于 12。然后它执行操作 6 / 12,最后将其分配给 yetAnotherNumber。

总之,声明函数的语法如下

function functionName(parameter1:DataType1, parameter2:DataType2...):ReturnDataType{
    Statements;
    return value;
}

如何调用一个没有输入和输出的函数?

[编辑 | 编辑源代码]

为了使用函数,我们需要调用它。让我们再看一遍上面的例子

代码 结果
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
    someNumber++;
}
addOneToSomeNumber();
trace(someNumber);

6

在上面的函数调用中,我们只是调用了函数 addOneToSomeNumber。它后面的括号用于函数的输入,我们将在下一节中介绍。计算机执行了该函数,其中包括将 someNumber 增加 1。这就是我们得到结果 6 的方式。

如何声明和调用一个带有输入的函数?

[编辑 | 编辑源代码]

如何声明和调用一个带有输出的函数?

[编辑 | 编辑源代码]

我应该如何命名我的函数?

[编辑 | 编辑源代码]

像变量一样,您不能将保留字用于函数,并且函数只能以字母开头。根据已建立的命名约定,好的函数名以动词开头,可以使用驼峰命名法与其他单词连接。例如,eatWatermelon()、drinkWater() 和 smashVase()。

什么是调用者和被调用者?

[编辑 | 编辑源代码]

当调用函数时,它被称为被调用者。当一个函数被另一个函数调用时,调用函数被称为调用者

函数的arguments 对象可以找到调用者和被调用者。以下示例跟踪调用者和被调用者

代码 结果
function uselessFunction():Void{
     trace(arguments.caller);
     trace(arguments.callee);
}
uselessFunction();

[类型 Function]
[类型 Function]

请注意,由于函数不能以文本形式表示,因此计算机跟踪[类型 Function],这仅仅表示它是一个函数。

我可以将函数放入变量吗?

[编辑 | 编辑源代码]

如果你真的想,你可以将函数放入变量中。这是语法

var variableName:Function = function(parameter1:DataType1, parameter2:DataType2...):ReturnDataType{
   Statements;
   return value;
}

这是一个例子

代码 结果
var someFunction:Function = function(someString:String):Void{
	trace(someString);
}
someFunction("Hello world!");

你好,世界!

等等,那么 trace 函数是怎么回事?

[编辑 | 编辑源代码]

到目前为止,您可能想知道您在哪里获得了 trace 函数,因为您从未在任何地方定义过它。阅读下一章以了解更多信息!

华夏公益教科书