2017年03月07日

「実戦で役立つ C#プログラミングのイディオム/定石&パターン」



実戦で役立つ C#プログラミングのイディオム/定石&パターン

2017年2月18日発売。

本格的なC#入門書です。基本的な文法から現在主流となっている技術などを短いサンプルコードで簡潔に説明されています。

本のタイトルどおりの内容でした。文法を知ってる、ライブラリを知っているという状態から、それをどういう場面でどのように使うのかを懇切丁寧に説明してあります。

コレクションのメソッドでどんなのがあってどういう時に使うのか、シリアライズって?Linqって?Entity frameworkってどうなん?ってことがよくわかるように構成されています。

コメントって // /// /* */ ってのは知ってるけれど、どういう観点でどこに何を書けばいいのかなんて説明はあまり見かけない貴重なものです。

実際にコードを書いている人による机上の理想論ではない現場主義の解説です。良書でした。

入門書にも最適ですよ。
posted by RR at 20:26 | Comment(0) | 書籍 | このブログの読者になる | 更新情報をチェックする

2017年03月09日

Visual Studio 2017 インストール手順

2017年03月07日にC#等の.NET系開発に欠かせない統合開発環境であるVisualStudioの最新版Visual Studio 2017が正式にリリースされました。

マイクロソフトの公式サイトではVisual Stuido2015とか2017RC版なんて表記がまだ残っていたりしますが、2017の正式版です。

VS2017のシステム要件は以下で確認できます。

Visual Studio 2017 製品ファミリのシステム要件

インストーラは以下で取得できます。

Visual Studio Downloads

VS2017_download.PNG

現在はこんなページになっています。
個人使用なら左側のCommunity版が該当します。青い背景に白文字でFree downloadというのがリンクボタンになっていて、押下するとインストーラをダウンロードできます。
1Mほどのサイズなのであっという間です。

インストーラを起動すると以下のような画面が表示されます。

vs2017_install_01.PNG

そのまま「続行」を続けていくとこんな画面でインストールする対象を選べます。

vs2017_install_04.PNG

右上の「.NETデスクトップ開発」か左中段の「ASP.NETとWeb開発」など必要なものを選択しましょう。
インストール後でもいつでも追加でインストールすることも可能です。

タブを切り替えて個別に選択もできます。

vs2017_install_09.PNG

適当に必要そうなものを選んでインストール続行すると15分ほどでインスコ完了です。
vs2017_install_06.PNG

「起動」と選択すると無事Visual Studio2017が立ち上がりました。言語はデフォで日本語です。

途中OSの再起動1回あってキャプチャ撮りながらで20分ほど。速くて簡単になったものです。

posted by RR at 00:37 | Comment(0) | 開発環境 | このブログの読者になる | 更新情報をチェックする

複数の値を返す方法 C#7.0版ではタプル型を使う

Visual Studio 2017正式版がリリースされたので、早速インストールして新登場C#7.0を試してみました。

相変わらず公式な言語仕様はどこにも公開されていないようですが、新機能のTupleで躓きました。

Tuple自体は.NET4.0で追加されたクラスでしたが、今回はC#の言語機能として追加されいます。
以下のように複数の値を纏めて扱えます。

       public (int height,int wieght) GetValues7(int index)
        {
            return (175, 60);
        }
しかしコンパイルが通りません。こんな例外です。

コンパイラの必須型'System.Runtime.CompilerServices.TupleElementNameAttribute'が見つからないため、タプルを利用するクラスまたはメンバーを定義できません。参照が指定されていることを確認してください。定義済みの型'System.ValueTuple2'は定義またはインポートされていません

だそうです。どうやら参照が必要らしい。調べてみるとSystem.ValueTuple.dllへの参照が必要なようです。Nugetします。

SystemValueTuple.PNG
↑よく読み取れませんが、System.ValueTupleで検索してヒットしたのを選択してインスコしました。
作成者がMicrosoftでProvides the System.ValueTuple structs,which implement the underlying types of C# 7.0 tuples.とあります。

これでコンパイルが通って正常に実行できました。
posted by RR at 22:42 | Comment(0) | Tips | このブログの読者になる | 更新情報をチェックする

2017年03月12日

Rider Visual Studioではない.NET用開発環境

rider.PNG

C#を含む.NET系の開発で使われる開発環境といえばVisual Studioで無問題。

ExpressやCommunity版といった無償版がリリースされるに至り、他の選択肢を考慮する理由は事実上ありませんでした。

機能が不足してるのならAddinや他のツールと統合させることもできますしね。

そんな中でVSとは違う.NET向けの統合開発環境が作られています。開発元はJetBrains社。

