SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
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/
悔しかったら
他の言語で
動的アクセス
やってみな!

Weitere ähnliche Inhalte

Was ist angesagt?

プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリプロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリ
Yusuke Muraoka
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
わんくま東京#46 予告編
わんくま東京#46 予告編わんくま東京#46 予告編
わんくま東京#46 予告編
Sunao Tomita
 
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
Kazuhiro Fujieda
 

Was ist angesagt? (20)

Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 
RESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScriptRESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScript
 
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLIRios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
 
プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリプロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリ
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
わんくま東京#46 予告編
わんくま東京#46 予告編わんくま東京#46 予告編
わんくま東京#46 予告編
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOps
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
PIAXで作る P2Pネットワーク
PIAXで作る P2PネットワークPIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8
 
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
 
いい感じにグラフ描きたい
いい感じにグラフ描きたいいい感じにグラフ描きたい
いい感じにグラフ描きたい
 
Ppl
PplPpl
Ppl
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術
 
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにするWebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
 
Packagist
PackagistPackagist
Packagist
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
 

Ähnlich wie Lightweight C#

Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
C83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきましたC83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきました
Kiwamu Okabe
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
CategoLJについて
CategoLJについてCategoLJについて
CategoLJについて
Toshiaki Maki
 
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
SwapSkills
 

Ähnlich wie Lightweight C# (20)

Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like databaseオフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
 
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
 
歌舞伎座Tech Rx会
歌舞伎座Tech Rx会歌舞伎座Tech Rx会
歌舞伎座Tech Rx会
 
C83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきましたC83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきました
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
CategoLJについて
CategoLJについてCategoLJについて
CategoLJについて
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: Railsアプリケーションのデバッグ
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなしSQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなし
 
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
 
Haikara
HaikaraHaikara
Haikara
 

Mehr von 将 高野

効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
将 高野
 
Lets Enjoy C#!
Lets Enjoy C#!Lets Enjoy C#!
Lets Enjoy C#!
将 高野
 

Mehr von 将 高野 (16)

新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
 
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
 
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
 
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
 
git-svn
git-svngit-svn
git-svn
 
GTD on RTM
GTD on RTMGTD on RTM
GTD on RTM
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
 
Choi LINQ
Choi LINQChoi LINQ
Choi LINQ
 
Lets Enjoy C#!
Lets Enjoy C#!Lets Enjoy C#!
Lets Enjoy C#!
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World
 

Lightweight C#