質問
以下の不自然な例を考えてみます:
void HandleThat() { ... }
void HandleThis()
{
if (That) return HandleThat();
...
}
このコードではうまく動作し、両方という事実にもかかわらず、私はそれが仕様-有効ですかなり確信しているが、コールは、関数の結果を返すように表示されますので、(おそらく自分で)私は、この異常なスタイルを考えます機能が無効であることをプロトタイプされます。
一般的に、私が見ることを期待します。
if (That) {HandleThat(); return;}
これは、私は何が起こっているかについて何ら曖昧さを残さない、と感じています。
SOコミュニティは、私が戻ってボイドコーディングスタイルが混乱や問題があるかどうかについて、あなたの意見を得ることができますか?それはイディオムの感触を持っています。私はこれを使用するか、またはそれを避ける必要がありますか?
一般的に私は、明確にするために努力すると第二のスタイルを使用すると思います。一方、ややそれに私を描画する最初のフォームに清楚あります。
解決
私は、値のいくつかの並べ替えが返さなっていることを暗示がありますので、最初のスタイルが混乱して、あなたに同意します。 のことのために実際には、私は数回にを介してそれを読む必要がありました。
空プロトタイプ化機能から復帰する際に、それだけであるべき返す;
他のヒント
これはおそらく少しも賢いです。その行が離れて関数の先頭からの行のカップルよりも多くを終了した場合、それは混乱するでしょう。また、コードを見て、プログラマが相関する必要があることを意味します。
return HandleThat();
ボイド戻り値の型を持つと、彼らは本当にコードを理解する前に賢さを把握。あなたがもし/他の枝に複数の事をやっているときに、あなたは本当にカッコを使用し、別の行に手順を置く必要があります。より多くのスペースを占めるが理解しやすくなります:
if (That) {
HandleThat();
return;
}
C言語の規則は、式を返すために、ボイドトライを返すように宣言された関数は、式が評価されることはありません場合は言ってます。
その前に見たことがありません。
これは、void以外の戻り値の型のための共通のイディオムのように見えるの利点を持っているので、それは非常に簡単に読み込む...
誰かがそれが無効であることを示すことができない限り、私はそれを変更しません。
私は、最初のバージョンは、主にテンプレートプログラミングを容易にするために許可されていることを信じています。 HandleThatがまたは無効ではないかもしれない可能性がある型Tを返した場合、それは最初のバージョンを使用すると便利です。
しかし、「通常」の場合には、第二のバージョンは明確であり、私はそれを好むます。