ActionScript 2.0/函式簡介
關鍵概念
- 函式的定義
- 程式碼塊
- 函式宣告
- 函式呼叫
- 引數
- 返回值
- 命名函式
- 呼叫者和被呼叫者
- 變數中的函式
現在我們已經學習了所有運算子,我們可以進入下一部分:函式。
在數學中,一個函式由輸入、過程和輸出組成。例如,如果將 x = 3 輸入到 f(x) = 2x 中,我們得到輸出 6。
在計算機中,一個函式是一個語句集合。當一個函式被執行時,函式內部的所有語句都將被執行。一個函式可能或不可能有輸入,一個函式可能或不可能有輸出。(當然,對於必須有輸出的電子表格函式來說,後者是不可能的。)
以下是一個簡單的函式,沒有輸出也沒有輸入。看看程式碼,我們會一步一步地解釋它
| 程式碼 | 結果 |
|---|---|
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
someNumber++;
}
|
|
首先,第一條語句是一個簡單的變數宣告語句,我們之前已經學習過了。
第二行包含各種元素
function被新增到函式宣告的開頭,就像var被新增到變數宣告的開頭一樣。- addOneToSomeNumber 是我們函式的名稱。
- 括號用於函式的輸入。雖然此函式不涉及輸入,但我們仍然必須新增括號。
:Void部分用於函式的輸出。通常,Void將被輸出的資料型別替換。由於此函式不涉及輸出,因此我們使用關鍵字Void代替。- 左花括號標誌著一個程式碼塊的開始。
程式碼塊指的是用一對花括號括起來的語句組。這些語句將按順序執行。在一個函式中,程式碼塊被稱為函式的主體。稍後,我們將學習程式碼塊的其他應用。請記住,我們總是縮排程式碼塊中的語句。這將在 Flash API 中自動為您完成。
為了使用一個函式,我們需要呼叫它。讓我們再看看上面的例子
| 程式碼 | 結果 |
|---|---|
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
someNumber++;
}
addOneToSomeNumber();
trace(someNumber);
|
|
在上面的函式呼叫中,我們只是呼叫了函式 addOneToSomeNumber。後面的括號用於函式的輸入,我們將在下一節中介紹。計算機執行了函式,該函式涉及將 someNumber 增加 1。這就是我們得到結果 6 的方式。
在程式設計中,函式的輸入被稱為引數或引數。[1]讓我們修改我們的 addOneToSomeNumber 函式以適應將任何數字新增到 someNumber。
| 程式碼 | 結果 |
|---|---|
var someNumber:Number = 5;
function addAnyNumberToSomeNumber(anyNumber:Number):Void{
someNumber += anyNumber;
}
addAnyNumberToSomeNumber(2);
trace(someNumber);
trace(anyNumber);
|
|
在這個例子中,程式碼 anyNumber:Number 被放到了括號中。這是函式的輸入,寫成 變數名:資料型別。[2]輸入後,anyNumber 被稱為區域性變數。這意味著它不能在函式外部被引用。這就是為什麼我們不能在最後跟蹤 anyNumber 的原因。
請注意,這不會導致錯誤,但會返回關鍵字 undefined。每當我們嘗試引用一個未定義的值時,Flash 將返回 undefined 值。我們將在稍後討論 undefined 及其孿生兄弟 null。
要呼叫函式 addAnyNumberToSomeNumber,我們只需要在括號中放入值。不需要資料型別!
現在讓我們修改程式碼以包含兩個輸入
| 程式碼 | 結果 |
|---|---|
var someNumber:Number = 5;
function addTwoNumbersToSomeNumber(firstNumber:Number, secondNumber:Number):Void{
someNumber += firstNumber + secondNumber;
}
addTwoNumbersToSomeNumber(5, 3);
trace(someNumber);
|
|
逗號用於分隔兩個引數。這也可以用於三個或更多個引數。
再看看我們的 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;
}
像變數一樣,你不能用保留字來命名函式,並且函式只能以字母開頭。根據已有的命名約定,好的函式名以動詞開頭,可以與其他單詞使用駝峰式命名法連線起來。例如,eatWatermelon()、drinkWater() 和 smashVase()。
當一個函式被呼叫時,它被稱為被呼叫者。當一個函式被另一個函式呼叫時,呼叫函式被稱為呼叫者。
函式的arguments 物件可以找到呼叫者和被呼叫者。以下示例跟蹤呼叫者和被呼叫者
| 程式碼 | 結果 |
|---|---|
function uselessFunction():Void{
trace(arguments.caller);
trace(arguments.callee);
}
uselessFunction();
|
|
請注意,由於函式無法以文字形式表示,因此計算機跟蹤 [type 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 函式,因為你從未在任何地方定義過它。閱讀下一章以瞭解詳情!