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 の結果で判定されます。

要件

  1. logWork の引数 title に文字列の型を付ける
  2. logWork の戻り値の型を、値を返さない関数の型にする
  3. logWork の中身は変えない
  4. workLogsrunWorkLog は変えない

入出力例

runWorkLog(["プロフィールサイト"])"[log] プロフィールサイト" runWorkLog(["プロフィールサイト","自己紹介カード"])"[log] プロフィールサイト | [log] 自己紹介カード" runWorkLog(["プロフィールサイト","自己紹介カード","スキル一覧の表"])"[log] プロフィールサイト | [log] 自己紹介カード | [log] スキル一覧の表" runWorkLog([])""

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.ts
main.ts
学習モード

メモ

voidと戻り値なし

⌘S で保存