読者です 読者をやめる 読者になる 読者になる

xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

C# 7 をライブコーディングで解説してきました vol.3

10/22 (土)、日本マイクロソフト品川本社でCLR/H in Tokyo 第 11 回が開催され、そこに参加/登壇してきました。ハッシュタグは #clrhtky11。 ハロウィンデーということで謎のハロウィン仮装という辱めを受けながら頑張りました!...「無難じゃね?」という声…

C# 7 のサンプルコードを GitHub に公開しました

C#

これまで C# 7 の新機能を検証するときは何度もサンプルコードを作って / 消してを繰り返していたのですが...、ぎたぱそ先生 (@guitarrapc_tech) に「作ってくれたら僕が喜ぶ!」と言われたのもあって、約束を守るために一念発起してまとました! @guitarrap…

ラムダ形式メンバーの拡張

C#

2016/09/24 (土) の朝、Expression-Bodied Everything (= どこでもラムダっぽく) に関する Pull-Request が Roslyn の master ブランチにマージされました! C# 6 ではプロパティとメソッドの 2 箇所についてラムダ形式のメンバーを記述することができました…

throw 式

C#

2016/09/21 (水) の朝方、throw 式に関する Pull-Request が master にマージされました!これにより、これまでステートメント (文) としてのみ提供されていた throw を式として記述できるようになります。 throw 式が使えるところ パッと確認した範囲では、…

Roslyn の開発進捗が更新されました - 2016/09/21

2016/09/21 (水) の朝方、とある Pull-Request のマージにより Roslyn の開発状況/進捗 (Language Feature Status) が更新されました。でも実際に変更を加えたのは 2016/08/30 (火) っぽいので、約 1 か月前から決まっていた内容です。 Language Feature Sta…

Roslyn の開発進捗が更新されました - 2016/08/04

2016/08/04 (木) の朝方、Gafter 先生の Pull-Request が master にマージされ、それにより Roslyn の開発状況/進捗 (Language Feature Status) が更新されました。 以下はその引用です。 C# 7 / Visual Basic 15 に搭載予定 Feature Branch State Address o…

任意の型を戻り値に持つ非同期メソッド

C#

これまでの非同期メソッドは void / Task / Task<T> のいずれかを戻り値にしなければならないという制約がありました。 非同期メソッドが C# 5 で導入されてから早 4 年。もはやこれを「制約」と感じることはほとんどないくらい馴染んでしまっていますが、C# 7 </t>…

C# 7 をライブコーディングで解説してきました vol.2

7/16 (土)、福井大学でソフトウェア技術者サミット in 福井 2016が開催され、そこに参加/登壇してきました。ハッシュタグは #sesfukui (Software Engineer Summit in Fukui)。 開催の運びとなったのは VSUG DAY - THE FINAL - の懇親会で僕の師匠である小島…

型分解 - タプルから変数への展開

C#

7/12 (火) の早朝、長らく検討/開発されてきた待望の Deconstructions (= 型分解) が Roslyn の master ブランチにマージされました!(型分解というのは僕のテキトーな訳で、正式名称は未定) タプル構文が複数の値をひとつにまとめる機能だったのに対し、Dec…

変数宣言式

C#

約一か月前に C# 7 の新機能についてライブコーディングをしたと思ったら、もうその情報だけでは足りていなくて焦っている今日この頃。 あれから Roslyn のリポジトリ には大きな変化がありました。 future ブランチが master ブランチにマージされた! いく…

LINQ 大好き C#er がアイドルグループ LinQ のセットリスト考えてみた

C#er といえば LINQ が大好き!もちろん LinQ も大好き!? 昔は Twitter で LINQ と呟けば LinQ のメンバーさんにフォローされたり Fav されたりしたものでした。その頃から「せっかく LinQ なんて超素敵な名前だったら LINQ を題材にしたアルバムでも作れ…

C# 7 をライブコーディングで解説してきました

ここまで数回に渡って C# 7 の新機能について解説してきました。記事は以下にまとめてありますので是非ご覧ください。 と、そんなこんなまとめていたのを「C# ユーザー会 //build/ 2016 振り返り勉強会」で解説してきました。当日の朝にクローンしてきたばっ…

