C#(VB)プログラマのためのF#入門

273

description

Developers Summit 2011 【17-D-7】 C#(VB)プログラマのためのF#入門

Transcript of C#(VB)プログラマのためのF#入門

Page 1: C#(VB)プログラマのためのF#入門
Page 2: C#(VB)プログラマのためのF#入門

自己紹介

id:bleis-tift / @bleis

名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです

Page 3: C#(VB)プログラマのためのF#入門

自己紹介

id:bleis-tift / @bleis

名古屋で働くプログラマ

お仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです

Page 4: C#(VB)プログラマのためのF#入門

自己紹介

id:bleis-tift / @bleis

名古屋で働くプログラマお仕事では主にC#を使ってます

F#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです

Page 5: C#(VB)プログラマのためのF#入門

自己紹介

id:bleis-tift / @bleis

名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物です

GitとかHudson(あ、Jenkins・・・)も大好きです

Page 6: C#(VB)プログラマのためのF#入門

自己紹介

id:bleis-tift / @bleis

名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです

Page 7: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 8: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?

F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 9: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?F#を使うと何が嬉しいの?

F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 10: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?

どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 11: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 12: C#(VB)プログラマのためのF#入門

今日話すこと

F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?

細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?

ということを中心にお話しします。

Page 13: C#(VB)プログラマのためのF#入門

F#って何?

Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)

.NETの資産を有効活用できる関数型言語!

Page 14: C#(VB)プログラマのためのF#入門

F#って何?

Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)

OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)

.NETの資産を有効活用できる関数型言語!

Page 15: C#(VB)プログラマのためのF#入門

F#って何?

Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けている

もちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)

.NETの資産を有効活用できる関数型言語!

Page 16: C#(VB)プログラマのためのF#入門

F#って何?

Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)

.NETの資産を有効活用できる関数型言語!

Page 17: C#(VB)プログラマのためのF#入門

F#って何?

Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)

.NETの資産を有効活用できる関数型言語!

Page 18: C#(VB)プログラマのためのF#入門

関数型言語?

関数型言語はこわくないよ!

Page 19: C#(VB)プログラマのためのF#入門

関数型言語?

えっ?なにそれこわい。

関数型言語はこわくないよ!

Page 20: C#(VB)プログラマのためのF#入門

関数型言語?

えっ?なにそれこわい。

関数型言語はこわくないよ!

Page 21: C#(VB)プログラマのためのF#入門

関数型言語?

えっ?なにそれこわい。関数型言語はこわくないよ!

Page 22: C#(VB)プログラマのためのF#入門

関数型言語に対するイメージ

括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?

全然そんなことないので安心してください!

Page 23: C#(VB)プログラマのためのF#入門

関数型言語に対するイメージ

括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?

全然そんなことないので安心してください!

Page 24: C#(VB)プログラマのためのF#入門

関数型言語に対するイメージ

括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?

全然そんなことないので安心してください!

Page 25: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役

C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値

C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 26: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役

C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値

C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 27: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値

C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 28: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値

C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 29: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 30: C#(VB)プログラマのためのF#入門

関数型言語の特徴

式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心

関数でさえ値C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている

とりあえずはこのくらいでおk

Page 31: C#(VB)プログラマのためのF#入門

式と文の違い

評価すると・・・

式 値を持つ文 値を持たない

と、言ってもわかりにくいので具体例を出すと・・・

Page 32: C#(VB)プログラマのためのF#入門

式と文の違い

評価すると・・・式 値を持つ

文 値を持たないと、言ってもわかりにくいので具体例を出すと・・・

Page 33: C#(VB)プログラマのためのF#入門

式と文の違い

評価すると・・・式 値を持つ文 値を持たない

と、言ってもわかりにくいので具体例を出すと・・・

Page 34: C#(VB)プログラマのためのF#入門

式と文の違い

評価すると・・・式 値を持つ文 値を持たない

と、言ってもわかりにくいので具体例を出すと・・・

Page 35: C#(VB)プログラマのためのF#入門

C#とVBの場合

C#とVBでは基本的な要素が文

Page 36: C#(VB)プログラマのためのF#入門

C#とVBの場合

C#とVBでは基本的な要素が文

Page 37: C#(VB)プログラマのためのF#入門

