中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

戻り値の返し方にみる優位性(結構長いので注意)

戻り値の返し方にみる優位性(結構長いので注意)

関数には戻り値というものがある。
処理を行なった結果、ステータスなどを、呼び出し元に戻す機能で大概の言語に常備されている。

一般的に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の構文が一番望ましいと筆者は考える。

投稿日時 : 2005年2月15日 13:05

コメントを追加

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/15 14:03 じゃんぬねっと

入口 1 つ、出口 1 つ... か。

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/15 19:52 河端善博

わたしは、return で抜けられる部分は、とっとと抜けてしまう方法を好みます。
必要以上にコードを読み進む必要がなくなりますね。

ちなみに、下から三つ目の C# のコードは、break がそれぞれの case に必要ですね。
※簡単なコードチェツクには、Snippet Compiler が便利.

# Re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/15 20:01 tadahiro@isisaka.com (Tadahiro Ishisaka)

個人的にはreturn分の方が大好きなのですし、文法的にも利点は大きいと思います。
ただ、VBしか知らない人にはとまどうポイントだろうな思います。場合によってはバグを入り込ませるかもしれませんし。
VBプログラマをスムーズに移行させるという点ではやっかいかなぁと思いますね。

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/15 21:13 中博俊

あ、ほんとだ。
河端さんさんきゅーです。

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/16 2:30 菊池

bool Syori()
{
return ShoriB() && ShoriC() && ShoriD();
}

入り口一つ、出口一つ。

 true/false との比較自体が私に言わせればナンセンスです。

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/16 10:25 青柳 臣一

> true/false との比較自体が私に言わせればナンセンスです。

激しく同意

# re: 戻り値の返し方にみる優位性(結構長いので注意) 2005/02/20 16:53 mk3008

VB6、VB.NETを使用している者ですが、VB.NETから return文 が使えるようになりました。
return文の方が、戻り値として何を返すのかを明確にしているし、間違えようがないので好んで使ってます。

関数名に代入する方式は、関数名を変更したいと思ったときに手間がかかるので嫌いですね。

# ASdCfuAZDCWy 2011/12/16 1:11 http://www.wildharvestedmaca.com/

Gripping! I would like to listen to the experts` views on the subject!!...

# vkbgkBfWZc 2011/12/22 19:33 http://www.discreetpharmacist.com/

FDzZ5s The author deserves for the monument:D

タイトル
名前
URL
コメント