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

       高野 将 /@masaru_b_cl
             2013/3/23
Niigata.LL @ まちなかキャンパス長岡
自己紹介
• 長岡在住 SI屋の開発者
• 兼業主夫
宣伝



3/20に発売されました。
本屋で見かけたらよろしく。
宣伝
LTSVとは
• Labeled Tab-separated Values


    hoge:foo¥tbar:baz¥n



            詳しくは ltsv.org まで
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/
悔しかったら
他の言語で
動的アクセス
やってみな!

Lightweight C#