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では即座に終了するわけではないので、戻った先でしっかり終了するための準備をしてから

終了するようにすればエラーが起こっても安心です。