C#とVBの場合

C#とVBでは基本的な要素が文

Page 38: C#(VB)プログラマのためのF#入門

C#とVBの場合

C#とVBでは基本的な要素が文

Page 39: C#(VB)プログラマのためのF#入門

C#とVBの場合

C#とVBでは基本的な要素が文

Page 40: C#(VB)プログラマのためのF#入門

F#の場合

F#では基本的な要素が式

Page 41: C#(VB)プログラマのためのF#入門

F#の場合

F#では基本的な要素が式

Page 42: C#(VB)プログラマのためのF#入門

F#の場合

F#では基本的な要素が式

Page 43: C#(VB)プログラマのためのF#入門

F#の場合

F#では基本的な要素が式

Page 44: C#(VB)プログラマのためのF#入門

関数型言語の特徴の一つ

すべてもしくはほとんどすべての言語要素が式

Page 45: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、

変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。やっぱり例を見てみましょう。

Page 46: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、

変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。やっぱり例を見てみましょう。

Page 47: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、変数に設定することができる

関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。やっぱり例を見てみましょう。

Page 48: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる

関数の戻り値として受け取ることができるということ。やっぱり例を見てみましょう。

Page 49: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。やっぱり例を見てみましょう。

Page 50: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。

やっぱり例を見てみましょう。

Page 51: C#(VB)プログラマのためのF#入門

関数が値とは?

0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる

ということ。やっぱり例を見てみましょう。

Page 52: C#(VB)プログラマのためのF#入門

変数に設定

特定の文脈における、「より分かりやすい名前」を付けたりできる!

Page 53: C#(VB)プログラマのためのF#入門

変数に設定

特定の文脈における、「より分かりやすい名前」を付けたりできる!

Page 54: C#(VB)プログラマのためのF#入門

変数に設定

特定の文脈における、「より分かりやすい名前」を付けたりできる!

Page 55: C#(VB)プログラマのためのF#入門

変数に設定

特定の文脈における、「より分かりやすい名前」を付けたりできる!

Page 56: C#(VB)プログラマのためのF#入門

変数に設定

特定の文脈における、「より分かりやすい名前」を付けたりできる!

Page 57: C#(VB)プログラマのためのF#入門

引数に渡す

Funcデリゲートのようなことをより簡単に記述できる!

Page 58: C#(VB)プログラマのためのF#入門

引数に渡す

Funcデリゲートのようなことをより簡単に記述できる!

Page 59: C#(VB)プログラマのためのF#入門

引数に渡す

Funcデリゲートのようなことをより簡単に記述できる!

Page 60: C#(VB)プログラマのためのF#入門

引数に渡す

Funcデリゲートのようなことをより簡単に記述できる!

Page 61: C#(VB)プログラマのためのF#入門

引数に渡す

Funcデリゲートのようなことをより簡単に記述できる!

Page 62: C#(VB)プログラマのためのF#入門

戻り値として受け取る

関数(ここではラムダ式)を返すのも簡単!

Page 63: C#(VB)プログラマのためのF#入門

戻り値として受け取る

関数(ここではラムダ式)を返すのも簡単!

Page 64: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 65: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

→ F#を学ぶことに意味はあるの?

Page 66: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 67: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 68: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 69: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 70: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

Page 71: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 72: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 73: C#(VB)プログラマのためのF#入門

対話環境(fsi)

F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利

試してみましょう!

Page 74: C#(VB)プログラマのためのF#入門

対話環境(fsi)

F#のコードを手軽に試すことのできる対話環境が標準で用意されている

VSにも組み込まれていて非常に便利

試してみましょう!

Page 75: C#(VB)プログラマのためのF#入門

対話環境(fsi)

F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利

試してみましょう!

Page 76: C#(VB)プログラマのためのF#入門

対話環境(fsi)

F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利

試してみましょう!

Page 77: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 78: C#(VB)プログラマのためのF#入門

より安全

C#やVBのアプローチよりも安全な仕組みが提供されています。

例えば・・・パターンマッチ vs. switch(Select)文option vs. null(Nothing)

などがあります。

Page 79: C#(VB)プログラマのためのF#入門

より安全

C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・

パターンマッチ vs. switch(Select)文option vs. null(Nothing)

などがあります。

Page 80: C#(VB)プログラマのためのF#入門

より安全

C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・

パターンマッチ vs. switch(Select)文option vs. null(Nothing)

などがあります。

Page 81: C#(VB)プログラマのためのF#入門

より安全

C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・

パターンマッチ vs. switch(Select)文option vs. null(Nothing)

などがあります。

Page 82: C#(VB)プログラマのためのF#入門

パターンマッチって?

パターンマッチとは、

複数分岐構造の分解分解した部分構造の束縛

を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。

Page 83: C#(VB)プログラマのためのF#入門

パターンマッチって?

パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛

を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。

Page 84: C#(VB)プログラマのためのF#入門

パターンマッチって?

パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛

を同時に行うことのできる仕組みです。

なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。

Page 85: C#(VB)プログラマのためのF#入門

パターンマッチって?

パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛

を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。

Page 86: C#(VB)プログラマのためのF#入門

パターンマッチ vs. 複数分岐

.

問題

.

.

.

引数が 1なら”one”、2なら”two”、それ以外なら”other”を返せ

Page 87: C#(VB)プログラマのためのF#入門

パターンマッチ vs. 複数分岐

.

問題

.

.

.

引数が 1なら”one”、2なら”two”、それ以外なら”other”を返せ

Page 88: C#(VB)プログラマのためのF#入門

複数分岐(C#、VB)

Page 89: C#(VB)プログラマのためのF#入門

パターンマッチ(F#)

引数にマッチさせる function式を使いました。単に短いだけ?これが違うんです。

Page 90: C#(VB)プログラマのためのF#入門

パターンマッチ(F#)

引数にマッチさせる function式を使いました。

単に短いだけ?これが違うんです。

Page 91: C#(VB)プログラマのためのF#入門

パターンマッチ(F#)

引数にマッチさせる function式を使いました。

単に短いだけ?これが違うんです。

Page 92: C#(VB)プログラマのためのF#入門

パターンマッチ(F#)

引数にマッチさせる function式を使いました。単に短いだけ?これが違うんです。

Page 93: C#(VB)プログラマのためのF#入門

網羅性のチェック

.

コンパイル結果

.

.

.

この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。

パターンの網羅性をチェックしてくれる!

Page 94: C#(VB)プログラマのためのF#入門

網羅性のチェック

.

コンパイル結果

.

.

.

この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。

パターンの網羅性をチェックしてくれる!

Page 95: C#(VB)プログラマのためのF#入門

網羅性のチェック

.

コンパイル結果

.

.

.

この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。

パターンの網羅性をチェックしてくれる!

Page 96: C#(VB)プログラマのためのF#入門

それだけじゃない!

Page 97: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・

Page 98: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・

Page 99: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・

Page 100: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz ← 5で割り切れるならBuzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・

Page 101: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz ← 5で割り切れるならBuzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz Buzz ←両方なら FizzBuzzFizzBuzz(16)・・・16・・・

Page 102: C#(VB)プログラマのためのF#入門

FizzBuzz

FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz ← 5で割り切れるならBuzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz Buzz ←両方なら FizzBuzzFizzBuzz(16)・・・16 ←割り切れないならその数字・・・

Page 103: C#(VB)プログラマのためのF#入門

FizzBuzz(C#、VB)

Page 104: C#(VB)プログラマのためのF#入門

FizzBuzz(F#)

.

実行結果

.

.

.

| 0, 0 -> "Fizz Buzz"

----^^^^

この規則には一致しません

一致しないパターンも検出してくれる!

Page 105: C#(VB)プログラマのためのF#入門

FizzBuzz(F#)

.

実行結果

.

.

.

| 0, 0 -> "Fizz Buzz"

----^^^^

この規則には一致しません

一致しないパターンも検出してくれる!

Page 106: C#(VB)プログラマのためのF#入門

FizzBuzz(F#)

.

実行結果

.

.

.

| 0, 0 -> "Fizz Buzz"

----^^^^

この規則には一致しません

一致しないパターンも検出してくれる!

Page 107: C#(VB)プログラマのためのF#入門

FizzBuzz(F#)

.

実行結果

.

.

.

| 0, 0 -> "Fizz Buzz"

----^^^^

この規則には一致しません

一致しないパターンも検出してくれる!

Page 108: C#(VB)プログラマのためのF#入門

option vs. null

option型という、nullよりも安全に値がないかもしれないことを表す型があります。

nullよりも安全とはどういうことでしょう?

Page 109: C#(VB)プログラマのためのF#入門

option vs. null

option型という、nullよりも安全に値がないかもしれないことを表す型があります。nullよりも安全とはどういうことでしょう?

Page 110: C#(VB)プログラマのためのF#入門

nullの落とし穴

例えば、

こういうAPIがあったとします。

Page 111: C#(VB)プログラマのためのF#入門

nullの落とし穴

例えば、

こういうAPIがあったとします。

Page 112: C#(VB)プログラマのためのF#入門

nullの落とし穴

例えば、

こういうAPIがあったとします。

Page 113: C#(VB)プログラマのためのF#入門

で、

Page 114: C#(VB)プログラマのためのF#入門

で、

こんなプログラム。

Page 115: C#(VB)プログラマのためのF#入門

で、

こんなプログラム。

Page 116: C#(VB)プログラマのためのF#入門

で、

こんなプログラム。

Page 117: C#(VB)プログラマのためのF#入門

nullの落とし穴

nullは、

シグネチャだけではわからない補完機能で気持ちよくNullReferenceException

という落とし穴がある。

Page 118: C#(VB)プログラマのためのF#入門

nullの落とし穴

nullは、シグネチャだけではわからない

補完機能で気持ちよくNullReferenceException

という落とし穴がある。

Page 119: C#(VB)プログラマのためのF#入門

nullの落とし穴

nullは、シグネチャだけではわからない補完機能で気持ちよくNullReferenceException

という落とし穴がある。

Page 120: C#(VB)プログラマのためのF#入門

nullの落とし穴

nullは、シグネチャだけではわからない補完機能で気持ちよくNullReferenceException

という落とし穴がある。

Page 121: C#(VB)プログラマのためのF#入門

なおしてみた

Page 122: C#(VB)プログラマのためのF#入門

なおしてみた

Page 123: C#(VB)プログラマのためのF#入門

なおしてみた

Page 124: C#(VB)プログラマのためのF#入門

なおしてみた

Page 125: C#(VB)プログラマのためのF#入門

やりたいことがうもれちゃってますね・・・

Page 126: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?なら・・・

Page 127: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?なら・・・

Page 128: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?なら・・・

Page 129: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?なら・・・

Page 130: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?

なら・・・

Page 131: C#(VB)プログラマのためのF#入門

じゃぁoptionだったら?

え、ネストしてて読みにくい?なら・・・

Page 132: C#(VB)プログラマのためのF#入門

コンピュテーション式!

こんなのどうですか?

詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad

Page 133: C#(VB)プログラマのためのF#入門

コンピュテーション式!

こんなのどうですか?

詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad

Page 134: C#(VB)プログラマのためのF#入門

コンピュテーション式!

こんなのどうですか?

詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad

Page 135: C#(VB)プログラマのためのF#入門

コンピュテーション式!

こんなのどうですか?

詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad

Page 136: C#(VB)プログラマのためのF#入門

コンピュテーション式!

こんなのどうですか?

詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad

Page 137: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 138: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できる

A optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 139: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 140: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しない

パターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 141: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要がある

Noneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 142: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 143: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 144: C#(VB)プログラマのためのF#入門

optionの特長

シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない

気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる

複雑になる場合、コンピュテーション式を活用

nullより安全!

Page 145: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 146: C#(VB)プログラマのためのF#入門

型が軽い

タプルレコード判別共用体

これらを組み合わせることで簡単に型が作れる!

Page 147: C#(VB)プログラマのためのF#入門

型が軽い

タプルレコード判別共用体

これらを組み合わせることで簡単に型が作れる!

Page 148: C#(VB)プログラマのためのF#入門

例えばこんな型

これをC#やVBで作ると・・・

Page 149: C#(VB)プログラマのためのF#入門

例えばこんな型

これをC#やVBで作ると・・・

Page 150: C#(VB)プログラマのためのF#入門

例えばこんな型

これをC#やVBで作ると・・・

Page 151: C#(VB)プログラマのためのF#入門

例えばこんな型

これをC#やVBで作ると・・・

Page 152: C#(VB)プログラマのためのF#入門

C#の場合

Page 153: C#(VB)プログラマのためのF#入門

VBの場合

Page 154: C#(VB)プログラマのためのF#入門

・・・

Page 155: C#(VB)プログラマのためのF#入門

わかりません><

分からないのでUMLにしてみました。

Page 156: C#(VB)プログラマのためのF#入門

わかりません><

分からないのでUMLにしてみました。

Page 157: C#(VB)プログラマのためのF#入門

わかりません><

分からないのでUMLにしてみました。

Page 158: C#(VB)プログラマのためのF#入門

では

もう一度 F#のを見てみましょう。

わかりやすい!

Page 159: C#(VB)プログラマのためのF#入門

では

もう一度 F#のを見てみましょう。

わかりやすい!

Page 160: C#(VB)プログラマのためのF#入門

では

もう一度 F#のを見てみましょう。

わかりやすい!

Page 161: C#(VB)プログラマのためのF#入門

では

もう一度 F#のを見てみましょう。

わかりやすい!

Page 162: C#(VB)プログラマのためのF#入門

違いを見てみると・・・

UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)

F#はC#やVBに比べて手軽に型を作ることができる!

Page 163: C#(VB)プログラマのためのF#入門

違いを見てみると・・・

UMLがなくても構造が一目でわかる

EqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)

F#はC#やVBに比べて手軽に型を作ることができる!

Page 164: C#(VB)プログラマのためのF#入門

違いを見てみると・・・

UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていい

キーワードが少ない(ここでは typeと ofの 2つだけ)

F#はC#やVBに比べて手軽に型を作ることができる!

Page 165: C#(VB)プログラマのためのF#入門

違いを見てみると・・・

UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)

F#はC#やVBに比べて手軽に型を作ることができる!

Page 166: C#(VB)プログラマのためのF#入門

違いを見てみると・・・

UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)

F#はC#やVBに比べて手軽に型を作ることができる!

Page 167: C#(VB)プログラマのためのF#入門

それだけじゃない!

作った型は、パターンマッチで使用可!

C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?

Page 168: C#(VB)プログラマのためのF#入門

それだけじゃない!

作った型は、パターンマッチで使用可!

C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?

Page 169: C#(VB)プログラマのためのF#入門

それだけじゃない!

作った型は、パターンマッチで使用可!

C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?

Page 170: C#(VB)プログラマのためのF#入門

それだけじゃない!

作った型は、パターンマッチで使用可!

C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?

Page 171: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 172: C#(VB)プログラマのためのF#入門

より簡単

型推論タイプ数関数内関数

Page 173: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 174: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 175: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 176: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 177: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 178: C#(VB)プログラマのためのF#入門

型推論

今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!

Page 179: C#(VB)プログラマのためのF#入門

タイプ数

これまで見てきて分かる通り、コードが短いです。これは密度が高いことを意味しており、バグの抑制にもつながります。

また、読む量が少なくて済むため、保守性の向上も期待できます。先ほどの Scheduleの例を思い出してもらえればそれがよくわかると思います。

Page 180: C#(VB)プログラマのためのF#入門

タイプ数

これまで見てきて分かる通り、コードが短いです。これは密度が高いことを意味しており、バグの抑制にもつながります。

また、読む量が少なくて済むため、保守性の向上も期待できます。先ほどの Scheduleの例を思い出してもらえればそれがよくわかると思います。

Page 181: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

これが F#だと・・・

Page 182: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

こんな感じです。

これが F#だと・・・

Page 183: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

こんな感じです。

これが F#だと・・・

Page 184: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

こんな感じです。

これが F#だと・・・

Page 185: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

こんな感じです。

これが F#だと・・・

Page 186: C#(VB)プログラマのためのF#入門

関数内関数

例えばC#で関数内関数を使おうとしたら、

こんな感じです。これが F#だと・・・

Page 187: C#(VB)プログラマのためのF#入門

関数内関数

このとおり、普通の関数と同じ書き方でおk

関数の中で変数を作るとの同じように、関数の中で関数を作れます。

Page 188: C#(VB)プログラマのためのF#入門

関数内関数

このとおり、普通の関数と同じ書き方でおk関数の中で変数を作るとの同じように、関数の中で関数を作れます。

Page 189: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しいの?

.

..

1 対話環境(fsi)がある

.

.

.

2 より安全

.

.

.

3 型が軽い

.

.

.

4 より簡単

.

.

.

5 標準ライブラリ以外に F#のライブラリも使える

Page 190: C#(VB)プログラマのためのF#入門

F#用ライブラリが使える

F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)ちょっとだけ見てみましょう。

Page 191: C#(VB)プログラマのためのF#入門

F#用ライブラリが使える

F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)

ちょっとだけ見てみましょう。

Page 192: C#(VB)プログラマのためのF#入門

F#用ライブラリが使える

F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)ちょっとだけ見てみましょう。

Page 193: C#(VB)プログラマのためのF#入門

|>演算子

F#の標準ライブラリには演算子もいろいろと入っています。

その中でもF#をF#たらしめると言っても過言ではない演算子である、|>演算子を紹介します。

Page 194: C#(VB)プログラマのためのF#入門

|>演算子

F#の標準ライブラリには演算子もいろいろと入っています。その中でもF#をF#たらしめると言っても過言ではない演算子である、|>演算子を紹介します。

Page 195: C#(VB)プログラマのためのF#入門

|>演算子

|>演算子は、関数の最後の引数を前に持ってくる演算子です。

説明するよりも見てもらった方が早いでしょう。

Page 196: C#(VB)プログラマのためのF#入門

|>演算子

|>演算子は、関数の最後の引数を前に持ってくる演算子です。説明するよりも見てもらった方が早いでしょう。

Page 197: C#(VB)プログラマのためのF#入門

|>演算子

結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?また、途中に処理を挟むことを考えた場合・・・

Page 198: C#(VB)プログラマのためのF#入門

|>演算子

結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?

また、途中に処理を挟むことを考えた場合・・・

Page 199: C#(VB)プログラマのためのF#入門

|>演算子

結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?また、途中に処理を挟むことを考えた場合・・・

Page 200: C#(VB)プログラマのためのF#入門

|>演算子

簡単!

Page 201: C#(VB)プログラマのためのF#入門

|>演算子

簡単!

Page 202: C#(VB)プログラマのためのF#入門

|>演算子

さらに・・・

改行してもわかりやすい!

Page 203: C#(VB)プログラマのためのF#入門

|>演算子

さらに・・・

改行してもわかりやすい!

Page 204: C#(VB)プログラマのためのF#入門

|>演算子

さらに・・・

改行してもわかりやすい!

Page 205: C#(VB)プログラマのためのF#入門

using関数

C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。

これが、F#では関数として提供されています。

こんな感じで使います。え、面倒?

Page 206: C#(VB)プログラマのためのF#入門

using関数

C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。

こんな感じで使います。え、面倒?

Page 207: C#(VB)プログラマのためのF#入門

using関数

C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。

こんな感じで使います。え、面倒?

Page 208: C#(VB)プログラマのためのF#入門

using関数

C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。

こんな感じで使います。

え、面倒?

Page 209: C#(VB)プログラマのためのF#入門

using関数

C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。

こんな感じで使います。え、面倒?

Page 210: C#(VB)プログラマのためのF#入門

そんなあなたにuse束縛

こう書けます。

今まで変数の束縛には letを使ったけど、そこをuseにしただけ!

Page 211: C#(VB)プログラマのためのF#入門

そんなあなたにuse束縛

こう書けます。

今まで変数の束縛には letを使ったけど、そこをuseにしただけ!

Page 212: C#(VB)プログラマのためのF#入門

そんなあなたにuse束縛

こう書けます。

今まで変数の束縛には letを使ったけど、そこをuseにしただけ!

Page 213: C#(VB)プログラマのためのF#入門

こんな風に便利なものがいっぱい!

Page 214: C#(VB)プログラマのためのF#入門

いいことばかり?

もちろん違います

Page 215: C#(VB)プログラマのためのF#入門

いいことばかり?

もちろん違います

Page 216: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しくないの?

.

.

.

1 IDEサポートがへぼい

.

.

.

2 そもそもExpress Editionがない

.

.

.

3 情報が少ない

Page 217: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しくないの?

.

.

.

1 IDEサポートがへぼい

.

.

.

2 そもそもExpress Editionがない

.

.

.

3 情報が少ない

Page 218: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しくないの?

.

.

.

1 IDEサポートがへぼい

.

.

.

2 そもそもExpress Editionがない

.

.

.

3 情報が少ない

Page 219: C#(VB)プログラマのためのF#入門

IDEがへぼい

リファクタリング機能デザイナ機能リソースエディタ機能フォルダさえ使えないその他もろもろ・・・

インテリセンスは効きますが、他は割と全滅です。

Page 220: C#(VB)プログラマのためのF#入門

IDEがへぼい

リファクタリング機能デザイナ機能リソースエディタ機能フォルダさえ使えないその他もろもろ・・・

インテリセンスは効きますが、他は割と全滅です。

Page 221: C#(VB)プログラマのためのF#入門

アドインで環境を整える

個人的に入れておきたいのは、

F#Depth Colorizer

F#Project Extender

の 2つです。

Page 222: C#(VB)プログラマのためのF#入門

アドインで環境を整える

個人的に入れておきたいのは、F#Depth Colorizer

F#Project Extender

の 2つです。

Page 223: C#(VB)プログラマのためのF#入門

アドインで環境を整える

個人的に入れておきたいのは、F#Depth Colorizer

F#Project Extender

の 2つです。

Page 224: C#(VB)プログラマのためのF#入門

F#Depth Colorizer

F#はインデントが意味を持つインデントをわかりやすく表示してくれる

Page 225: C#(VB)プログラマのためのF#入門

F#Depth Colorizer

F#はインデントが意味を持つ

インデントをわかりやすく表示してくれる

Page 226: C#(VB)プログラマのためのF#入門

F#Depth Colorizer

F#はインデントが意味を持つインデントをわかりやすく表示してくれる

Page 227: C#(VB)プログラマのためのF#入門

スクリーンショット

Page 228: C#(VB)プログラマのためのF#入門

F#Project Extender

F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念

Page 229: C#(VB)プログラマのためのF#入門

F#Project Extender

F#のプロジェクトでフォルダを使えるようにするアドイン

依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念

Page 230: C#(VB)プログラマのためのF#入門

F#Project Extender

F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定

並び順がアルファベット順になってしまうのは残念

Page 231: C#(VB)プログラマのためのF#入門

F#Project Extender

F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念

Page 232: C#(VB)プログラマのためのF#入門

スクリーンショット

Page 233: C#(VB)プログラマのためのF#入門

スクリーンショット

Page 234: C#(VB)プログラマのためのF#入門

スクリーンショット

Page 235: C#(VB)プログラマのためのF#入門

スクリーンショット

Page 236: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しくないの?

.

.

.

1 IDEサポートがへぼい

.

.

.

2 そもそもExpress Editionがない

.

.

.

3 情報が少ない

Page 237: C#(VB)プログラマのためのF#入門

そもそもExpress Editionがない

ただ、無料で開発環境が整えられないというわけではありません。

Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能

Mac・・・ monoを使って開発が可能・・・?Mac持ってないからわかりません><MBA13インチ欲しい><><

Page 238: C#(VB)プログラマのためのF#入門

そもそもExpress Editionがない

ただ、無料で開発環境が整えられないというわけではありません。

Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能

Mac・・・ monoを使って開発が可能・・・?

Mac持ってないからわかりません><MBA13インチ欲しい><><

Page 239: C#(VB)プログラマのためのF#入門

そもそもExpress Editionがない

ただ、無料で開発環境が整えられないというわけではありません。

Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能

Mac・・・ monoを使って開発が可能・・・?

Mac持ってないからわかりません><MBA13インチ欲しい><><

Page 240: C#(VB)プログラマのためのF#入門

そもそもExpress Editionがない

ただ、無料で開発環境が整えられないというわけではありません。

Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能

Mac・・・ monoを使って開発が可能・・・?

Mac持ってないからわかりません><MBA13インチ欲しい><><

Page 241: C#(VB)プログラマのためのF#入門

そもそもExpress Editionがない

ただ、無料で開発環境が整えられないというわけではありません。

Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能

Mac・・・ monoを使って開発が可能・・・?Mac持ってないからわかりません><MBA13インチ欲しい><><

Page 242: C#(VB)プログラマのためのF#入門

F#を使うと何が嬉しくないの?

.

.

.

1 IDEサポートがへぼい

.

.

.

2 そもそもExpress Editionがない

.

.

.

3 情報が少ない

Page 243: C#(VB)プログラマのためのF#入門

情報が少ない

日本語で読める情報はまだ少ないです。さらに、

書籍が少ない用語(訳語)がまだ定着していない

という問題もあります。

Page 244: C#(VB)プログラマのためのF#入門

情報が少ない

日本語で読める情報はまだ少ないです。

さらに、書籍が少ない用語(訳語)がまだ定着していない

という問題もあります。

Page 245: C#(VB)プログラマのためのF#入門

情報が少ない

日本語で読める情報はまだ少ないです。さらに、

書籍が少ない用語(訳語)がまだ定着していない

という問題もあります。

Page 246: C#(VB)プログラマのためのF#入門

情報が少ない

日本語で読める情報はまだ少ないです。さらに、

書籍が少ない用語(訳語)がまだ定着していない

という問題もあります。

Page 247: C#(VB)プログラマのためのF#入門

情報が少ない

日本語で読める情報はまだ少ないです。さらに、

書籍が少ない用語(訳語)がまだ定着していない

という問題もあります。

Page 248: C#(VB)プログラマのためのF#入門

日本語の情報が少ない

分からないことがあれば、Twitterや F# User Groupを活用しましょう。

Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。

これからみんなで増やしていきましょう!

Page 249: C#(VB)プログラマのためのF#入門

日本語の情報が少ない

分からないことがあれば、Twitterや F# User Groupを活用しましょう。Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。

これからみんなで増やしていきましょう!

Page 250: C#(VB)プログラマのためのF#入門

日本語の情報が少ない

分からないことがあれば、Twitterや F# User Groupを活用しましょう。Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。

これからみんなで増やしていきましょう!

Page 251: C#(VB)プログラマのためのF#入門

書籍が少ない

逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず

この 2冊は買って熟読しましょう!

Page 252: C#(VB)プログラマのためのF#入門

書籍が少ない

逆に考えるんだ!あれこれ迷う必要がないじゃないか!

と言うわけで、とりあえず

この 2冊は買って熟読しましょう!

Page 253: C#(VB)プログラマのためのF#入門

書籍が少ない

逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず

この 2冊は買って熟読しましょう!

Page 254: C#(VB)プログラマのためのF#入門

書籍が少ない

逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず

この 2冊は買って熟読しましょう!

Page 255: C#(VB)プログラマのためのF#入門

書籍が少ない

逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず

この 2冊は買って熟読しましょう!

Page 256: C#(VB)プログラマのためのF#入門

用語(訳語)が定着してない

F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。

Page 257: C#(VB)プログラマのためのF#入門

用語(訳語)が定着してない

F#ドキュメント翻訳向上委員会という委員会があります。

実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。

Page 258: C#(VB)プログラマのためのF#入門

用語(訳語)が定着してない

F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。

これも徐々に定着していくでしょう。

Page 259: C#(VB)プログラマのためのF#入門

用語(訳語)が定着してない

F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。

Page 260: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。

VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#

もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 261: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。

VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#

もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 262: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#

もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 263: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#

もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 264: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#

もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 265: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#もちろんNUnitとか使える

NUnitをラップした FsUnitも使える

Page 266: C#(VB)プログラマのためのF#入門

どんなところでF#を使えばいいの?

利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB

ロジック部分は F#

F#のテストはF#もちろんNUnitとか使えるNUnitをラップした FsUnitも使える

Page 267: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!

Page 268: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!

F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!

Page 269: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!

F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!

Page 270: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!

ロジックに F#!みんなで F#やろうぜ!

Page 271: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!

みんなで F#やろうぜ!

Page 272: C#(VB)プログラマのためのF#入門

まとめ

F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!

Page 273: C#(VB)プログラマのためのF#入門

ご清聴、ありがとうございました

special thanks

※ PowerShell sort順

@mzp@otf

@rf0444@RKTM

@wof moriguchi