書いた。

ということで、今日も「小ネタ」休みで「C#7思い出話」の方を書くことにします。

このページのタイトル

このページのタイトルはかなり悩んだ… 実質的にはdiscards(_を使った値の破棄)の話なんですけども。 discards単体だと入れる場所に悩み。

discardsを書ける場所はどこかと考えたら、「変数宣言する場所」なんですよね。 で、「将来的には変数宣言式になるはずだし…」とか、 「というかむしろ、先にアイディアがあったのは変数宣言式で、それを細切れで実装することになったのがC# 7の今の姿だし…」とか、 「とはいえ、C# 7ではまだ入らない機能をタイトルにつける?…」とか、 悩みましたが最終的にはこの構成になりました。

RCから変更ないといったな

14日のブログで書いていますが

11月のリリース候補版の時点でC# 7の全機能そろったといったな。あれは嘘だ。

今のC#って結構、「パターン マッチングという大きな目標を少しずつ実装していってる」って感じなんですが、 そこで迷うのが「どこまでをC# 7としてリリースするのか」という区切り。 当初は、C# 7に入ると言っていた機能、もっと少なかったんですよね。 気が付いたらだいぶ「あっ、それもC# 7に入れてくれるんだ!」みたいな感じに。

なんか、Visual Studio 2017自体、リリース スケジュールが伸びてる感じがするなぁ(あくまで個人の感想です)。 遅れる原因になりそうなものというと、主に.NET Coreがらみのツール類がネックになっていそうな予感がちらほら。

そして、最後の最後まで「まだ未定」になってたのがこのdiscards。 まあ、「既存コードの破壊的変更になりかねない機能」ではあったんで、最後の最後まで悩んだんじゃないかと思います。

wildcards から discards に

なんか、最近名前が変わったんですよね、こいつ。

元々の呼び名は、「どんなパターンにでもマッチするもの」という意味でwildcards(万能札)でした。 関数型言語なんかでは、この何にでもマッチするものを「ワイルドカード パターン」とか呼んでいるので、そこから来ています。 でも、万能と言いつつ、C# 7のやつは(int x, int _) = tuple;みたいな書き方ができます。 int型しか受け付けない、ただ単に値を無視したいだけの_なわけです。 全然ワイルドじゃない。

ってことで、なんかこじゃれたアイディアが降りてきたのがdiscards(破棄)。 discardsって、破棄の他にカード ゲーム用語で「捨て札」の意味があります。 というか、cardってついてることからわかる通り、むしろそっちが原義。 wildcardsからdiscardsへの、カード ゲーム用語由来の単語同士だし、 語感も似ててなんかよさそう! みたいな感じで気が付いたら呼び名が変わっていました。

* から _ に

discards用にどの記号を使うかも結構最近まで悩んでたんですよね。 最終決定したのは、以下のブログを書いた頃。

このブログでも書いている通り、*?か、それとも_にするかで悩んでいました。

そのリンク先のデザイン ミーティング議事録によれば、 決定したのは10月25日。 Visual Studio 2017のリリース候補版が出たのが11月16日なので、その高々2・3週間前にそういう決定しますか… という感じで。

まあ、間違いなくC# 7で一番の難産機能。 なので、個人的にはもしかしたらC# 7に入らないかなぁとか思ってたんですけどね。 なんとか間に合うようです。