Lightweight C#

Post on 25-May-2015

1.457 views 4 download

description

Niigata.LL (http://atnd.org/events/36394) 用スライド 「C#はLLですが何か?~DynamicLTSVで学ぶ軽量C#」

Transcript of Lightweight C#

C#はLLですが何か? ~ DynamicLTSVで学ぶ軽量C# ~

高野 将 /@masaru_b_cl

2013/3/23

Niigata.LL @ まちなかキャンパス長岡

自己紹介

• 長岡在住 SI屋の開発者

• 兼業主夫

宣伝

3/20に発売されました。 本屋で見かけたらよろしく。

宣伝

LTSVとは

• Labeled Tab-separated Values

詳しくは ltsv.org まで

hoge:foo¥tbar:baz¥n

DynamicLTSV

• LightweightなC#で作ったLTSVライブラリー

• Dynamic! Dynamic! Dynamic!

var line = DynamicLTSV.ParseLine("hoge:foo¥tbar:baz¥n"); Console.WriteLine(line.hoge); // foo var ltsv = DynamicLTSV.Create(); ltsv.hoge = "fuga"; Console.WriteLine(ltsv.ToString()); // hoge:fuga¥tbar:baz

https://github.com/masaru-b-cl/DynamicLTSV

裏側

• 各種アクセスに対する処理を書くだけ

public override bool TryGetMember( GetMemberBinder binder, out object result) { var value = source[binder.Name]; result = new StringMember(value); return true; } public override bool TrySetMember( ...

https://github.com/masaru-b-cl/DynamicLTSV/blob/master/DynamicLTSV/DynamicLTSV.cs

どこがLightweightなんだよ!

• API

– これ以上ないくらいにLightweightでしょ?

– [“key”]とかいらないし

var line = DynamicLTSV.ParseLine("hoge:foo¥tbar:baz¥n"); Console.WriteLine(line.hoge); // foo var ltsv = DynamicLTSV.Create(); ltsv.hoge = "fuga";

どこがLightweightなんだよ!

• 実装は確かにHeavyに見える

–記述量は比較的多いが、 ほぼ定型なので慣れれば問題なし

– TrySetMember/TrySetMemberを始めとした、 Try~をオーバーライドするだけ

– APIの軽さのメリットの方が大きい

public override bool TryGetMember( ... public override bool TrySetMember( ...

どこがLightweightなんだよ!

• 導入

– NuGet一発

– .NETだってパッケージマネージャあるんだぜ

https://nuget.org/packages/DynamicLTSV/

悔しかったら 他の言語で 動的アクセス やってみな!