

中嶋悟
名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝
returnとthrowの基本的な違いを中学生にもやさしく解説
この段落では、returnとthrowの意味、役割、そして使い分けのコツを丁寧に説明します。
まず、returnとは「関数の実行を終えて、呼び出し元に値を返す行為」です。
これは普通の出口であり、値を受け取る側はその結果を使って次の処理を進めます。
一方、throwは「例外を投げる」ことを意味します。
つまり、何か問題が起きたときに、現在の処理を中断して外部に知らせる仕組みです。
例外はtry-catchブロックで捕まえることができ、エラーに応じて別の処理を走らせることができます。
ここが、通常の処理とエラー処理の大きな分かれ目です。基本的な違いは「値を返すかどうか」と「処理を中断して外に知らせるかどうか」です。returnは値を返す出口、throwは問題を知らせる出口です。これを理解すると、関数の設計がずっとわかりやすくなります。これから具体的な使い分けのヒントを見ていきましょう。
実行の流れとエラーハンドリングの違い
このセクションでは、returnとthrowの実行の流れを順番に追い、どのように呼び出し元に影響するかを詳しく解説します。
まず、returnが実行されると、その場の処理はここで終わり、関数の戻り値が呼び出し元に渡されます。
呼び出し元はその値を使ってさらに別の処理を組み立て、プログラムは通常通り進みます。
しかし、throwが実行されると、現在の処理は中断され、例外が外部へ伝播します。
tryブロックの中でthrowを受け取ればcatchブロックに飛び、エラーメッセージを表示したり、別の処理を実行したりできます。
この動作は、同期処理でも非同期処理でも基本の考え方は同じです。
ただし、非同期の場合はPromiseの状態が影響します。throwはエラーを伝える出口、returnは通常の値を渡す出口という基本を頭に置いてください。
例えば、数値を割る関数を考えます。
function divide(a,b){ if(b===0){ throw new Error('0で割ることはできません'); } return a / b; }
このようにbが0のときだけエラーを投げ、それ以外は結果を返します。呼び出し側では try { console.log(divide(6,2)); } catch(e){ console.log('エラー:' + e.message); }
非同期の話題にも触れましょう。
async関数の中でthrowを書けば、返り値のPromiseは拒否状態になります。
これはawaitと組み合わせて使うときに特に重要です。
一方、returnはPromiseを解決させる値を返します。
この違いを知っておくと、エラー処理のデバッグがだいぶ楽になります。
非同期では返ってくる値とエラーの扱いが少し変わる点を忘れずに覚えておきましょう。
コード例と理解を深めるポイント
次は、実際のコード例を読み解くときのコツです。
例1: function getUserName(id){ if(id <= 0){ return '名無し'; } return 'ユーザー' + id; }
この例は、idが正の値のときだけ名前を返し、それ以外は別の文字列を返します。呼び出し元はこの返り値をそのまま使えます。
例2: function divide(a,b){ if(b === 0){ throw new Error('0で割ることはできません'); } return a / b; }
この例では、0で割る場面を見つけた瞬間に例外を投げ、呼び出し元でcatchする流れを想定します。
try { console.log(divide(6,0)); } catch(e){ console.log('エラー:' + e.message); }
教室で友だちと話していたとき、returnとthrowの違いをこんな感じでまとめてみたんだ。returnは“結果を返す出口”で、関数の計算結果を呼び出し元へ渡します。throwは“問題を知らせる出口”で、エラーを投げて処理を止め、誰かに対応させるきっかけを作ります。私たちは、エラーが起こりそうな場面ではthrowを使い、正常な結果を返したいときにはreturnを使うという基本を押さえました。例えるなら、returnは道案内の地図を返す、throwは非常ベルを鳴らすようなもの。こんなイメージで覚えると、コードを読んだときに混乱せず、どの出口を使うべきか判断しやすくなります。