lightweight c#
DESCRIPTION
Niigata.LL (http://atnd.org/events/36394) 用スライド 「C#はLLですが何か?~DynamicLTSVで学ぶ軽量C#」TRANSCRIPT
C#はLLですが何か? ~ DynamicLTSVで学ぶ軽量C# ~
高野 将 /@masaru_b_cl
2013/3/23
Niigata.LL @ まちなかキャンパス長岡
自己紹介
• 長岡在住 SI屋の開発者
• 兼業主夫
宣伝
3/20に発売されました。 本屋で見かけたらよろしく。
宣伝
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 class DynamicLTSV : DynamicObject { ... }
https://github.com/masaru-b-cl/DynamicLTSV/blob/master/DynamicLTSV/DynamicLTSV.cs
裏側
• 各種アクセスに対する処理を書くだけ
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/
悔しかったら 他の言語で 動的アクセス やってみな!