ActionScript 3.0/函式介紹
注意:此頁面仍然是關於 AS2 的。它尚未完全升級到 AS3。 |
關鍵概念
- 函式定義
- 函式宣告
- 函式呼叫
- 引數
- 返回值
- 命名函式
- 呼叫者和被呼叫者
- 變數中的函式
現在我們已經學習了所有運算子,我們可以進入下一部分:函式。
在數學中,函式由輸入、過程和輸出組成。例如,如果將 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));
|
|
在這個函式中,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);
|
|
在這個指令碼中,計算機首先評估 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);
|
|
在上面的函式呼叫中,我們只是呼叫了函式 addOneToSomeNumber。它後面的括號用於函式的輸入,我們將在下一節中介紹。計算機執行了該函式,其中包括將 someNumber 增加 1。這就是我們得到結果 6 的方式。
像變數一樣,您不能將保留字用於函式,並且函式只能以字母開頭。根據已建立的命名約定,好的函式名以動詞開頭,可以使用駝峰命名法與其他單詞連線。例如,eatWatermelon()、drinkWater() 和 smashVase()。
當呼叫函式時,它被稱為被呼叫者。當一個函式被另一個函式呼叫時,呼叫函式被稱為呼叫者。
函式的arguments 物件可以找到呼叫者和被呼叫者。以下示例跟蹤呼叫者和被呼叫者
| 程式碼 | 結果 |
|---|---|
function uselessFunction():Void{
trace(arguments.caller);
trace(arguments.callee);
}
uselessFunction();
|
|
請注意,由於函式不能以文字形式表示,因此計算機跟蹤[型別 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 函式,因為您從未在任何地方定義過它。閱讀下一章以瞭解更多資訊!