戻り値の返し方にみる優位性(結構長いので注意)
関数には戻り値というものがある。
処理を行なった結果、ステータスなどを、呼び出し元に戻す機能で大概の言語に常備されている。
一般的にC系統(C, C++, C#, JavaなどCの血を受け継いでいる言語)は以下の構文を利用する。
int Syori()
{
return 0;
}
VBは以下のような構文だ
Function Syori() as Integer
Syori = 0
Exit Function
End Function
Pascalは
function Syori(): Integer;
begin
result = 0;
exit
end;
このように大別してreturn構文を利用するものと、戻り値変数に格納するものとの2系統に分かれる。
以下の説明はC#とVBで行なうがこれらはどちらの構文も得て不得手がある。
たとえば"A", "B", "C"にあわせて0, 1, 2を返す関数は以下のようなものになる。
int Syori(string var)
{
switch(var)
{
case "A":
return 0;
case "B":
return 1;
case "C":
return 2;
}
}Function Syori( byval var as String ) As Integer
Select Case (var)
Case "A"
Syori = 0
Case "B"
Syori = 1
Case "C"
Syori = 2
End Select
End Function
ざっくりと書くとこのようになるだろうか?
たとえばこの処理は等価ではないのは明らかで、
int Syori(string var)
{
int retval = 0;
switch(var)
{
case "A":
retval = 0;
break;
case "B":
retval = 1;
break;
case "C":
retval = 2;
break;
}
return retval;
}
が対象となるコードだ。
関数の中でreturnの数が多くなること自体は見通しが悪くなるため出来るだけ避けたほうがいいのだが、C系で育ってきた人はreturnを多用する傾向が多い(自分も含めて)
bool Syori()
{
if ( SyoriB() == false ) Then
return false;
End If
if ( SyoriC() == false ) Then
return false;
End If
if ( SyoriD() == false ) Then
return false;
End If
return true;
}
Function Syori() As Boolean
Syori = False
if ( SyoriB() = false ) Then
Exit Function
End If
if ( SyoriC() = false ) Then
Exit Function
End If
if ( SyoriD() = false ) Then
Exit Function
End If
Syori = True
End Function
さてこのコードはどちらのほうがより間違いが少なくて意味を端的にあらわしているだろうか?
皆さんも考えて欲しい
#returnに関してはVB7の構文が一番望ましいと筆者は考える。