++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

dotNetConf 2015 Japan with JXUG

leave a comment »

dotNetConf 2015 Japan で登壇してきました。

OneDrive にも: https://onedrive.live.com/view.aspx?cid=5C622397E11C979D&resid=5c622397e11c979d%21224309&app=PowerPoint

祝15周年

自己紹介に、しばらく入ると思います。祝15周年。

うちのサイト、ほんとに C# が表に出たのと同じ年からやってる(2000年に発表、CTP提供)ので、C#が15周年ならうちも15周年。正確に言うと、C# のプレスリリースが出たのが6月で、うちのサイトがパブリックになったのは年末なので、半年程度のラグはあるんですが(サイト作った当初は当時在籍中の大学内ローカルだった)。

そりゃおっさんにもなるわ。

.NET 系の勉強会もやっぱり .NET と共に平均年齢上がってたりして、たまーに見かける若い人が委縮していたり(というのが今日もいらっしゃったり)しますが。今、マイクロソフト自身も、.NET も、新しい世代が新しいことやってる勢いがあるので、若い人もおっさんに負けずに紛れ込んでほしいなぁと思ったり。あと、.NET 系(も取り上げる)勉強会で言うと、プロ生とかUnity部とかはかなり若い感じするので、そういうところに行ってみるのもおすすめ。

個人的には、代替わりって結構好きでして。代替わりが好きというか、世代間断絶みたいなのが嫌いというか。.NET の偉大なる父というと Anders ですけども、応援したいのはむしろ ScottGu (Azure 系の偉い人)とか Mads (C# の偉い人)だったり。

もう1回

4/17 にも、【第9回 Sansan .NET勉強会】dotNetConf 2015を振返る とか言うのやります。

僕のやつ、今日はスライド資料見せて話すだけで、デモとか一切なかったですが。あるいは、「時間が余ったら話す」的なスライドが結構ありまして、その辺りも「やり残し」ではあります。この辺り、4/17 に話すかも!(実際のところ、ノープラン。その場の空気見て具体的にどう話すか考えようかと)

まあ、正直なところ、今、時期が大変よいので、C# 6.0とか7.0がらみはノープランでもいくらでも話すことがあったりして。ゴールデンウィークは(引きこもりとしては大変遺憾ながら帰省するついでに)大阪で ++C++とC#++について駄弁る会- #vshtc とかもやったりします。

nameof

そうそう。おまけ。

世の中には、社内で「int 派 VS System.Int32 派」とかいう派閥争いをしている会社があるそうでして。

C# 6.0 で(というか Roslyn 化で)、以下のような地味ーーな新機能も実は入っていたりします。つまり、今までは Int32派の分が悪かった。


enum X : System.Int32 // C# 5.0 までは int としか書けなかった
{
A, B, C,
}

view raw

Int32Enum.cs

hosted with ❤ by GitHub

地味なので、僕なんかも「ああ、言われてみれば」くらいの感想だったんですけども、Int32派曰く「当然知っていたけども、言うと立場が悪くなるだけだから黙ってた」そうでして。

さて、今日のスライドで、nameof のところで特に触れなかった話題が1つ。↓これ。


var name1 = nameof(System.Int32); // OK
var name2 = nameof(int); // コンパイル エラー

view raw

nameof_int.cs

hosted with ❤ by GitHub

nameof 式の中に書けるのは識別子(変数名とかプロパティ名とか)だけで、キーワードは書けない。結果、nameof(int) はコンパイルできないわけですが。これを、件のInt32派がInt32擁護に使ったりするそうで。

いや、その理屈はおかしいだろ。

nameof はリファクタリング都合で使うものです。nameof(X) に対して、X を一斉リネームした時に、リファクタリング漏れがないように使うもの。nameof(int) って。int (キーワード)をリネームする気かよ。

まあ、そんな問題よりも、今日話せなかった nameof 式の問題として、実は以下のようなものがあったり。

nameof 式、結局、C# 6.0 ではメソッドのオーバーロードを解決できません。例えば、以下のようなコード(メソッド X のオーバーロードが2つある)を書いて、X をリネームしても、nameof(X) のところは変化させれなかったりします。nameof(X) だけではどっちのXなのか区別がつかないので。


using static System.Console;
public class Program
{
static void Main()
{
WriteLine(nameof(X));
}
static void X(string s) { }
static void X(object o) { }
}

Written by ufcpp

2015年4月11日 @ 23:48

カテゴリー: 未分類

コメントを残す