関数に正しい型を付けよ
初段 / 目安 15分
翌日、凛さんが1つのファイルを開いて待っていました。fleama の手数料計算です。
「この関数、入出力の型がありません。何を受けて何を返すのか、署名で語ってください」
署名というのは、関数の名前と、引数の型と、戻り値の型を並べた1行のことです。calcFee(price: number): number と書いてあれば、この関数は数値を1つ受け取って数値を1つ返すのだと、中身を1行も読まずに分かります。凛さんが求めているのはそれです。
TypeScript では、引数の型注釈は引数名のうしろに書きます。戻り値の型注釈は、閉じ括弧のうしろに書きます。書く場所さえ覚えてしまえば、あとは第一問と同じ string number boolean の世界です。
戻り値の型を書くことには、地味ですが大きな効きめがあります。うっかり文字列を返してしまったとき、その場で tsc が止めてくれるからです。戻り値の型を書かない関数は、返し忘れや返し間違いを、呼び出した側まで運んでいってしまいます。間違いは、生まれた場所で捕まえるのがいちばん安いのです。
fleama の手数料は次のように決まっています。販売価格の10パーセントです。ただし1円未満は切り捨てます。そして手数料の下限は50円です。計算結果が50円を下回った場合は50円になります。
完成条件
販売価格を受け取り、手数料を返す関数 calcFee を作ってください。
- 手数料は販売価格の10パーセント
- 1円未満は切り捨てること
- 計算結果が50未満のときは50を返すこと
- 引数と戻り値の両方に型注釈を付けること
進め方
白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。
切り捨てには Math.floor が使えます。Math.floor は数値を受け取って数値を返すので、戻り値の型と喧嘩しません。
要件
- 関数名は calcFee、引数は販売価格の1つ
- 引数に型注釈を付けること。販売価格は数値
- 戻り値にも型注釈を付けること。閉じ括弧のうしろに書く
- 手数料は販売価格の10パーセントで、1円未満は切り捨てること
- 計算結果が50未満のときは50を返すこと
入出力例
calcFee(3000) → 300
calcFee(1000) → 100
calcFee(500) → 50
calcFee(499) → 50
calcFee(120) → 50
calcFee(0) → 50
calcFee(12345) → 1234ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです