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

わんくま同盟

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

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


(過去ログ 53 を表示中)
■29182 / )  Re[2]: 行末のセミコロンの省略
□投稿者/ よねKEN (217回)-(2008/12/05(Fri) 09:56:22)
2008/12/05(Fri) 10:05:35 編集(投稿者)

VBもC#も使う人ですが、それぞれの言語を行き来するときに;のあり/なしの
罠に少し嵌ってから慣れるという過程を毎回踏んでいます。
行末セミコロンの有無はすぐ慣れるのでどっちでもいいんですが、
面白そうなのでコメントします。

その前に下位互換って言葉が個人的にわかりにくいので確認しておくと
「過去のコンパイラでコンパイル可能な過去のコード、
 新しいコンパイラでコンパイル可能な新しいコード
 のどちらも新しいコンパイラでコンパイルできること」
でいいですかね?

あんどちんさんの例
> int a = 0; float b = 1.0;

この場合は最後の「;」は省略可能として、
int a = 0; float b = 1.0
というように省略できればOKですね。

NyaRuRuさんのJavaScriptでの話の例
> また,JavaScript では
> a = b + c
> (d + e).print()
> は,
> a = b + c(d + e).print()
> の意味になるとか.

こういうようなパターンの場合があると、2通りの解釈ができるので「;」を省略可能とするには、
どちらかの解釈に寄せなければならず、Warningで対処などになり、互換性はどこかで犠牲になりますね。

> # 個人的には,次期 VisualBasic で検討中といわれている行継続の省略に関しても,似たような病的なケースが無いか多少気がかりだったりします.

VS2010CTPで現時点の実装の確認はできますね。
私もどはまりするパターンがありそうで怖いなと思っています。
(自分が普通に書くコードでは問題が起きるとは思わないけど)

--脱線ここから--
Dim s =
"あ"

こういうコードが書けます。"あ"の代わりに関数が来たら?
Dim s =
f("あ")

確か実験した範囲ではDim s = f("あ")の意味で解釈されました。
では、以下のようだったら?
Dim s = f
("あ")

VBの場合、変数は定義しなくても使えます。fは変数か?変数だとして、
fの中身がデリゲートだったら?ローカル変数fと関数fが定義されていたら?
文脈の解釈で怪しい結果になるパターンがあるなら、その仕様の導入は避けた方が無難かなと思います。
--脱線おわり--

ところで、今のC#は下位互換性は1.0から完全に保たれているのでしょうか?

うろ覚えですが、(削除)
<修正>
↑うろ覚えで書いた内容の根拠が見つけられないので、限りなく誤情報書いたっぽいので削除します。
<修正>

返信 編集キー/


管理者用

- Child Tree -