かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

F#

ReactiveProperty + F#で簡単なViewModel書いてみたよ

F# Rx

超簡単なやつ。入力があったら1秒後に別プロパティに全部大文字にして出すやつです。 open Codeplex.Reactive open System open System.Reactive.Linq type MainWindowViewModel() = // 入力用 let input = new ReactiveProperty<string>() // 出力用 let output = /</string>…

F#でTask<T>を待つ

F#

非同期ワークフローの中でTaskってどうやって使うんだろう?と思ってたらAsyncクラスにAwaitaTaskっていうずばりっぽいメソッドがありました。こいつを使えば非同期ワークフローの中でlet!で結果を受け取ることができる。HttpClientを使ってGoogleトップペー…

F#版のBindableBaseクラス

F#

F#でINotifyPropertyChangedを実装するとどうなるかな~というので実装してみた。 open Microsoft.FSharp.Quotations open Microsoft.FSharp.Quotations.Patterns open Microsoft.FSharp.Quotations.DerivedPatterns type BindableBase() = let propertyChng…

CLIMutable属性つけると便利らしい?

F#

F#にCLIMutableなる属性が追加さられたみたいです。こいつをつけるとデフォルトコンストラクタとか、プロパティに自動的にgetter/setterつけてくれてDTO作ったりEFで便利かもね!みたいな説明が書いてあるような気がしました。 namespace Hoge open System; …

ReactiveProperty in F#でHello world

ReactivePropertyって別にC#専用ってわけじゃないんだからねっ!! // 名前空間のopenは省略・・・ // ViewModelの定義はスッキリ type SampleViewModel() = let name = new ReactiveProperty<string>() let upper = name.Select(fun (s : string) -> s.ToUpper()) .</string>…

プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.2 紹介

F#

縁あって発売前ですがプログラミングの魔導書 〜Programmers' Grimoire〜 Vol.2の中身を拝見させて頂く機会を頂きました。Twitter凄いです。一週間ほど前から以下のページで予約が開始されています。 プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.…

MSDN マガジン 9月号(英語)にF# + MVVMの記事が!

Build MVVM Applications in F# 興味のある人はさらっとコードだけでも眺めてみるといいかもです。 F#用のViewModelを記述するためのサポートライブラリみたいなのも紹介されてたりします。あとは非同期ワークフローも!これはC# 5.0が出るまではF#の強みの…

F#でWPFの画面構築DSL

タイトル通りのものを作ってみようと思ってもんもんとしています。ただ、DataTemplateとかControlTemplateとかは、ちょっとしんどいので対象外にしようかな〜と思いつつ、ItemsControlのItemTemplateとかくらいは設定できないと使い物にならないよな〜と思っ…

添付プロパティをセットしたオブジェクトを作成するヘルパー関数

思いついたのでLINQ Padでさくっと試してみた。 open System open System.Windows open System.Windows.Controls module WPF = /// 添付プロパティと値の組を作成する let (@<<) (dp : DependencyProperty) (value : obj) = (dp, value) /// DependencyObjec…

非同期ワークフロー対応の処理の作成方法を公開しました。

F#

コードレシピにF#で自前の関数や既存の非同期処理(コールバックで続きの処理をやることを想定)を非同期ワークフローに対応させるときに使用するFromContinuations関数の使用方法についての記事を書きました。 F# 非同期ワークフロー対応の処理の作成方法

F# Somaの便利機能「式言語」を公開しました。

前回に引き続きSomaの紹介です!コードレシピに公開してみました。 F# Somaの便利機能「式言語」 軽量ORマッピングフレームワークは手軽に使えるし、小回り(最終的にいくら小回りが利くかが勝負だと思います)が利くのがいいですね!

F#の軽量ORマッピングライブラリSomaを試してみた

ということで、じーっと見つめてたらバージョン1が出たSoma!!試してみたついでにコードレシピにまとめてみました。 F# Somaを使ったDBのCRUD処理 DBにはSQL Server Compact Edition 4.0を使ってみました。

F#で思ったことを徒然なるままに書いてみた

F#

F#という言語を最近遊び感覚で使ってますが、まだまだIDEのインテリセンスもイマイチだったりするところがあって、開発環境的には不満が割とあります。でも、それ以上にLL言語を彷彿とさせる(特にPython)ライトっぷりには脱帽です。 メインパラダイム F#は…

