[TypeScript] 関数1

function hello(name:string) {
    console.log("Hello " + name + "!")
}

hello("taro")
hello("hanako")

引数に型を指定する

### 変数のスコープ
varは全体で利用可、letは宣言した構文内
– var

function total(max:number){
    var num = 0
    for(var i = 1; i < max; i++){
        num += i
    }
    console.log("total:" + (num + i))
}

total(100)
total(200)
total(300)

– letにするとエラーになる

let num = 0
    for(let i = 1; i < max; i++){
        num += i
    }
    console.log("total:" + (num + i))

Cannot find name ‘i’.

### 戻り値
– 関数の処理実行後に返される値を戻り値という
– 何も戻さない場合はvoidを指定する

function total(max:number):number{
    let num = 0
    for(let i = 1; i < max; i++){
        num += i
    }
    return num
}

function printTotal(n:number):void {
    let res = total(n)
    console.log(n + "までの合計:" + res)
}

printTotal(123)
printTotal(1234)
printTotal(12345)

### 複数の値を戻す
タプルを使って複数の値の型を記述する

function calcTax(price:number):[price:number, tax:number]{
    const p = price / 1.1
    const t = price - p
    return [p, t]  
}

function printTax(price:number): void {
    const [pr, tx] = calcTax(price)
    console.log(price + "の本体価格:" + pr + ", 税額:" + tx)
}

printTax(2750)
printTax(3080)

### 引数に条件型

function printPerson(id:number | string, name:string, age:number):void{
    switch(typeof(id)){
        case 'string':
        console.log('your id is "' + id + '".')
        break
        case 'number':
        console.log("No," + id)
        break
        default:
        console.log('wrong id ...')
    }
    console.log('Name:' + name + '(' + age + ')')
}

printPerson(10, "taro", 39)
printPerson("flower", "hanako", 20)

### オプション引数の関数
オプション引数はnullを許容する

function printPerson(name?:string, age?:number):void{
    const nameval = name ? name : "no-name"
    const ageval = age ? String(age) : '-'
    console.log('Name:' + nameval + '(' + ageval + ')')
}

printPerson("taro", 39)
printPerson("hanako")
printPerson()

– 引数に初期値を入れる方法も一般的

### 可変長引数

const f = (...data:number[]):number => {
    let total = 0
    for (let i of data){
        total += i
    }
    return total
}

console.log(f(1,2,3,4,5))
console.log(f(10,20,30,40,50,60,70))
console.log(f(123,456,67,89))

なるほど、この数時間でプログラミングの理解がかなり進んだ