C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 53 を表示中)
■29363 / )  Re[14]: 行末のセミコロンの省略
□投稿者/ NyaRuRu (78回)-(2008/12/09(Tue) 01:17:11)
No29361 (.SHO さん) に返信
> ■No29271 (NyaRuRu さん) に返信
> 
>>   Func<string,string> f;
>>   string s;
>>
>>   var a = f     // ここにセミコロンを挿入できてしまう
>>   (s+"!").ToString();
> 
> これも、(s+"!").ToString(); は、コンパイルは通りますが
> 意味をなさないので f にくっつけてしまっていいように思えます。

うーむ,"意味"ですか.

確かに,コードとして意味が無さそうな例をだしてしまったのは申し訳ないのですが,
かといって,意味がありそうな例が構成できないというわけでもないように思います.

戻り値を捨てている文を一律に「意味を成さない」というのは無理で,実際それは
メソッドの中のアクションというか副作用次第です.
世界のどこにも何の影響も残さないようなアクションなら,確かに意味を成しません.
しかし,世界のどこかに影響を残すなら,それは「意味を成しうる」ものです.

例えば StringBuilder クラスの多くのメソッドは,自分自身の内容を変更し,
戻り値としては自分自身の参照を返すようになっています.

var sb1 = new StringBuilder();
var sb2 = new StringBuilder()

(isFooBar() ? sb1 : sb2).AppendLine("Hello");

Console.WriteLine(sb1.ToString());
Console.WriteLine(sb2.ToString());

例えばこの (isFooBar() ? sb1 : sb2).AppendLine("Hello"); は,
丸括弧で始まって,戻り値を捨てているものの,アクションの効果を期待して
単独で使われても不思議ではないような例です.
こういうケースを自動で判別できないように思います.

返信 編集キー/


管理者用

- Child Tree -