Kinkuma Framework F# v0.2のGetting Startを書きました

CodePlexの以下のページから参照できます。 http://fskinkuma.codeplex.com/documentation 力つきたので少しお休み。

F#用MVVMライブラリ作成日記

とりあえず、それっぽいサンプル書いたので、これをベースにドキュメントのGetting Startでも書いてみよう。 Hello.zip

F#用MVVM補助ライブラリ Kinkuma Framework F# v0.2を公開しました。

DataAnnotationsに対応したものをv0.2として公開しました。nugetでKinkumaFramework.FSharpで検索すると見つかります。ソースコード等はCodePlexで公開しています。 Kinkuma Framework F# (Prism based F# MVVM Support Library)

F#用MVVMライブラリ作成日記

今日は、DataAnnotationsによる入力値のエラー検証を追加しました。今の所以下のような変更履歴です。 ! KinkumaFramework F# v0.1 F#でViewModelを記載する際の補助ライブラリです。 !! 2011/6/26 v0.1.2 * FsValidatableViewModelBaseクラス ** DataAnnota…

F#用MVVMライブラリを作ってみました

とりあえず勢いだけで作ってCodePlex上に置きました。Prismをベースにしています。 Kinkuma Framework F# (Prism based F# MVVM Support Library) nugetからインストールできるのでKinkumaで検索するとひっかかります。nugetのページは以下になります。 Kink…

非同期ワークフローとメッセンジャーのコールバック

ちょっとした小ネタです。F#には非同期ワークフローという非同期処理を同期的に書けるという素敵な機能があります。 MSDNの非同期ワークフローのページからコードを拝借しますが、以下のようなコードが書けます。 open System.Net open Microsoft.FSharp.Con…

F# and MVVM Light Toolkit Sample Applicationをコードレシピに公開しました

昨日、今日あたりでもんもんと考えてたことをまとめました。 F# and MVVM Light Toolkit Sample Application F#でMVVMパターンをやるなら、この記事のようにC#でViewあたりは定義して、ViewModel以降F#で記述するのが妥当だと思います(F#だとViewのデザイナ…

MVVMのVMをF#で実装するとしたら?

こんな基本クラスを用意しておくと記述が楽かも。まぁ同じことはC#でも言えますが。 ネタ元は以下の記事です。 ObservableObject for WPF MVVM open System open System.ComponentModel /// INotifyPropertyChangedの実装 type NotifyObject() = let propert…

Seq.windoed使ってみる

F#

使い道がわからなかったwindowedですが、とりあえず、まとまった前後の要素を見ながら処理したいという用途で使えるのかな。例えば、ある配列の要素から前後の要素との平均を求めるみたいな処理で使えるとか・・・? open System // 適当な元データ作る let …

Seq.pairwiseとSeq.windowed

F#

