可変長引数
先日 あるソースを眺めていたら、CとかC++のように可変長引数を使ってるコードがありました。こんな機能は可読性が下がる害悪しかないじゃないか、と思いましたがいちおう記事にしてみます。いろんなスキルの人でチーム開発している場合は利用しないほうがいいでしょう。
コマンドライン引数を取るぐらいにしか用途が思いつきません。
以下ソースコードです。
private bool testA(
ref int ans,
int a = 0,
int b = 0,
int c = 0,
bool flag_add = true
)
{
if ( flag_add )
{
ans = a + b + c;
}
else
{
ans = a * b * c;
}
return true;
}
private bool testB(
ref int ans,
int a = 0,
int b = 0,
int c = 0,
bool flag_add = false
)
{
if ( flag_add )
{
ans = a + b + c;
}
else
{
ans = a * b * c;
}
return true;
}
private void button1_Click( object sender, EventArgs e )
{
int ans00 = 0;
int ans01 = 0;
int ans02 = 0;
int ans03 = 0;
int ans04 = 0;
int ans10 = 0;
int ans11 = 0;
int ans12 = 0;
int ans13 = 0;
int ans14 = 0;
testA( ref ans00, 1 );
testA( ref ans01, 1, 10 );
testA( ref ans02, 1, 10, 100 );
testA( ref ans03, 1, 10, 100, true );
testA( ref ans04, 1, 10, 100, false );
testB( ref ans10, 1 );
testB( ref ans11, 1, 10 );
testB( ref ans12, 1, 10, 100 );
testB( ref ans13, 1, 10, 100, true );
testB( ref ans14, 1, 10, 100, false );
StringBuilder sb = new StringBuilder();
sb.AppendLine( "testA" );
sb.AppendLine( ans00.ToString() );
sb.AppendLine( ans01.ToString() );
sb.AppendLine( ans02.ToString() );
sb.AppendLine( ans03.ToString() );
sb.AppendLine( ans04.ToString() );
sb.AppendLine( "" );
sb.AppendLine( "testB" );
sb.AppendLine( ans10.ToString() );
sb.AppendLine( ans11.ToString() );
sb.AppendLine( ans12.ToString() );
sb.AppendLine( ans13.ToString() );
sb.AppendLine( ans14.ToString() );
MessageBox.Show( sb.ToString().Trim() );
Console.WriteLine( sb.ToString().Trim() );
}
メッセージボックスやコンソールには下記のような結果が出力されます。
testA
1
11
111
111
1000
testB
0
0
1000
111
1000