違いはありますか?
function someMethod( $someArg ) {
// some code
return;
}
そして
function someMethod( $someArg ) {
// some code
// no return
}
どちらも「戻り値」としてNULL
を持っています。違いはありますか?何かPHP内部的に?パフォーマンス?スピード?
編集
Zendフレームワーク( このビデオでは )ではreturn;
を使用しているので、私にはばかげているように見えました。ただし、Zendフレームワークの背後にいる人々は自分のPHPを知っていると思うでしょう...
phpコード
<?php
function a() {
echo 1;
return;
}
function b() {
echo 2;
}
生成されたバイトコード
.FUNCTION a
ECHO 1
RETURN NULL
RETURN NULL
HANDLE_EXCEPTION
.END FUNCTION
.FUNCTION b
ECHO 2
RETURN NULL
HANDLE_EXCEPTION
.END FUNCTION
したがって、明示的なreturnステートメントは1つの追加のRETURN命令を生成します。それ以外は違いはありません。
私の知る限り、違いはありません。
空のreturn;
は主に、if/elseから抜け出すためにあり、whileまたはforループは何も返さない。
機能的には違いはありませんが、関数(リターン)に明確な終了ポイントがあるのは常に素晴らしいことです。コンピュータサイエンスのいくつかの学校は、すべての機能と方法が正確に1つ、そして1つだけの出口を持つべきであると考えています。
将来、戻り値を追加する必要がある場合、空の戻り値を含めると、コードですでに選択されている明らかなポイントがあります。
しかし、私が言ったように、機能的な観点からはあまり違いはありません。
あなたの例では、違いはありません。
ただし、return
は関数を終了するため、return
ステートメントの後のコードをスキップするオプションがあります(これが目的です)。
あなたの例では、return
を見たいかどうかは、個人的な好みです。
さらに、Perlのような一部の言語では、最後の式は「暗黙的に」戻り値であるため、「return」を使用する必要さえありません。 (ただし、これはC++などの他の言語では機能しません。)
sub foo {
return 12;
}
sub foo2 {
12; # same thing
}
大きな違いはありません。return;
を使用するだけで、関数呼び出しを早期に終了できます。どちらもNULL
を返しますが、これはワークフロー専用です。
私は専門家ではありませんが、ごくわずかな違いがあれば言うでしょう。リターンを置くことによってあなたがかみ傷を使い果たしたと主張することができます。またはfalseを返します。関数の終わりに。
通常、私は次のようなものでリターンを使用します
return true;
または
return $var;
何も返したくない場合やfalseを返したい場合はreturnを使用しません
PHPやPythonなどの言語では実際の違いはありません。return;
を使用して、関数を途中で終了することができます。
ただし、選択するプログラミング言語がC/C++、Java、C#の場合は違いがあり、戻り値がない場合はvoid
を意味します。
非常に興味深いことに(私は思う)、戻り値の型を持つことは大きな違いを生みます。 3種類の戻り値null
は、3つの異なるエラーをスローします。
function foo() : string {
// return nothing
// TypeError exception: Return value of foo() must be of the type string, none returned
}
function foo() : string {
return;
// Fatal error: A function with return type must return a value
}
function foo() : string {
return null;
// TypeError exception: Return value of foo() must be of the type string, null returned
}
すべてのエラーは実行時であり、すべての戻り値は技術的にはnull
であるため、私は推測していませんでした。
関数の最後のステートメントとして「空の」return
を使用して、関数が値を返すことを期待されていないことをわかりやすく思い出させることがあります。
class foo {
var $name;
public function bar($x) {
$this->name = $x;
return;
}
}
ADAには、procedures
とfunctions
があります。最初のものはデータを返さず、いくつかのステートメントを実行するだけです。関数はデータを返すことができます。
したがって、空のreturn
は「これはプロシージャです」のようになります。
return
が呼び出されるとすぐに、関数呼び出しは終了します。それは休憩のように機能します。したがって、リターンが途中の場合、関数の残りの部分が実行されないため、パフォーマンスが向上します。
残りの部分については、暗黙的なリターンの代わりに明示的なリターンを使用する方が(読みやすさの点で)しばしば優れています。関数でreturnを保持すると、その関数の呼び出しで戻り値が期待される可能性があることがわかります。
returnは関数を中断/終了します(switch/caseのようにbreakを考えてください)
function someMethod( $someArg ) {
if(condition) {
return; // will exit function
}
// could be more code
}