書いた。
ということで、今日も「小ネタ」休みで「C#7思い出話」の方を書くことにします。
このページのタイトル
このページのタイトルはかなり悩んだ…
実質的にはdiscards(_
を使った値の破棄)の話なんですけども。
discards単体だと入れる場所に悩み。
discardsを書ける場所はどこかと考えたら、「変数宣言する場所」なんですよね。 で、「将来的には変数宣言式になるはずだし…」とか、 「というかむしろ、先にアイディアがあったのは変数宣言式で、それを細切れで実装することになったのがC# 7の今の姿だし…」とか、 「とはいえ、C# 7ではまだ入らない機能をタイトルにつける?…」とか、 悩みましたが最終的にはこの構成になりました。
RCから変更ないといったな
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に入らないかなぁとか思ってたんですけどね。 なんとか間に合うようです。