最近まで存在を知らなかったSeq.pairwise関数とSeq.windowed関数の紹介をしたいと思います。 Seq.pairwise 引数で渡されたシーケンスを要素数が2のタプルのシーケンスにしてくれます。タプルの生成ルールは、(1番目, 2番目), (2番目, 3番目), (3番目, 4番目…

ついにExcel VBAとおさらばする時がきたかもしれん

.NET系の言語をExcelで実行できるExcel-DNAをテライケメンのid:bleis-tiftの呟きから教えてもらえました。 Samplesも結構充実してるのでいいかんじ。ファイルをExcelにドロップするだけでいいので、お手軽に使えますね!! 個人的にイケてると思ったのは以下…

F# 2.0でEntity Framework 4.1 CodeFirst その2「関連」

前回の例が単一テーブルだったので複数テーブル間の関連があるケースもやってみました。ちょっとはまったのは、F#って前方参照できないのでEmployee Department間の相互参照させることでした。andで繋げてクラス定義すると前方参照もできるようになるみたい…

F# 2.0でEntity Framework 4.1 CodeFirst

とりあえず備忘録です。さくっとやって動かなかったので、ぐぐって以下のページを見つけてその通りにやったら動きました。今の所CodeFirstでやるなら大人しくC#使っておいた方がいいのかな・・・?といった所感です。 F# Code-First Development with Entity…

stringの配列からDictionaryへの変換 まとめ

C# F#

4回にわたって小ネタを書いてきました!!! stringの配列からDictionary<string, string>への変換 stringの配列からDictionary<string, string>への変換 その2 stringの配列からDictionary<string, string>への変換 その3 stringの配列からDictionary<string, string>への変換 その4 id:masa-kさんのブログでも取り上げて</string,></string,></string,></string,>…

F#でリアクティブプログラミング その2

F#

F#でReactive Extensionsみたいなことが出来るということでじゃっかんハッスルしてたのですが、まだまだ提供されている便利メソッドは少ないというのが実情みたいです。(id:neueccさん情報)確かにObservableモジュールを眺めてみてもメソッドが数えるほど…

F#でリアクティブプログラミング

F#

F#のIEventインターフェースを見てみたらIObservable実装してることに気づきました。そして、Observableモジュールというものも定義されている・・・。 これは出来る!!!ということで、ちょろっと試してみました。 // int型を発行するIEventを作る let e =…

F#でMVVM Light Toolkit

フルF#(XAML無し)で組んでみました。後悔しています。とりあえずやるもんじゃないですね!でも、せっかく書いたのでメモメモ。 #if INTERACTIVE #r "PresentationCore.dll" #r "PresentationFramework.dll" #r "WindowsBase.dll" #r "GalaSoft.MvvmLight.E…

F#でのMVVMパターン

Simple F# ViewModel for Silverlight MVVMという記事があったのでメモです。 基本的に、私が前に書いたのと同じようなコードになってるっぽいので少し安心です。括弧とかが無いぶんC#に比べてスリムになってるように感じますね。

重複したメールアドレスがあるかないかのチェックプログラム書いてみた

F#

メールアドレスが改行くぎりで列挙されてるテキストから重複がないか確認しないといけなくなったので、どうせなのでF#で書いてみた。どうだろう?まだまだスマートに書けるかな・・・。 open System open System.IO let distinctCheck (stream : StreamReade…

手軽なスクリプト言語としてのF# その26「例外」

F#

fparsecというパーサに手を出してみましたが、まだ力不足で使いこなせる気がしなかったので基本に戻ってきました。今日は悲しいかな例外です。 例外は、C#の例外と同じものだと思ってもらってOKだと思います。私はそう思ってます。F#での例外の定義の仕方は…

手軽なスクリプト言語としてのF# その25「判別共用体」

F#

今日は、判別共用体というものをやってみようと思います。今までちょろっと使ってきたoption型とかも判別共用体だったりします。例えば、同じOption型なのに「Some 値」という値やNoneという違う種類の値を入れたりすることが出来ます。こういう特徴をもつも…

手軽なスクリプト言語としてのF# その24「シーケンス」

F#

今日はシーケンスです。シーケンスとはListみたいなもんです。ただ、Listとは違う特徴を持ってるのでしっかりそこらへんをおさえましょう。 使ってみよう とりあえず使ってみないことにはどんなものかわかりません。シーケンスを生成して値を表示するだけの…

F# + WPF + MVVM で足し算アプリ

さて、今日はF#のシーケンスあたりでもやろうかと思ってMSDNとにらめっこしてましたが、気が変わったのでF#でWPFでMVVMパターンな凄く小さなアプリケーションを作ってみることにしました。 作るもの 仕様は、以下のような感じです。 テキストボックスが2つ…

手軽なスクリプト言語としてのF# その23「アクティブパターン」

F#

早いもので23回目になりました。 今回はアクティブパターンというものを紹介してみようと思います。こいつも使いこなすとなかなか便利そうなので、ちょっと本気だして習得しようと思いました。 さて、アクティブパターンとはなんぞや?ということですが、…

手軽なスクリプト言語としてのF# その22「列挙型」

F#

今回は列挙型です。特に多く語ることはないのであっさりといきます。C#とかでいうenumですね。宣言方法はいたってシンプルで以下のように記述します。 type 型名 = | 値1 = intの値 | 値2 = intの値 | 値3 = intの値 ...早速使ってみます。 // 赤 緑 青の列…

手軽なスクリプト言語としてのF# その21「再帰とループ」

F#

さて、次は関数型言語ではループのかわりによく使われるともっぱらの噂?の再帰についてみてみようと思います。まぁ関数型言語じゃなくても再帰は一般的に使われてるけど、でかいデータを相手にしたときにスタックオーバーフロー起こすから気を付けようねっ…

手軽なスクリプト言語としてのF# その20「パターンマッチ」

F#

さて、関数型言語には大体ある(と思ってる)パターンマッチについてやってみます。といっても私が経験してる関数型言語はHaskellとF#だけなので、全部の言語にあるかどうかは良く知りません。まぁC#でパターンマッチに該当するものって何?っていうとswitch…

手軽なスクリプト言語としてのF# その19「参照型よりオプション型って安全?」

F#

前回のoption型のエントリを書いたら速攻で@bleisさんからTwitterで突っ込みが入りました。 こういう、突っ込みってうれしいものですよね。option型の説明について補足です。 C#などでの参照型が戻り値となるようなメソッドの場合は、シグネチャを見ただけで…

手軽なスクリプト言語としてのF# その18「オプション型」

F#

さて、今回は小ネタです。小ネタだけど要所要所でお世話になるオプション型というものを紹介したいと思います。オプション型というのは値がある場合と無い場合があるという状態を表したいときに使います。C#とかでは一般的にnullが使われるような状態で使わ…

手軽なスクリプト言語としてのF# その17「リスト」

F#

さて、一番プログラムを書いててお世話になるリストの時間になりました。リストといえば何回か使ってきましたが、このリストはいくつかプロパティを持ってたりします。 let list = [1..10] printfn "list.Head = %d" list.Head printfn "list.Tail = %A" lis…

手軽なスクリプト言語としてのF# その16「総称型 ジェネリック」

F#

F#にもジェネリックあります!今までもさらりと使ってたり使ってなかったりしますが、これはF#のコンパイラが最大限に空気を読んで、ジェネリックに出来そうなところは勝手にしてくれるからです。例えば以下のような関数を書いたとします。 let makeTuple x …

手軽なスクリプト言語としてのF# その15「WPFしてみた」

F#

さて、これまでで基本的にOOPチックな考えてF#のプログラムを書くときに必要そうなことは大体おさえてると思われます。ということで、一区切りの寄り道として簡単なWPFアプリケーションを組んでみようと思います。コードの解説はしません。簡単にコード内に…

手軽なスクリプト言語としてのF# その14「合成演算子とパイプ演算子」

F#

さて、ついに関数型言語っぽい機能の説明です!!!合成演算子とパイプ演算子について紹介したいと思います。 合成演算子 合成演算子というのは、その名の通り2つの関数をくっつけてしまう演算子です。前方合成演算子>>と後方合成演算子 例えばf1とf2という…

手軽なスクリプト言語としてのF# その13「オブジェクト初期化子みたいなの」

F#

F#のクラスは、インスタンスを生成するときにプロパティの値を任意の値で初期化する機能があったりします。C#でいうオブジェクト初期化子みたいなものですね。 ただ、F#ではオブジェクト初期化子という名前は使われていなくて「初期化時のプロパティへの値の…

手軽なスクリプト言語としてのF# その12「ラムダ式とイベント」

F#

そろそろ、過去のエントリのリストが長くなってきたので、後ろにつけることにしました。さて、今日はC#でお馴染みラムダ式とイベントをやってみようと思います。 ラムダ式 ラムダ式の定義は簡単です。 fun 引数 -> 関数本体試しに足し算する関数をラムダ式で…

「実践 F# 関数型プログラミング入門」読破してました

F#

F#やりたい人に、まじお勧めです。最近書いてるF#のエントリは、この本で得た知識をOOPから入るならどういう風に整理するとわかりやすいかなという自分の考えの整理のために書いてるので、この本見たら私のF#のエントリは見る必要ないです!! F#は、C#と同…

手軽なスクリプト言語としてのF# その11「インターフェースと演算子のオーバーロード」

F#

手軽なスクリプト言語としてのF# 手軽なスクリプト言語としてのF# その2 手軽なスクリプト言語としてのF# その3 手軽なスクリプト言語としてのF# その4 手軽なスクリプト言語としてのF# その5 手軽なスクリプト言語としてのF# その6 手軽なスクリプト言…