###関数を作ってみる
function hello(name:string) {
// 何らかの処理
}
###関数内の変数スコープ
宣言文 | スコープ |
---|---|
var | 関数外で宣言した場合はそのソースコード全体で利用できる。関数内で宣言したものは関数内だけで使える |
let | 宣言した{}内で使える |
function total(max:number) {
let num = 0
for(let i = 1, i < max; i++) {
num += 1
}
console.log(num + i) // エラー! iが見つかりません!
}
###戻り値
戻り値の型を指定できる。何も返さない時はvoid
function total(max:number):number {
// 処理
}
###複数の値を返す
function calcTax(price:number):[price:number, tax:number] {
// 処理
}
###引数に条件型を使用
function foo(foo:number|string){}
###オプション引数
省略可能な引数を利用できる。
function foo(foo?:string, bar?:string) {}
###引数の初期値
function foo(foo = 1) {}
###可変長引数
いくつ引数が必要かわからない場合に
function foo(...data:number[]){}
foo(1,2,3,4)
###無名関数
const f = function(foo:foo):void {}
###アロー関数
const f = (foo:foo):void => {}
###functionとアロー関数の違い
foo() // Error!
const foo = (foo:foo):void => {}
foo() // ok
function foo(foo:foo):void {}
###総称型(ジェネリクス)
「数値を引数で渡したら数値を返し、テキストを渡したらテキストを返す」といった関数を定義する時に使用
// Tが指定されたものはすべて同じ型になる
function foo <T> (foo:T):T {}
###ジェネレータ
ジェネレータでは「yield」を使って値を返す。returnと違って、値を返したあとも処理を続ける。つまり「待ち状態」になる。
ジェネレータは通常の関数と使い方が違う。関数を呼び出すと戻り値としてジェネレータが返される。そのジェネレータに「next()」を呼び出すことで使える。
function* fibo(n:number) {
let n1 = 0
let n2 = 1
for(let i = 0; i <= n; i++) {
yield n1
let n3 = n1 + n2
n1 = n2
n2 = n3
}
}
const n = 10
let fb = fibo(n)
for(let i = 0; i <= n; i++) {
let ob = fb.next()
console.log(ob.value)
}