TypeScript 関数
関数は、1つのタスクをまとめて実行する文の集まりです。
コードを異なる関数に分割できます。コードをどのように異なる関数に分割するかはあなた次第ですが、論理的には通常、各関数が特定のタスクを実行するように分割されます。
関数宣言はコンパイラに関数の名前、戻り値の型、引数を示します。関数定義は関数の実際の本体を提供します。
関数定義
関数とは、波括弧で囲まれたコードブロックであり、その前にキーワード function を付けます。
構文は次のとおりです。
function function_name()
{
// 执行代码
}
例
TypeScript
関数の呼び出し
関数内のコードは、関数を呼び出すことによってのみ実行できます。
構文は次のとおりです。
function_name()
例
TypeScript
関数の戻り値
関数の実行結果を呼び出し元に返したい場合があります。
return 文を使用することで実現できます。
return 文を使用すると、関数は実行を停止し、指定された値を返します。
構文は次のとおりです。
function function_name():return_type {
// 语句
return value;
}
return_type は戻り値の型です。
return キーワードの後には、返す結果が続きます。
通常、関数には return 文が1つだけあります。
戻り値の型は、関数定義の戻り値の型(return_type)と一致する必要があります。
例
TypeScript
例では関数greet()、戻り値の型は string です。
greet()関数は return 文によって呼び出し元、つまり変数 msg に値を返し、その後その戻り値を出力します。
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
引数を持つ関数
関数を呼び出すときに、値を渡すことができます。これらの値は引数と呼ばれます。
これらの引数は関数内で使用できます。
関数には複数の引数を渡すことができます。各引数はカンマで,区切ります:
構文は次のとおりです。
function func_name( param1 [:datatype], param2 [:datatype]) {
}
param1、param2 は引数名です。
datatype は引数の型です。
例
TypeScript
例では関数add()、戻り値の型は number です。
add()関数内では number 型の引数が2つ定義されており、関数内で2つの引数を加算して返します。
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
3
オプション引数とデフォルト引数
オプション引数
TypeScript の関数では、引数を定義した場合、その引数を渡す必要があります。ただし、引数をオプションとして設定する場合は除きます。オプション引数は疑問符 ? で識別します。
例
TypeScript
次の例では、lastName をオプション引数として設定します。
TypeScript
オプション引数は必須引数の後ろに置く必要があります。上の例で firstName をオプション、lastName を必須にしたい場合は、それらの位置を調整して firstName を後ろに置く必要があります。
すべてオプション引数であれば問題ありません。
デフォルト引数
引数のデフォルト値を設定することもできます。これにより、関数を呼び出すときにその引数の値を渡さない場合、デフォルト値が使用されます。構文は次のとおりです。
function function_name(param1[:type],param2[:type] = default_value) {
}
注意:引数をオプションとデフォルトの両方に設定することはできません。
例
次の例では、関数の引数 rate にデフォルト値 0.50 を設定しています。この関数を呼び出すときに引数を渡さない場合、このデフォルト値が使用されます。
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
计算结果: 500 计算结果: 300
残余引数
関数に渡す引数の数が分からない場合があります。そのような場合は、残余引数を使用して定義できます。
残余引数の構文では、不確定な数の引数を配列として渡すことができます。
TypeScript
関数の最後の名前付き引数 restOfName の前に ... を付けます。これにより、残りの引数からなる配列になります。インデックスは0(含む)から restOfName.length(含まない)までです。
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
和为: 6 和为: 50
匿名関数
匿名関数とは、関数名を持たない関数です。
匿名関数はプログラムの実行時に動的に宣言されます。関数名がないことを除けば、標準の関数と同じです。
匿名関数は変数に代入できます。このような式は関数式になります。
構文は次のとおりです。
var res = function( [arguments] ) { ... }
例
引数のない匿名関数:
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
hello world
引数を持つ匿名関数:
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
24
匿名関数の自己呼び出し
匿名関数を自己呼び出しするには、関数の後に () を使用します:TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
Hello!!
コンストラクタ
TypeScript は、JavaScript 組み込みのコンストラクタ Function() を使用した関数定義もサポートしています。
構文は次のとおりです。
var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
引数の説明:
- arg1, arg2, ... argN:引数リスト。
- functionBody:関数定義を含む JavaScript 文を含む文字列。
例
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
12
再帰関数
再帰関数とは、関数内で関数自身を呼び出す関数です。例を挙げます:
昔々、ある山がありました。山の中に寺があり、寺には年老いたと尚さんがいて、小僧さんに物語を語っていました。その物語とは?「昔々、ある山がありました。山の中に寺があり、寺には年老いたと尚さんがいて、小僧さんに物語を語っていました。その物語とは?『昔々、ある山がありました。山の中に寺があり、寺には年老いたと尚さんがいて、小僧さんに物語を語っていました。その物語とは?……』」
例
TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
720
Lambda 関数
Lambda 関数はアロー関数とも呼ばれます。
アロー関数式の構文は、関数式よりも短くなっています。
関数が1つの文だけの場合:
( [param1, param2,…param n] )=>statement;
例
次の例では、2つの数の和を返す lambda 式関数を宣言しています。TypeScript
上記のコードをコンパイルすると、次の JavaScript コードが得られます。
JavaScript
出力結果は次のとおりです。
110
関数が文のブロックである場合:
( [param1, param2,…param n] )=> {
// 代码块
}
例
次の例では、2つの数値の和を返すラムダ式関数を宣言しています。
TypeScript
上記のコードをコンパイルすると、次のJavaScriptコードが得られます。
JavaScript
出力結果は次のとおりです。
110関数のパラメータ型を指定せずに、関数内でパラメータ型を推論できます:
TypeScript
上記のコードをコンパイルすると、次のJavaScriptコードが得られます。
JavaScript
出力結果は次のとおりです。
12 是一个数字 Tom 是一个字符串
単一パラメータ()は省略可能です:
TypeScript
上記のコードをコンパイルすると、次のJavaScriptコードが得られます。
JavaScript
出力結果は次のとおりです。
输出为 12
パラメータがない場合は空の括弧を設定できます:
TypeScript
上記のコードをコンパイルすると、次のJavaScriptコードが得られます。
JavaScript
出力結果は次のとおりです。
関数を呼び出す
関数のオーバーロード
オーバーロードとは、メソッド名が同じでパラメータが異なり、戻り値の型が同じでも異なってもよいことです。
各オーバーロードメソッド(またはコンストラクタ)には、一意のパラメータ型リストが必要です。
パラメータ型が異なる:
function disp(string):void; function disp(number):void;
パラメータ数が異なる:
function disp(n1:number):void; function disp(x:number,y:number):void;
パラメータ型の順序が異なる:
function disp(n1:number,s1:string):void; function disp(s:string,n:number):void;
パラメータ型が異なる場合、パラメータ型は次のように設定する必要がありますany。
パラメータ数が異なる場合は、異なるパラメータを省略可能に設定できます。
例
次の例では、パラメータ型とパラメータ数が異なる場合を定義しています:
TypeScript
上記のコードをコンパイルすると、次のJavaScriptコードが得られます。
JavaScript
出力結果は次のとおりです。
abc undefined 1 xyzその他の拡張