自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマ
お仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマお仕事では主にC#を使ってます
F#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物です
GitとかHudson(あ、Jenkins・・・)も大好きです
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマお仕事では主にC#を使ってますF#とか Scalaとかが好物ですGitとかHudson(あ、Jenkins・・・)も大好きです
今日話すこと
F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
今日話すこと
F#って何?
F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
今日話すこと
F#って何?F#を使うと何が嬉しいの?
F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
今日話すこと
F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?
どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
今日話すこと
F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
今日話すこと
F#って何?F#を使うと何が嬉しいの?F#を使うと何が嬉しくないの?どんなところで F#を使えばいいの?
細かい文法の話をしないかわりに、F#を覚えることでどういうメリットをもたらしてくれるの?
ということを中心にお話しします。
F#って何?
Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)
.NETの資産を有効活用できる関数型言語!
F#って何?
Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)
OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)
.NETの資産を有効活用できる関数型言語!
F#って何?
Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けている
もちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)
.NETの資産を有効活用できる関数型言語!
F#って何?
Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)
.NETの資産を有効活用できる関数型言語!
F#って何?
Microsoft社製のマルチパラダイム言語(主となるパラダイムは関数型言語)OCamlという関数型言語に強い影響を受けているもちろん.NET Framework上で動作する(C#やVBとの相互のやり取りが簡単)
.NETの資産を有効活用できる関数型言語!
関数型言語?
関数型言語はこわくないよ!
関数型言語?
えっ?なにそれこわい。
関数型言語はこわくないよ!
関数型言語?
えっ?なにそれこわい。
関数型言語はこわくないよ!
関数型言語?
えっ?なにそれこわい。関数型言語はこわくないよ!
関数型言語に対するイメージ
括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?
全然そんなことないので安心してください!
関数型言語に対するイメージ
括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?
全然そんなことないので安心してください!
関数型言語に対するイメージ
括弧が多くて読みにくそう(それ LISP・・・)難しそう(再帰にモナドに etc...)代入できないんじゃ普通のプログラム書けないえ、C言語時代まで逆戻り?
全然そんなことないので安心してください!
関数型言語の特徴
式が主役
C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値
C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
関数型言語の特徴
式が主役
C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値
C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
関数型言語の特徴
式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値
C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
関数型言語の特徴
式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値
C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
関数型言語の特徴
式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
関数型言語の特徴
式が主役C#や VBといった手続き型言語では文が主役LINQがあるとはいえ、言語としては依然として文中心
関数でさえ値C#で言うと、メソッドの代わりに全部ラムダ式で組むようなものでもそれを意識する必要はないようにできている
とりあえずはこのくらいでおk
式と文の違い
評価すると・・・
式 値を持つ文 値を持たない
と、言ってもわかりにくいので具体例を出すと・・・
式と文の違い
評価すると・・・式 値を持つ
文 値を持たないと、言ってもわかりにくいので具体例を出すと・・・
式と文の違い
評価すると・・・式 値を持つ文 値を持たない
と、言ってもわかりにくいので具体例を出すと・・・
式と文の違い
評価すると・・・式 値を持つ文 値を持たない
と、言ってもわかりにくいので具体例を出すと・・・
C#とVBの場合
C#とVBでは基本的な要素が文
C#とVBの場合
C#とVBでは基本的な要素が文
C#とVBの場合
C#とVBでは基本的な要素が文
C#とVBの場合
C#とVBでは基本的な要素が文
C#とVBの場合
C#とVBでは基本的な要素が文
F#の場合
F#では基本的な要素が式
F#の場合
F#では基本的な要素が式
F#の場合
F#では基本的な要素が式
F#の場合
F#では基本的な要素が式
関数型言語の特徴の一つ
すべてもしくはほとんどすべての言語要素が式
関数が値とは?
0とか”hoge”とかと同じように、
変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、
変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、変数に設定することができる
関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる
関数の戻り値として受け取ることができるということ。やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。
やっぱり例を見てみましょう。
関数が値とは?
0とか”hoge”とかと同じように、変数に設定することができる関数の引数として渡すことができる関数の戻り値として受け取ることができる
ということ。やっぱり例を見てみましょう。
変数に設定
特定の文脈における、「より分かりやすい名前」を付けたりできる!
変数に設定
特定の文脈における、「より分かりやすい名前」を付けたりできる!
変数に設定
特定の文脈における、「より分かりやすい名前」を付けたりできる!
変数に設定
特定の文脈における、「より分かりやすい名前」を付けたりできる!
変数に設定
特定の文脈における、「より分かりやすい名前」を付けたりできる!
引数に渡す
Funcデリゲートのようなことをより簡単に記述できる!
引数に渡す
Funcデリゲートのようなことをより簡単に記述できる!
引数に渡す
Funcデリゲートのようなことをより簡単に記述できる!
引数に渡す
Funcデリゲートのようなことをより簡単に記述できる!
引数に渡す
Funcデリゲートのようなことをより簡単に記述できる!
戻り値として受け取る
関数(ここではラムダ式)を返すのも簡単!
戻り値として受け取る
関数(ここではラムダ式)を返すのも簡単!
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
→ F#を学ぶことに意味はあるの?
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
対話環境(fsi)
F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利
試してみましょう!
対話環境(fsi)
F#のコードを手軽に試すことのできる対話環境が標準で用意されている
VSにも組み込まれていて非常に便利
試してみましょう!
対話環境(fsi)
F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利
試してみましょう!
対話環境(fsi)
F#のコードを手軽に試すことのできる対話環境が標準で用意されているVSにも組み込まれていて非常に便利
試してみましょう!
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
より安全
C#やVBのアプローチよりも安全な仕組みが提供されています。
例えば・・・パターンマッチ vs. switch(Select)文option vs. null(Nothing)
などがあります。
より安全
C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・
パターンマッチ vs. switch(Select)文option vs. null(Nothing)
などがあります。
より安全
C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・
パターンマッチ vs. switch(Select)文option vs. null(Nothing)
などがあります。
より安全
C#やVBのアプローチよりも安全な仕組みが提供されています。例えば・・・
パターンマッチ vs. switch(Select)文option vs. null(Nothing)
などがあります。
パターンマッチって?
パターンマッチとは、
複数分岐構造の分解分解した部分構造の束縛
を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。
パターンマッチって?
パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛
を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。
パターンマッチって?
パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛
を同時に行うことのできる仕組みです。
なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。
パターンマッチって?
パターンマッチとは、複数分岐構造の分解分解した部分構造の束縛
を同時に行うことのできる仕組みです。なので単なる複数分岐よりも高性能なのですが、分かりやすいので複数分岐のみを見てみます。
パターンマッチ vs. 複数分岐
.
問題
.
.
.
引数が 1なら”one”、2なら”two”、それ以外なら”other”を返せ
パターンマッチ vs. 複数分岐
.
問題
.
.
.
引数が 1なら”one”、2なら”two”、それ以外なら”other”を返せ
複数分岐(C#、VB)
パターンマッチ(F#)
引数にマッチさせる function式を使いました。単に短いだけ?これが違うんです。
パターンマッチ(F#)
引数にマッチさせる function式を使いました。
単に短いだけ?これが違うんです。
パターンマッチ(F#)
引数にマッチさせる function式を使いました。
単に短いだけ?これが違うんです。
パターンマッチ(F#)
引数にマッチさせる function式を使いました。単に短いだけ?これが違うんです。
網羅性のチェック
.
コンパイル結果
.
.
.
この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。
パターンの網羅性をチェックしてくれる!
網羅性のチェック
.
コンパイル結果
.
.
.
この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。
パターンの網羅性をチェックしてくれる!
網羅性のチェック
.
コンパイル結果
.
.
.
この式のパターン一致が不完全です たとえば、値’0’はパターンに含まれないケースを示す可能性があります。
パターンの網羅性をチェックしてくれる!
それだけじゃない!
FizzBuzz
FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・
FizzBuzz
FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・
FizzBuzz
FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・
FizzBuzz
FizzBuzz(1)・・・1FizzBuzz(2)・・・2FizzBuzz(3)・・・Fizz ← 3で割り切れるなら FizzFizzBuzz(4)・・・4FizzBuzz(5)・・・Buzz ← 5で割り切れるならBuzz・・・FizzBuzz(14)・・・14FizzBuzz(15)・・・Fizz BuzzFizzBuzz(16)・・・16・・・
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・・・
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 ←割り切れないならその数字・・・
FizzBuzz(C#、VB)
FizzBuzz(F#)
.
実行結果
.
.
.
| 0, 0 -> "Fizz Buzz"
----^^^^
この規則には一致しません
一致しないパターンも検出してくれる!
FizzBuzz(F#)
.
実行結果
.
.
.
| 0, 0 -> "Fizz Buzz"
----^^^^
この規則には一致しません
一致しないパターンも検出してくれる!
FizzBuzz(F#)
.
実行結果
.
.
.
| 0, 0 -> "Fizz Buzz"
----^^^^
この規則には一致しません
一致しないパターンも検出してくれる!
FizzBuzz(F#)
.
実行結果
.
.
.
| 0, 0 -> "Fizz Buzz"
----^^^^
この規則には一致しません
一致しないパターンも検出してくれる!
option vs. null
option型という、nullよりも安全に値がないかもしれないことを表す型があります。
nullよりも安全とはどういうことでしょう?
option vs. null
option型という、nullよりも安全に値がないかもしれないことを表す型があります。nullよりも安全とはどういうことでしょう?
nullの落とし穴
例えば、
こういうAPIがあったとします。
nullの落とし穴
例えば、
こういうAPIがあったとします。
nullの落とし穴
例えば、
こういうAPIがあったとします。
で、
で、
こんなプログラム。
で、
こんなプログラム。
で、
こんなプログラム。
nullの落とし穴
nullは、
シグネチャだけではわからない補完機能で気持ちよくNullReferenceException
という落とし穴がある。
nullの落とし穴
nullは、シグネチャだけではわからない
補完機能で気持ちよくNullReferenceException
という落とし穴がある。
nullの落とし穴
nullは、シグネチャだけではわからない補完機能で気持ちよくNullReferenceException
という落とし穴がある。
nullの落とし穴
nullは、シグネチャだけではわからない補完機能で気持ちよくNullReferenceException
という落とし穴がある。
なおしてみた
なおしてみた
なおしてみた
なおしてみた
やりたいことがうもれちゃってますね・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?なら・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?なら・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?なら・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?なら・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?
なら・・・
じゃぁoptionだったら?
え、ネストしてて読みにくい?なら・・・
コンピュテーション式!
こんなのどうですか?
詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad
コンピュテーション式!
こんなのどうですか?
詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad
コンピュテーション式!
こんなのどうですか?
詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad
コンピュテーション式!
こんなのどうですか?
詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad
コンピュテーション式!
こんなのどうですか?
詳しく知りたい方は、mzpさんのブログエントリ(F#プログラマのためのMaybeモナド入門)をどうぞ。http://d.hatena.ne.jp/mzp/20110205/monad
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できる
A optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しない
パターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要がある
Noneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
optionの特長
シグネチャで値がない可能性を明示できるA optionとAは違う型なので、直接メンバにアクセスできない
気持ちのいいNullReferenceExceptionは発生しないパターンマッチを使って値を取り出す必要があるNoneの場合を考えることを型が強制してくれる
複雑になる場合、コンピュテーション式を活用
nullより安全!
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
型が軽い
タプルレコード判別共用体
これらを組み合わせることで簡単に型が作れる!
型が軽い
タプルレコード判別共用体
これらを組み合わせることで簡単に型が作れる!
例えばこんな型
これをC#やVBで作ると・・・
例えばこんな型
これをC#やVBで作ると・・・
例えばこんな型
これをC#やVBで作ると・・・
例えばこんな型
これをC#やVBで作ると・・・
C#の場合
VBの場合
・・・
わかりません><
分からないのでUMLにしてみました。
わかりません><
分からないのでUMLにしてみました。
わかりません><
分からないのでUMLにしてみました。
では
もう一度 F#のを見てみましょう。
わかりやすい!
では
もう一度 F#のを見てみましょう。
わかりやすい!
では
もう一度 F#のを見てみましょう。
わかりやすい!
では
もう一度 F#のを見てみましょう。
わかりやすい!
違いを見てみると・・・
UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)
F#はC#やVBに比べて手軽に型を作ることができる!
違いを見てみると・・・
UMLがなくても構造が一目でわかる
EqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)
F#はC#やVBに比べて手軽に型を作ることができる!
違いを見てみると・・・
UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていい
キーワードが少ない(ここでは typeと ofの 2つだけ)
F#はC#やVBに比べて手軽に型を作ることができる!
違いを見てみると・・・
UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)
F#はC#やVBに比べて手軽に型を作ることができる!
違いを見てみると・・・
UMLがなくても構造が一目でわかるEqualsやGetHashCodeなどをいちいちオーバーライドしなくていいキーワードが少ない(ここでは typeと ofの 2つだけ)
F#はC#やVBに比べて手軽に型を作ることができる!
それだけじゃない!
作った型は、パターンマッチで使用可!
C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?
それだけじゃない!
作った型は、パターンマッチで使用可!
C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?
それだけじゃない!
作った型は、パターンマッチで使用可!
C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?
それだけじゃない!
作った型は、パターンマッチで使用可!
C#やVBで頑張ってクラスを作っても、パターンマッチはできません・・・やるとしたら、更に頑張ってVisitorパターン?
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
より簡単
型推論タイプ数関数内関数
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
型推論
今まで型をほとんど書いていませんよね?これが型推論です。不要な型は書かなくていい!
タイプ数
これまで見てきて分かる通り、コードが短いです。これは密度が高いことを意味しており、バグの抑制にもつながります。
また、読む量が少なくて済むため、保守性の向上も期待できます。先ほどの Scheduleの例を思い出してもらえればそれがよくわかると思います。
タイプ数
これまで見てきて分かる通り、コードが短いです。これは密度が高いことを意味しており、バグの抑制にもつながります。
また、読む量が少なくて済むため、保守性の向上も期待できます。先ほどの Scheduleの例を思い出してもらえればそれがよくわかると思います。
関数内関数
例えばC#で関数内関数を使おうとしたら、
これが F#だと・・・
関数内関数
例えばC#で関数内関数を使おうとしたら、
こんな感じです。
これが F#だと・・・
関数内関数
例えばC#で関数内関数を使おうとしたら、
こんな感じです。
これが F#だと・・・
関数内関数
例えばC#で関数内関数を使おうとしたら、
こんな感じです。
これが F#だと・・・
関数内関数
例えばC#で関数内関数を使おうとしたら、
こんな感じです。
これが F#だと・・・
関数内関数
例えばC#で関数内関数を使おうとしたら、
こんな感じです。これが F#だと・・・
関数内関数
このとおり、普通の関数と同じ書き方でおk
関数の中で変数を作るとの同じように、関数の中で関数を作れます。
関数内関数
このとおり、普通の関数と同じ書き方でおk関数の中で変数を作るとの同じように、関数の中で関数を作れます。
F#を使うと何が嬉しいの?
.
..
1 対話環境(fsi)がある
.
.
.
2 より安全
.
.
.
3 型が軽い
.
.
.
4 より簡単
.
.
.
5 標準ライブラリ以外に F#のライブラリも使える
F#用ライブラリが使える
F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)ちょっとだけ見てみましょう。
F#用ライブラリが使える
F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)
ちょっとだけ見てみましょう。
F#用ライブラリが使える
F#に特化したライブラリが使えます。(F#で書いたライブラリがC#やVBで使えない、ということではない)ちょっとだけ見てみましょう。
|>演算子
F#の標準ライブラリには演算子もいろいろと入っています。
その中でもF#をF#たらしめると言っても過言ではない演算子である、|>演算子を紹介します。
|>演算子
F#の標準ライブラリには演算子もいろいろと入っています。その中でもF#をF#たらしめると言っても過言ではない演算子である、|>演算子を紹介します。
|>演算子
|>演算子は、関数の最後の引数を前に持ってくる演算子です。
説明するよりも見てもらった方が早いでしょう。
|>演算子
|>演算子は、関数の最後の引数を前に持ってくる演算子です。説明するよりも見てもらった方が早いでしょう。
|>演算子
結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?また、途中に処理を挟むことを考えた場合・・・
|>演算子
結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?
また、途中に処理を挟むことを考えた場合・・・
|>演算子
結果は同じですが、|>演算子が矢印のように見え、より読みやすく感じませんか?また、途中に処理を挟むことを考えた場合・・・
|>演算子
簡単!
|>演算子
簡単!
|>演算子
さらに・・・
改行してもわかりやすい!
|>演算子
さらに・・・
改行してもわかりやすい!
|>演算子
さらに・・・
改行してもわかりやすい!
using関数
C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。
これが、F#では関数として提供されています。
こんな感じで使います。え、面倒?
using関数
C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。
こんな感じで使います。え、面倒?
using関数
C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。
こんな感じで使います。え、面倒?
using関数
C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。
こんな感じで使います。
え、面倒?
using関数
C#やVBでは、メモリ以外のリソースの解放漏れを防ぐために using文が用意されています。これが、F#では関数として提供されています。
こんな感じで使います。え、面倒?
そんなあなたにuse束縛
こう書けます。
今まで変数の束縛には letを使ったけど、そこをuseにしただけ!
そんなあなたにuse束縛
こう書けます。
今まで変数の束縛には letを使ったけど、そこをuseにしただけ!
そんなあなたにuse束縛
こう書けます。
今まで変数の束縛には letを使ったけど、そこをuseにしただけ!
こんな風に便利なものがいっぱい!
いいことばかり?
もちろん違います
いいことばかり?
もちろん違います
F#を使うと何が嬉しくないの?
.
.
.
1 IDEサポートがへぼい
.
.
.
2 そもそもExpress Editionがない
.
.
.
3 情報が少ない
F#を使うと何が嬉しくないの?
.
.
.
1 IDEサポートがへぼい
.
.
.
2 そもそもExpress Editionがない
.
.
.
3 情報が少ない
F#を使うと何が嬉しくないの?
.
.
.
1 IDEサポートがへぼい
.
.
.
2 そもそもExpress Editionがない
.
.
.
3 情報が少ない
IDEがへぼい
リファクタリング機能デザイナ機能リソースエディタ機能フォルダさえ使えないその他もろもろ・・・
インテリセンスは効きますが、他は割と全滅です。
IDEがへぼい
リファクタリング機能デザイナ機能リソースエディタ機能フォルダさえ使えないその他もろもろ・・・
インテリセンスは効きますが、他は割と全滅です。
アドインで環境を整える
個人的に入れておきたいのは、
F#Depth Colorizer
F#Project Extender
の 2つです。
アドインで環境を整える
個人的に入れておきたいのは、F#Depth Colorizer
F#Project Extender
の 2つです。
アドインで環境を整える
個人的に入れておきたいのは、F#Depth Colorizer
F#Project Extender
の 2つです。
F#Depth Colorizer
F#はインデントが意味を持つインデントをわかりやすく表示してくれる
F#Depth Colorizer
F#はインデントが意味を持つ
インデントをわかりやすく表示してくれる
F#Depth Colorizer
F#はインデントが意味を持つインデントをわかりやすく表示してくれる
スクリーンショット
F#Project Extender
F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念
F#Project Extender
F#のプロジェクトでフォルダを使えるようにするアドイン
依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念
F#Project Extender
F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定
並び順がアルファベット順になってしまうのは残念
F#Project Extender
F#のプロジェクトでフォルダを使えるようにするアドイン依存関係はプロジェクトのプロパティで設定並び順がアルファベット順になってしまうのは残念
スクリーンショット
スクリーンショット
スクリーンショット
スクリーンショット
F#を使うと何が嬉しくないの?
.
.
.
1 IDEサポートがへぼい
.
.
.
2 そもそもExpress Editionがない
.
.
.
3 情報が少ない
そもそもExpress Editionがない
ただ、無料で開発環境が整えられないというわけではありません。
Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能
Mac・・・ monoを使って開発が可能・・・?Mac持ってないからわかりません><MBA13インチ欲しい><><
そもそもExpress Editionがない
ただ、無料で開発環境が整えられないというわけではありません。
Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能
Mac・・・ monoを使って開発が可能・・・?
Mac持ってないからわかりません><MBA13インチ欲しい><><
そもそもExpress Editionがない
ただ、無料で開発環境が整えられないというわけではありません。
Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能
Mac・・・ monoを使って開発が可能・・・?
Mac持ってないからわかりません><MBA13インチ欲しい><><
そもそもExpress Editionがない
ただ、無料で開発環境が整えられないというわけではありません。
Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能
Mac・・・ monoを使って開発が可能・・・?
Mac持ってないからわかりません><MBA13インチ欲しい><><
そもそもExpress Editionがない
ただ、無料で開発環境が整えられないというわけではありません。
Win・・・ F#CTPとVisual Studio 2010 Shellという組み合わせで、非商用利用に限り開発が可能
Mac・・・ monoを使って開発が可能・・・?Mac持ってないからわかりません><MBA13インチ欲しい><><
F#を使うと何が嬉しくないの?
.
.
.
1 IDEサポートがへぼい
.
.
.
2 そもそもExpress Editionがない
.
.
.
3 情報が少ない
情報が少ない
日本語で読める情報はまだ少ないです。さらに、
書籍が少ない用語(訳語)がまだ定着していない
という問題もあります。
情報が少ない
日本語で読める情報はまだ少ないです。
さらに、書籍が少ない用語(訳語)がまだ定着していない
という問題もあります。
情報が少ない
日本語で読める情報はまだ少ないです。さらに、
書籍が少ない用語(訳語)がまだ定着していない
という問題もあります。
情報が少ない
日本語で読める情報はまだ少ないです。さらに、
書籍が少ない用語(訳語)がまだ定着していない
という問題もあります。
情報が少ない
日本語で読める情報はまだ少ないです。さらに、
書籍が少ない用語(訳語)がまだ定着していない
という問題もあります。
日本語の情報が少ない
分からないことがあれば、Twitterや F# User Groupを活用しましょう。
Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。
これからみんなで増やしていきましょう!
日本語の情報が少ない
分からないことがあれば、Twitterや F# User Groupを活用しましょう。Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。
これからみんなで増やしていきましょう!
日本語の情報が少ない
分からないことがあれば、Twitterや F# User Groupを活用しましょう。Visual Studioに F#が標準搭載になってから、まだ 1年も経っていません。まだまだこれからです。
これからみんなで増やしていきましょう!
書籍が少ない
逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず
この 2冊は買って熟読しましょう!
書籍が少ない
逆に考えるんだ!あれこれ迷う必要がないじゃないか!
と言うわけで、とりあえず
この 2冊は買って熟読しましょう!
書籍が少ない
逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず
この 2冊は買って熟読しましょう!
書籍が少ない
逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず
この 2冊は買って熟読しましょう!
書籍が少ない
逆に考えるんだ!あれこれ迷う必要がないじゃないか!と言うわけで、とりあえず
この 2冊は買って熟読しましょう!
用語(訳語)が定着してない
F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。
用語(訳語)が定着してない
F#ドキュメント翻訳向上委員会という委員会があります。
実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。
用語(訳語)が定着してない
F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。
これも徐々に定着していくでしょう。
用語(訳語)が定着してない
F#ドキュメント翻訳向上委員会という委員会があります。実践F#では基本的にはこの活動が反映された訳語を使用しています。これも徐々に定着していくでしょう。
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。
VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#
もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。
VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#
もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#
もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#
もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#
もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#もちろんNUnitとか使える
NUnitをラップした FsUnitも使える
どんなところでF#を使えばいいの?
利点と欠点を考えて、適材適所で使いましょう。VSのデザイナが活躍する部分はC#やVB
ロジック部分は F#
F#のテストはF#もちろんNUnitとか使えるNUnitをラップした FsUnitも使える
まとめ
F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!
まとめ
F#は.NETと相性のいい関数型言語!
F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!
まとめ
F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!
F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!
まとめ
F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!
ロジックに F#!みんなで F#やろうぜ!
まとめ
F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!
みんなで F#やろうぜ!
まとめ
F#は.NETと相性のいい関数型言語!F#は簡単、安全、便利!F#を取り巻く環境はまだ成長の余地あり!ロジックに F#!みんなで F#やろうぜ!
ご清聴、ありがとうございました
special thanks
※ PowerShell sort順
@mzp@otf
@rf0444@RKTM
@wof moriguchi
Top Related