2010-12-01から1ヶ月間の記事一覧

アクティブパターンでFizzBuzz

F#

アクティブパターンを使いこせるとかっこいいですよね。アクティブパターンでFizzBuzzは目新しい話ではなさそうですが、やってみました。 アクティブパターンを使わない例。 まずは普通に。fizzbuzz関数の中で条件分岐してます。[<Test>] let ``fizzbuzz without A</test>…

文字列の反転

F#

簡単に書けると楽しい。[<Test>] let ``reverse string`` () = let x = "abcdef" Assert.AreEqual("fedcba", x |> Array.ofSeq |> Array.rev |> String.Concat) 追記 サロゲートペアのことを考えないといけない。なるほど。 http://stackoverflow.com/questions/45</test>…

ダックタイピング

F#

6.4.8 Member Constraint Invocation Expressionsという機能があって、ダックタイピングできるようです。F#でDuck Typingも参考になりました。マニュアルに書いてあるのを少しだけ変更。パラメータをもつメソッドも呼び出してみました。type Duck() = member…

SQLファイルの作り方

Domaは、検索系のSQLについては自動生成しないというポリシーを持っています(更新系SQLについては自動生成と手動生成どちらもサポートしています)。理由は以前書いたとおりです。というわけで、SQLは検索系のDaoメソッドごとにSQLファイルに記述する必要が…

Doma 1.11.0 リリース

Doma 1.11.0 をリリースしました。 ダウンロードはこちらからどうぞ。 http://doma.seasar.org/downloads.html Mavenをご利用の方はこちらを参照ください。 http://www.seasar.org/wiki/index.php?Maven2RepoRemote 今回のバージョンでは重要な変更が行われ…

Doma 1.11.0 の新機能

新機能についていくつか紹介。 EntityListenerで削除/挿入/更新の処理後をフック可能 EntityListenerにpostInsert、postUpdate、postDeleteのメソッドを追加しました。これまで処理前しかフックできませんでしたが、処理後もフックできるようになりました。E…

Pluggable Annotation Processing APIに関するjavacのバグがJava7で直ってる

Java6のPluggable Annotation Processing APIには、Pluggable Annotation Processing APIで生成したクラスを異なるパッケージから参照するとjavacでエラーメッセージが出力される、という困ったバグがありました。 http://bugs.sun.com/bugdatabase/view_bug…

F#の計算式でFizzBuzz

F#

かるくぐぐったところ、計算式を使ったFizzBuzzは見当たらなかったのでやってみました。type FizzBuzzBuilder() = member x.For(elements, forBody) = for e in elements do forBody e member x.Yield(i) = if i % 3 = 0 && i % 5 = 0 then printfn "Fizz Bu…

任意の型に対してLINQのクエリ式を使用する

C#

知らなかったよ。自分で作った任意の型にクエリ式が使えるんですね。[TestClass] public class LinqTest{ [TestMethod] public void Test() { var source = new Wrapper<int>(100); var wrapper = from n in source where n > 50 select n; Assert.AreEqual(100, </int>…

F#、C#、SQLで直積

Seq.collectやSelectManyが理解しづらいので簡単なコードで整理してみました。 F# [<Test>] let ``cartesian product`` () = let numbers = seq {for i in 1 .. 3 -> i} let results = numbers |> Seq.collect (fun n1 -> numbers |> Seq.map (fun n2 -> n1, n2)) </test>…

シーケンスとリストの違い

F#

動かしてみてよくわかりました。 シーケンス let seq1 = seq { for i in 1..3 do printfn "generating... %d" i yield i }let seq2 = seq1 |> Seq.map (fun x -> printfn "1st map %d" x ; x) |> Seq.map (fun x -> printfn "2nd map %d" x;x)let seq3 = Seq…

コード引用符を使ったプロパティ名の取得

F#

コード引用符を使うことで式を取得できます。C#のExpression>で受けるのと同じようなものでしょうか。 なんかおもしろいことができそうな気がします。Personレコードをのプロパティを指定してその名前を取得するコードを書いてみました。open Microsoft.FSha…

レコード型とプロトタイプ

F#

レコード型、毎回すべてのプロパティを設定するのは大変なのでデフォルト値を設定したプロトタイプのインスタンスをあらかじめ作っておくといいかもしれない。 毎回 with を使って作成することになるので型が明示されてわかりやすいというおまけもあります。…

測量単位

F#

F#の中でわかりやすく、それでいてクールな機能が測量単位というものです。メートルとかキログラムとか好きな単位を作成して指定できます。open NUnit.Framework[<Measure>] type m[<Measure>] type kglet calculateBMI (height : float<m>) (weight : float<kg>) = weight / (height </kg></m></measure></measure>…

オブジェクト式

F#には、いろいろと興味深い機能がありますが、オブジェクト式もそのひとつ。open NUnit.Frameworktype IGreeing = abstract Greet : string -> string[<Test>] let ``test Object Expression``() = let greeting = { new IGreeing with member this.Greet(name) =</test>…

explicit factoring by functions と implicit factoring by hierarchy

Expert F# 2.0 (Expert's Voice in F#)作者: Don Syme,Adam Granicz,Antonio Cisternino出版社/メーカー: Apress発売日: 2010/06/01メディア: ペーパーバック購入: 1人 クリック: 35回この商品を含むブログ (2件) を見るこの本を読んでいます。 その中で関数…

F#のコードをNUnitでテストする

NaturalSpecのScenarioという属性、NUnitのTestAttributeを継承しているだけなことに気づきました。ということは、Resharperはクラスに指定するTestFixtureAttributeがなくてもメソッドに指定するTestAttributeだけがあればテストと認識するんですね。MSTest…

Domaでエンティティが変更されたかどうかを検知するには

エンティティに@OriginalStatesを付与すると、エンティティのプロパティがDaoからの取得後に変更されたかどうかを検知できます。 @Entity(listener = EmpListener.class, naming = NamingType.SNAKE_UPPER_CASE) public class Emp { ... @OriginalStates …

F#のコードをMSTestでテストする

C#にはあるのにF#にはなぜかテストプロジェクトがないんですよね。 でもMicrosoft.VisualStudio.QualityTools.UnitTestFramework.dllに参照通せば、一応使えるみたいです。ただResharper使ってないとうまく認識させられないかも。F# Libraryを作って、Micros…

F#のコードをNaturalSpecでテストする

NaturalSpecでも動きました。これもResharperを使っていると簡単。 NaturalSpec.dllとnunit.framework.dllに参照を通す ソリューションかプロジェクトを選んで「Run Unit Tests」 次のようなテストコードが書けます。かっこいい!んだけどどう動いているのか…

F#のパターンマッチとC#のVisitorパターンの比較

パターンマッチグというものを使うとVisitorパターン相当のことが簡単に書けるということを聞いて、関数型プログラミングに興味を持ち始めました。というわけで最近F#をさわったりしています。 で、パターンマッチというものがどういったものかわかってきた…

BindingFlagsのNonPublicについて

NonPublicって親クラスのメンバは対象にならないんですね。ドキュメントを読んでも、そうとはわからないですが。 [TestMethod] public void TestBindigFlags() { var type = typeof(Derived); var flags = BindingFlags.Instance | BindingFlags.Public | Bi…

SqlDbTypeへの変換や推論がそれほど賢くない? その3

前回のつづき。 http://d.hatena.ne.jp/taedium/20101130 SqlParameterのDbTypeプロパティにDbType.Timeを設定したときの挙動がいまいちわかりづらいです。下のテストコードを見てください。Timeとして扱いたいのにDateTimeとして扱われてしまうのです。 [Te…