型スイッチ

C#

F# などの関数型言語をやっている方にはおなじみのパターンマッチング。「10 年おせーよ!」と言われそうですが、C# 7 にもそんな待ちに待った (?) 機能が搭載されそうです。主に既存の is キーワードと switch キーワードを拡張した、型に対するマッチング…

タプル構文 - 多値戻り値のサポート

C#

C# 7 では言語機能としてタプル (複数の値をまとめる) 構文 がサポートされそうです。これまでも複数の値を簡易的にパッケージングする機能として System.Tuple<T1, T2, ...> が提供されていましたが、より可読性が高く、パフォーマンスが良くなる形になる見込みです。例</t1,>…

最新の C# コンパイラ を利用してビルド/デバッグしてみた

そんな方法はひとつしかない、リポジトリをクローンしてビルドすることだ ということでやってみましょう!ちなみにこの記事は 5/9 現在の情報を基に書いています。近い将来に変更になる可能性は多分にありますので、その点ご了承ください m( )m Step.1 - Ros…

ローカル関数の使いどころ - LINQ 拡張 -

C# 7 で搭載予定のローカル関数。その詳細は以下を参照いただくとして、どういうケースで使えそうかと考えていたら「あ、そうか LINQ だ!」と思ったので紹介します。 yield (遅延評価) の罠 と書くだけで察しの良い方はお気付きかと思いますが、yield を含…

ref 戻り値 / ref ローカル変数

C#

今回は ref 戻り値 (Ref Returns) と ref ローカル変数 (Ref Locals) について見ていきます。それぞれの機能は端的に言うと以下のようなものです。 名称 機能 Ref Returns メソッドの戻り値を参照として返す Ref Locals 値を参照として受ける C++ に嗜みがあ…

ローカル関数

C#

コードを書いていると、稀に関数の中に「そこでしか使わない関数」を作りたくなる場合があります。例えば再帰処理などはその最たるものかと思います。C# 6.0 まではデリゲートを駆使して以下のように書いていました。 static void Main() { //--- 再帰処理し…

数値セパレーター

C#

C# 6.0 までの数値リテラルでは、桁数がどれだけになっても区切り文字を入れることができませんでした。今回 C# 7 で数値セパレーター (= Digit Separators) という機能が追加され、数値リテラルを自由に桁区切りしてグルーピングできるようになりました。 …

2 進リテラル

C#

すでに当たり前のように使っている機能ですが、C# 6.0 までは整数リテラル (整数値を表記する方法) として 10 進数と 16 進数がサポートされています。10 進数はそのまま数字を並べるだけ、16 進数は数値の前に 0x / 0X の接頭辞を付けます。 var dec = 123;…

Visual Studio 15 Preview で C# 7 を試す

C#

2016/03/30、Microsoft が開催したビッグイベント //build/ 2016 に合わせて Visual Studio 15 Preview が公開されました。 Visual Studio "15" Preview Downloads 今回の //build/ では bash が Windows 上でネイティブで動いたり、Bot Framework が公開さ…

DeclarativeSql v0.2.2 リリース

ちょうど 2 ヵ月前にリリースした DeclarativeSql v0.2 をマイナー更新し、v0.2.2 をリリースしました。最近 v0.2 系を使ってくださっている会社さんがあるとの連絡を受けまして、内心かなり嬉しく思っています :) 今回はマイナーということで機能改善がメイ…

30 分のライブコーディングでテトリス作った

2016/2/20 (土)、Japan ComCamp 2016 powered by MVPs という Microsoft MVP が中心となったイベントが全国一斉に開催されました。僕は例年通り北陸エリア (金沢開催) を担当していて、毎年恒例で超大好評の C# MVP によるドキドキ・ライブコーディング対決…

Null 許容型の既定値付き文字列変換

タイトルはそれっぽいですが、大したことありません。何度も作るのがめんどくさいのでメモとして残しておこうというだけのカジュアルなものです。 Null 許容型の文字列化 Web でもクライアントでもそうですが、MVVM 的な考え方をする場合に「データとしては …

DeclarativeSql v0.2 リリース

もう半年以上前から構想はしていたけれど、案の定 (?) 放置し続けてきた自作のデータベースアクセス補助ライブラリ DeclarativeSql。搭載したかった機能の中でも特に重要度が高かった機能を詰め込んでアップデートしました。この記事を書いている今現在はま…

IAsyncDisposableについて考えてみた

Visual Studio 2015 も RC (= リリース候補版) となり、C# 6.0 も Go-Live となりました。言語チームは Roslyn という大物の開発に注力していたため、C# 6.0 は細かな使い勝手の向上を中心とした比較的小規模な機能追加となっています。詳細は以下をご覧いた…

北陸新幹線開通記念!北陸・信州合同勉強会に参加してきました

2015 年 3 月 28 日 (土)、北陸新幹線の開通を記念して Hokuriku.NET と JAZUG 信州で合同勉強会を開催しました。多くの方に遠方からお越しいただき、本当に活気に溢れた勉強会となりました。最新の Azure 事情から、地方でスタートアップをする方法や可能性…

パラメーターなし構造体コンストラクタ

C#

C# 5.0 までは構造体 (struct) はパラメーターのないコンストラクタを作ることができませんでした (IL の制約ではなく C# の言語仕様としての制約)。これが結構「ぐぬぬ...」なときがありましたが、C# 6.0 では晴れてこの制限が解放されました。 struct Poin…

paiza.IOの実行環境を覗き見る方法4選

ブラウザだけで様々な言語のコードを即時実行できる、超便利なオンラインプログラミング環境 paiza.IO。前の記事で C# で実行環境を調査するという遊びをやっていました。 C#もOK! paiza.IOでお手軽オンラインプログラミング - xin9le.net 今回はその延長と…

C#もOK! paiza.IOでお手軽オンラインプログラミング

前回書いたオープンデータの記事 (オープンデータ先進県「福井」の残念なデータに思う) が大反響で、非常に多くの方に読んで頂けました。通常の 10 倍以上のページビューが出て、ただただ驚くばかりでした。 オープンデータ先進県「福井」の残念なデータに思…

using staticするとObsoleteが警告されない

Obsolete 属性、使ってますか?「もう古い API だから使わないでねー」とコンパイラ警告を出すて注意喚起するための便利属性です。以下のように利用します。 class Program { [Obsolete("NewMethod を利用してください")] public static void OldMethod(){ .…

MVP Community Camp 2015 資料

富山合同勉強会 .NET & Java ~ぶりしゃぶで休もう~ という、.NET と Java とブリしゃぶがごった煮になった、激アツな勉強会に参加/登壇してきました。ホテルのイベントルームを貸し切って .NET 部屋と Java 部屋に分けてセッションを行い、興味のある方を…

DeclarativeSql

本記事は C# Advent Calendar 2014 最終日向けの記事です。なんとか間に合わせようと心底努力しましたが、業務上年末にシステムリリースがある関係で忙殺されていて全く余裕がなく、結局最終日に穴を空ける結果になってしまいました。ここまで繋いで下さった…

挿入文字列

C#

string.Format メソッドは大変汎用的で便利です。しかし、ちょっとばかり煩雑で、かつ書式文字列内のプレースホルダーの数が合わなかったりするエラーが発生しやすいという傾向にあります。 var p = new Person("xin9le", 30, Sex.Male); var t1 = string.Fo…

インデックス初期化子

C#

バージョン 5.0 現在の C# には「初期化子」と呼ばれる機能が 2 つあります。ひとつはオブジェクト初期化子で、インスタンス生成時にコンストラクタ引数を利用せずにフィールドやプロパティの値を設定するものです。もうひとつはコレクション初期化子で、こ…

.NET Framework 4.5.3でのTask型への機能追加

しばらく前になりますが、2014/10/6 に Visual Studio 14 CTP 4 がリリースされました。そのリリースの中で .NET Framework も更新され、バージョン 4.5.3 となりました。少し触っていたら、Task 型 (System.Threading.Tasks 名前空間) に新しいプロパティと…

Hokuriku.NET vol.15 資料

2014年8月30日 (土)、我らがHokuriku.NET主催の定期勉強会Hokuriku.NET vol.15に参加/登壇してきました。今回は小島さん (@Fujiwo) と一緒にC# MVPsとしてC# vNextの新機能を紹介し、ひとつひとつ解説していきました。参加者のみなさんとの緩いディスカッシ…

Add拡張メソッドによるコレクション初期化子

C#

C# 3.0で導入されたコレクション初期化子をご存知の方は多いと思います。要素を追加した状態でコレクションを生成する機能です。以下のようなものです。 var languages = new List<string> { "C#", "Visual Basic", "JavaScript", }; これは次のコードの糖衣構文です</string>…

nameof演算子

C#

これまでC# vNextの新機能についていくつか紹介してきましたが、個人的にラムダ形式プロパティよりも、null伝搬演算子よりも、catch/finally句で利用できるawait演算子よりもずっと ×2 興奮したのが今回取り上げるnameof演算子 (nameof operator) です。簡単…

ラムダ形式メソッド

C#

前回ラムダ形式プロパティを紹介しました。ラムダ式チックなメンバー (Expression-bodied members) は、Visual Studio 14 CTP 2まではプロパティしか実装されていませんでしたが、一昨日 (2014/08/19) リリースされたVisual Studio 14 CTP 3にはメソッド版も…

ラムダ形式プロパティ

C#

みなさんもGetterだけのプロパティを作った経験があるかと思います。例えば以下のようなものです。 using System.Math; using System.Windows; namespace CSharpVNext { class Circle { public double Radius{ get; }; public Point Origin{ get{ return new…

null条件演算子

C#

三項演算子はひとつの式の中で条件式を表現できて非常に便利です。言うまでもないかもしれませんが、例えば以下のような書き方ができます。 var name = "じんぐる"; return name == null ? "不明" : name; /* //--- 以下と同じ意味 var name = "じんぐる"; i…

例外フィルター

C#

例外処理はtry句でスローされる例外の型に応じて処理を書き分けます。また、ひとつの例外の型でエラー条件が分かれる場合はcatch句の中にif文を書いて分岐します。例えば以下のような感じです。 try { //--- SQL Serverへの何らかのアクセス } catch (SqlExc…

catch/finallyでのawait

C#

C# 5.0で搭載された非同期メソッド (async/await) は、非同期処理を非常に簡単に記述できる言語機能として大変重宝し、愛されています。await演算子は通常のメソッドだけでなくラムダ式内でも利用できるなど、かなり広範囲への適用が可能です。しかし例外処…

変数宣言式

C#

これまで、以下のようなコードを面倒に感じたことはありませんか? static void Main() { try { Console.WriteLine(int.Parse("123")); //--- intに変換できなかったら例外発生! } catch { //--- 失敗したとき } } 絶対失敗しないと保証されているなら例外…

静的メンバーへの簡易アクセス

C#

C#で提供されているusingキーワードは「usingステートメント」と「usingディレクティブ」の2種類あります。このうちusingディレクティブは以下の2つの場合に利用できました。 名前空間の省略 (= 指定された名前空間内の型は名前空間を修飾しないで使用可能) …

プライマリコンストラクタ

C#

今回取り上げるのは「プライマリコンストラクタ」です。テキトーな日本語に直すと「一次コンストラクタ」などといった感じになるのでしょうか。この機能を簡単に説明すると、コンストラクタをひとつだけ定義する機能です。それでは順番に見て行きましょう。 …

自動実装プロパティ初期化子

C#

「Try! C# vNext」ということで、次期C#の新機能を少しずつ試していきたいと思います。まず最初は自動実装プロパティ初期化子 (= Auto-property initializers) です。これまではメンバー変数の初期化はクラス宣言と同時にできたのですが、自動実装プロパティ…

Try! C# vNext

C#

次期バージョンの C# に搭載される予定の新機能を簡単にご紹介

Visual Studio 14 CTPでC# vNextを試す

2014年6月3日にVisual Studio 14 CTPがリリースされました。次世代コンパイラサービスであるRoslyn、クラウド最適化や大幅なライブラリ統合が進んでいるASP.NET vNextが搭載されています。これらだけでも十分お腹いっぱいになりそうですが、我らがC#にも新し…