exitとreturnの終了処理は何が違うのか?
エラーが起こって処理を終了させなければいけない時に、exitとreturnのどちらを使えばいいのでしょうか。
どちらも見かけは変わらずに処理を終了してくれています。
私は特に違いを気にしていなかったのですが、最近使う機会があったので違いを調べてみました。
簡単に言うと
- exit:呼び出されたその場で終了
- return:呼び出し元関数に返り値を返し、呼び出し元関数内で終了処理
もっと厳密な違いがあるようですが、今回はこんな感じで覚えましょう。
実際にコードを実行してみると以下のような結果になりました。
終了するタイミングが異なるため、実行結果に違いが出ています。
function endTest(){ print "end関数内です。\n"; exit; } //-----------main------------- endTest(); print "main関数内です。\n";
end関数内です。
exitは即終了のため、main内のendTest()以降が実行されていません。
function endTest(){ print "end関数内です。\n"; return; } //-----------main------------- endTest(); print "main関数内です。\n";
end関数内です。 main関数内です。
それに対し、returnはendTest()以降を実行しています。
では、どのように使い分ければいいのでしょうか。
ポイントは終了処理前に終了準備が必要なのかどうかです。
一番簡単なのは
- main関数内はexit
- それ以外の関数ではreturnをし、main関数に戻り終了処理
というのが良いようです。
returnでは即座に終了するわけではないので、戻った先でしっかり終了するための準備をしてから
終了するようにすればエラーが起こっても安心です。