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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.29161 の関連記事表示

<< 0 | 1 >>
■29161  行末のセミコロンの省略
□投稿者/ やじゅ -(2008/12/04(Thu) 21:58:05)
>

    分類:[C#] 

    VBerの私ですが最近C#をいじり始めました。
    さて、C系の言語といえば、行末のセミコロンは必須だったりするわけですが
    RubyやJavaScriptなどのLL言語でも行末はセミコロンではありますが、省略
    可能になっております。

    将来的に、C系言語でも行末のセミコロンの省略の動きは出てくるのでしょうか?

    まー端的にいえば、邪魔(^^;
親記事 /過去ログ53より / 関連記事表示
削除チェック/

■29163  Re[1]: 行末のセミコロンの省略
□投稿者/ 出水 -(2008/12/04(Thu) 22:09:16)
    そんな変更があったら下位互換性が取れないから、どう考えてもないです
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29169  Re[2]: 行末のセミコロンの省略
□投稿者/ まさる -(2008/12/05(Fri) 00:16:34)
>
    No29163 (出水 さん) に返信
    > そんな変更があったら下位互換性が取れないから、どう考えてもないです

    むしろVBにセミコロンを採用してくれないかな・・・と思う程度のC系言語脳。
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29170  Re[3]: 行末のセミコロンの省略
□投稿者/ ちゃっぴ -(2008/12/05(Fri) 00:29:05)
>
    > むしろVBにセミコロンを採用してくれないかな・・・と思う程度のC系言語脳。

    結構改行よく使うので、";" 打つ方がいいと思っている今日この頃。
    見た目でも結構わかりやすいと思いますよ。

    言語は全く違うけど、SQL Server を command line で扱うとき、"GO" 叫ぶの忘れるんだよな。
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29182  Re[2]: 行末のセミコロンの省略
□投稿者/ よねKEN -(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から完全に保たれているのでしょうか?

    うろ覚えですが、(削除)
    <修正>
    ↑うろ覚えで書いた内容の根拠が見つけられないので、限りなく誤情報書いたっぽいので削除します。
    <修正>
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29181  Re[3]: 行末のセミコロンの省略
□投稿者/ たくボン -(2008/12/05(Fri) 09:50:01)
    No29169 (まさる さん) に返信
    > ■No29163 (出水 さん) に返信
    > むしろVBにセミコロンを採用してくれないかな・・・と思う程度のC系言語脳。

    セミコロンはありませんが、コロンならBASICの時代からありますよ:-)
    ただ、全ての行にコロン書いたらものすごく可読性悪くなりますが。。。

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

    おそらくプリコンパイラ時にラムダとかで解決するんだと思うけど、頭良くないからいまいち信用できない。しばらくは色々と問題出るかもしれませんね。

    # っていうか、こんな機能でコンパイルの時間を取るくらいなら.NET全体のパフォーマンスを上げて欲しい今日この頃・・・orz
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29185  Re[3]: 行末のセミコロンの省略
□投稿者/ みきぬ -(2008/12/05(Fri) 10:08:33)
    No29182 (よねKEN さん) に返信
    > ところで、今のC#は下位互換性は1.0から完全に保たれているのでしょうか?
    >
    > うろ覚えですが、(削除)
    > <修正>
    > ↑うろ覚えで書いた内容の根拠が見つけられないので、限りなく誤情報書いたっぽいので削除します。
    > <修正>
    >
    私もうろ覚えだけど、C# 3.0 になったときに何かなかったっけ? ラムダ式とかそのへんで。
    # と思って根拠探しているけど見つからない罠
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29189  Re[3]: 行末のセミコロンの省略
□投稿者/ Chuki -(2008/12/05(Fri) 11:20:28)
    行継続は、宣言とか呼び出し内のカンマで区切られるトークン部分だけにして欲しいと願う今日この頃。
    #宣言時にだらだら横に長く書いちゃうのもキモイ、 , _ キモイ。
    No29182 (よねKEN さん) に返信
    > 2008/12/05(Fri) 10:05:35 編集(投稿者)
    >>># 個人的には,次期 VisualBasic で検討中といわれている行継続の省略に関しても,似たような病的なケースが無いか多少気がかりだったりします.
    >
    > VS2010CTPで現時点の実装の確認はできますね。
    > 私もどはまりするパターンがありそうで怖いなと思っています。
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29197  Re[3]: 行末のセミコロンの省略
□投稿者/ やじゅ -(2008/12/05(Fri) 13:25:34)
>
    みなさん、コメントありがとうございます。
    なんか、よねKENさんの回答がよさげで、私が特に書くことなくなってしまったかな。

    なにげに、奥が深いですね。

    VBerの私は、セミコロンは「顔文字(^^;」の時に使うくらいです。
    最近はJavaScriptとかRubyも少ししかさわってないので。
    キーボードのセミコロンは汚れてないや
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29174  Re[1]: 行末のセミコロンの省略
□投稿者/ アキラ -(2008/12/05(Fri) 02:28:29)
>
    2008/12/05(Fri) 02:29:10 編集(投稿者)

    二重投稿のため削除
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29173  Re[1]: 行末のセミコロンの省略
□投稿者/ アキラ -(2008/12/05(Fri) 02:27:28)
>
    2008/12/05(Fri) 02:28:25 編集(投稿者)

    No29161 (やじゅ さん) に返信
    C系と言っていいのかわかりませんが、Scalaはセミコロン省略できます。
    (メンバにアクセスするための . や、関数呼び出しのカッコも省略できます)

    Scalaを学べば、C++やC#のような言語でも下位互換性を保ったまま
    セミコロンを省略可能にするのは不可能ではないと思えます。
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29175  Re[1]: 行末のセミコロンの省略
□投稿者/ NyaRuRu -(2008/12/05(Fri) 04:35:46)
    2008/12/05(Fri) 05:36:49 編集(投稿者)
    2008/12/05(Fri) 05:31:36 編集(投稿者)
    2008/12/05(Fri) 04:43:54 編集(投稿者)
    2008/12/05(Fri) 04:38:56 編集(投稿者)

    No29161 (やじゅ さん) に返信
    > RubyやJavaScriptなどのLL言語でも行末はセミコロンではありますが、省略
    > 可能になっております。

    JavaScript に関してですが,

    return 1

    return
    1

    の意味が違うみたいですね.

    http://shinh.skr.jp/m/?date=20071124#p05
    http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.9

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

    この辺を参考にしてみると,C# で (ECMAScript 方式の) 行末のセミコロンの省略を導入したときに何が起きるか何となく見えてくる気がします.
    まず return 1 に関しては C# では曖昧性は表れなさそうですが,throw は引っかかりそうです.
    C# では,既に以下のようなコードが書かれている可能性があるので
    throw
    new Exception();
    このコードの意味が変わらないような省略ルールでなければなりません.

    また,丸括弧が関数 (デリゲート) 呼出しに使われている点にも注意が必要そうです.つまり,
    Func<string,string> f;
    string s;
    とあったときに,
    var a = f
    (s+"!").ToString();
    のようなコードが既に書かれていてもおかしくないわけですが,このコードの意味を変えないようなルールにしなければなりません.
    つまり,次のトークンが括弧で始まる場所では,セミコロンを省略した形で var a = f と書けないことが起こりえます.

    # 個人的には,次期 VisualBasic で検討中といわれている行継続の省略に関しても,似たような病的なケースが無いか多少気がかりだったりします.
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29179  Re[2]: 行末のセミコロンの省略
□投稿者/ あんどちん -(2008/12/05(Fri) 09:15:20)
    セミコロンはそもそも1センテンスの終わりであって行末の終わりじゃないです。

    int a = 0; float b = 1.0;

    コンパイラで通りますよね?

記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29183  Re[3]: 行末のセミコロンの省略
□投稿者/ .SHO -(2008/12/05(Fri) 10:02:19)
    if や for while などの実行文が1行の場合でも
    必ず {} で囲まなければいけない仕様に変更しなければ無理です。
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29187  Re[4]: 行末のセミコロンの省略
□投稿者/ 渋木宏明(ひどり) -(2008/12/05(Fri) 10:31:57)
>
    > 私もうろ覚えだけど、C# 3.0 になったときに何かなかったっけ? ラムダ式とかそのへんで。
    > # と思って根拠探しているけど見つからない罠

    C# 3.0 だけでなく、毎回ちょびっとずつは互換性を損なう変更が行われているはず。

    C# "braking change"
    http://search.live.com/results.aspx?q=C%23+%22braking+change%22&go=&form=QBRE
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29206  Re[2]: 行末のセミコロンの省略
□投稿者/ NyaRuRu -(2008/12/05(Fri) 14:06:35)
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29207  Re[3]: 行末のセミコロンの省略
□投稿者/ .SHO -(2008/12/05(Fri) 14:11:50)
    No29206 (NyaRuRu さん) に返信

    > x = 10 *
    > (1
    > + 2
    > + 4)
    >
    > x の値は 40 になるそうで.

    めんどくさっ^^;
    ; 使う仕様の方がわかりやすいですね。
    慣れかな?
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29208  Re[4]: 行末のセミコロンの省略
□投稿者/ あんどちん -(2008/12/05(Fri) 14:26:59)
    a = 長い名前の関数()
    + 別の長い名前の関数();
    って書いたほうが見やすい場合もありますよね。

    C/C++の場合プリプロセッサが展開したマクロが必ず改行どおりにならない場合もあります。
    #define hoge(a,b) \
    長い関数名a(a) + \
    長い関数名b(b) \

    c = hoge(1,2);
    としたときに
    c = 長い関数名a(a) + 長い関数名b(b);
    と展開される場合もあります。

    その辺を考えるとセミコロンあったほうがコンパイラの実装楽なんじゃないでしょうか?


記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29211  Re[5]: 行末のセミコロンの省略
□投稿者/ あんどちん -(2008/12/05(Fri) 14:38:09)
    No29208 (あんどちん さん) に返信
    > C/C++の場合プリプロセッサが展開したマクロが必ず改行どおりにならない場合もあります。
    > #define hoge(a,b) \
    > 長い関数名a(a) + \
    > 長い関数名b(b) \
    >
    > c = hoge(1,2);
    > としたときに
    > c = 長い関数名a(a) + 長い関数名b(b);
    > と展開される場合もあります。
    >

    この辺はおかしなこと書いちゃったから無しで^^;

    かわりに別の意見を
    C/C++の場合こう書くと文字列が連結されます
    char* p = "hogehoge"
    "hogehoge";

    char* p = "hogehogehogehoge"
    と同じです。



記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

■29210  Re[5]: 行末のセミコロンの省略
□投稿者/ .SHO -(2008/12/05(Fri) 14:37:55)
    No29208 (あんどちん さん) に返信

    > その辺を考えるとセミコロンあったほうがコンパイラの実装楽なんじゃないでしょうか?

    「error CS1002: ; が必要です。」というコンパイルエラーがよろしくないですね。

    そんなこと言うなら勝手に付けてくれよ!
    つか、そんなことわかるならセミコロンいらない仕様にしてくれ!
    と言いたくなるのも、わからなくもないです^^;
記事No.29161 のレス /過去ログ53より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 >>

パスワード/

- Child Tree -