跳轉至內容

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 函式,因為您從未在任何地方定義過它。閱讀下一章以瞭解更多資訊!

華夏公益教科書