voidと戻り値なし
返さない関数の戻り値の型
世の中の関数がすべて値を返すわけではありません。画面に出す、記録に残す、といった仕事だけをして終わる関数もあります。そういう関数の戻り値の型が void です。
function logWork(title: string): void {
console.log("[log] " + title);
}void は「返す値は無い」という宣言です。書かなくても推論はされますが、書いておくと、この関数は結果を持ち帰らないという意図がその場で読めます。
書いた型と中身が食い違うと止まる
返さない関数に string と書いてしまうと、その時点でエラーになります。
function logWork(title: string): string {
console.log("[log] " + title);
}
// エラー A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.逆に void と書いた関数の結果を使おうとしても止まります。
const message: string = logWork("プロフィールサイト");
// エラー Type 'void' is not assignable to type 'string'.これが void のいちばんの役割です。返ってこないものを受け取ろうとする行を、実行する前に潰せます。JavaScript のままなら message には静かに undefined が入り、その先で事故が起きていました。
何をしたかは外から確かめる
void の関数は値を返さないので、正しく動いたかどうかを戻り値では確かめられません。確かめたいときは、その関数が書き込んだ先を見ます。
const workLogs: string[] = [];
function logWork(title: string): void {
workLogs.push("[log] " + title);
}
logWork("プロフィールサイト");
logWork("自己紹介カード");
console.log(workLogs.join(" | "));
// [log] プロフィールサイト | [log] 自己紹介カード記録そのものは workLogs に溜まっています。logWork は何も返しませんが、仕事はしています。
手を動かす
演習では、ゆめさくの作品名を記録に残す logWork と、その記録をまとめて読み出す runWorkLog を渡します。直すのは logWork の型だけです。提出したコードは runWorkLog の結果で判定されます。
要件
logWorkの引数titleに文字列の型を付けるlogWorkの戻り値の型を、値を返さない関数の型にするlogWorkの中身は変えないworkLogsとrunWorkLogは変えない
入出力例
runWorkLog(["プロフィールサイト"]) → "[log] プロフィールサイト"
runWorkLog(["プロフィールサイト","自己紹介カード"]) → "[log] プロフィールサイト | [log] 自己紹介カード"
runWorkLog(["プロフィールサイト","自己紹介カード","スキル一覧の表"]) → "[log] プロフィールサイト | [log] 自己紹介カード | [log] スキル一覧の表"
runWorkLog([]) → ""ヒント
編集 LuaGate編集部