LoginSignup
0
1

More than 1 year has passed since last update.

TypeScriptメモ 〜関数編〜

Posted at

関数を作ってみる

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)
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1