Rider という製品です。 https://www.jetbrains.com/rider/

Java言語系の開発でEclipseに次いで利用者の多いIntelliJとVisualStudioのアドインで有名なReSharperをもとに作られたクロスプラットフォームの統合開発環境だそうです。そういわれると期待値は高い。

VSにResharper載せて開発している方やIntelliJ使用経験者やMicrosoftアレルギーの方などはお試しする価値ありますよ。
posted by RR at 11:59 | Comment(0) | 開発環境 | このブログの読者になる | 更新情報をチェックする

祝日の求め方 その2

休日はカレンダークラスにあるGetDayOfWeekメソッドを使えば曜日が取れます。

祝日は共通ライブラリからは取れません。いつが祝日かわからないからです。

基本的には「国民の祝日に関する法律」という法律で決まっていますが、常に改正される可能性がありますし、特別法などにより変わってくる可能性があるためです。

そのため、休祝日カレンダーなどが必要となるシステムでは、祝日カレンダー(若しくは営業日カレンダー等)のデータを自前で保持することになります。若しくは内閣府のこちらのページやGoogleカレンダーなどから取得するコードやサービスを用いたりします。

こういうのは内閣府なり国立天文台なりがAPIでも公開すればいいのになんて議論は何度もあったのですが、その声が届いたのか、休日データがCSV形式で公開されました。

最初に公開されたCSVはコンピュータで処理することを前提としない糞みたいな内容であり、こうしたサービスを期待していたエンジニア全員から多くの嘲笑と非難とを集めましたが、その内容を汲み取った形跡が伺えるフォーマットにシレっとなおしてありました。

修正後も問題はあるんですが、とりあえずないよりましですので、これをC#から使う方法の紹介です、

CSVのパスはここです。

http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv

このパスからデータを読み取るコードは以下になります。

            // add reference to System.Web.dll
            string _path = @"http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv";
            var client = new System.Net.WebClient();
            byte[] buffer = client.DownloadData(_path);
            string str = Encoding.Default.GetString(buffer);

こんなデータが取得されます。

国民の祝日月日,国民の祝日名称\r\n2016-01-01,元日\r\n2016-01-11,成人の日\r\n2016-02-11,建国記念の日\r\n2016-03-20,春分の日\r\n2016-04-29,昭和の日\r\n2016-05-03,憲法記念日\r\n....

改行コードで分割して一行目のタイトルを飛ばして日付と名称の辞書を作るにはこんな感じ

            var dic = new Dictionary<DateTime, string>();

            string[] rows = str.Split(new string[] { Environment.NewLine },StringSplitOptions.RemoveEmptyEntries);

            rows.Skip(1).ToList().ForEach(row =>
            {
                var cols = row.Split(',');

                dic.Add(DateTime.ParseExact(cols[0], "yyyy-MM-dd", null), cols[1]);
            });

ここまでくれば、どうとでも使えますかね?

やはり無理だよなぁ。いつまでサービスが続くのか、フォーマットが維持されるのか、いつデータ変更されるのか、パスは一定なのか、何の保証もないんだもの。

内閣府も折角なので、ちゃんと作ろうよ。みんな期待しているよ。

posted by RR at 18:12 | Comment(0) | Tips | このブログの読者になる | 更新情報をチェックする

2017年03月16日

C#7.0 の言語仕様はどこにある?

VisualStudio2017が正式リリースされ、C#の言語仕様も7.0版に上りました。

追加になった機能や文法について各所で紹介されてはいますが、マイクロソフト自身の公式な仕様はどこにあるんでしょうか。

VS2015がリリースされC#が6.0版になった時もMSからの正式な言語仕様はリリースされなかったことから、今回も出ないのかもしれません。

VS2017をインストールするとデフォの設定なら以下に言語仕様のファイルがあるはずです。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC#\Specifications\1041\CSharp Language Specification.docx

覗いてればわかりますがこれ5.0版のもので5年以上更新されてないことが伺われます。

MSDNのポータルはここ。

C# 言語仕様

2017RC版のドキュメントへの参照があるので辿ってみるとここ。

What's new in C# 7

2016年12月21日に記述された記事で英語版のみ。新機能の説明なのでC#5.0からの追加機能という位置づけなのでしょうか。6.0と同様に包括的な言語仕様は纏められないのかもしれません。

そうであるなら、MSの開発者ブログにある以下の記事の方が新しく詳しいです。2017年3月9日の記事です。

New Features in C# 7.0

日本語の記事だとRC版のものでの説明なら見つかりますね。

.NET Framework - C# 7.0 の新機能

posted by RR at 00:29 | Comment(0) | 規約・参考サイト | このブログの読者になる | 更新情報をチェックする