| この項目では、プログラミング言語について説明しています。音名のF♯については「嬰ヘ」をご覧ください。 |
| パラダイム | 関数型プログラミング、命令型プログラミング、オブジェクト指向プログラミング、メタプログラミング、リフレクション、並行計算 |
|---|---|
| 登場時期 | 2005年 (20年前) (2005) |
| 開発者 | マイクロソフト、F Sharp Software Foundation |
| 最新リリース | 10.0[1] |
| 型付け | 強い静的型付け |
| 影響を受けた言語 | ML、OCaml、C Sharp、Erlang、Haskell、Python、Scala |
| 影響を与えた言語 | F* |
| プラットフォーム | クロスプラットフォーム |
| ライセンス | Apache License |
| ウェブサイト | fsharp |
| 拡張子 | fs、fsi、fsx、fsscript |
| テンプレートを表示 | |
F#(エフ シャープ)はマイクロソフトが開発した.NET向けのマルチパラダイムプログラミング言語である。Visual Studio 2010より標準開発言語として追加された。
2002年からマイクロソフトリサーチのドン・サイム(英語版) (英:Don Syme) ら[2]によってOCamlをベースに開発が始められた。
OCamlから多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである[3]。型安全であり[3]、型推論の機能をもつ[4]。ただし、オーバーロードをサポートしているため、OCamlのもつ型推論の完全性を失っている。C#やVisual Basic .NETなどの.NET言語と相互運用性があり[5]、.NETクラスライブラリの利用・開発が可能であり[6]、MonoおよびXamarinを利用したAndroidアプリケーション開発もサポートされている[7]。以前はSilverlightを利用したWindows Phone 7のアプリケーション開発もサポートされていた。
F#のFはFunctional programming language(関数型プログラミング言語)およびSystem Fが由来[8]である。
F#の開発環境はVisual Studioの有償版製品(あるいは無償のCommunityエディション)にVisual F#として含まれているほか、Expressエディションで利用可能な無償ツールの配布もされている[9][10][11][12]。Visual F# Tools 4.1でRoslynをサポートするようになった。また、Monoや.NET Core[13][14]環境向けにもF#コンパイラが移植されているため、macOSやLinuxなどでもF#プログラムの開発および実行ができる。
OCaml互換の標準ライブラリを備えており、F#とOCamlのどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などはF#とOCamlで異なっている。
OCamlと互換性のある冗語構文 (英:verbose syntax) と、Pythonのようなインデント(オフサイドルール)による軽量構文 (英:lightweight syntax) の二種類の構文を利用できる。標準では軽量構文が有効になっている。
(* これはコメント *)// 1行コメント。(* Hello world プログラム *)printfn"Hello World!"
letrecfactorialn=matchnwith|0->1|_->n*factorial(n-1)
(* int リストの要素を再帰的にプリントする *)letrecprintListlst=matchlstwith|[]->()|h::t->printf"%d\n"hprintListt(* 上と同様だが任意の型の要素をプリントする *)letrecprintList2l=matchlwith|[]->()|h::t->printfn"%A"hprintList2t(* match の代りに function 式を利用する *)letrecprintList3=function|[]->()|h::t->printfn"%A"hprintList3t(* 高階関数を利用する *)letprintlist4lst=List.iter(printfn"%A")lst
(* フィボナッチ数列 *)letrecfibn=matchnwith|0|1->n|_->fib(n-1)+fib(n-2)(* 遅延再帰シーケンス式によるフィボナッチ数列 *)letrecfibs=Seq.cache<|seq{yield![1;1]forx,yinSeq.zipfibs<|Seq.skip1fibs->x+y}(* 遅延無限シーケンスによるフィボナッチ数列 *)letfibSeq=Seq.unfold(fun(a,b)->Some(a+b,(b,a+b)))(1,1)(* 偶数のフィボナッチ数をプリントする *)[1..10]|>List.mapfib|>List.filter(funn->(n%2)=0)|>printList(* 同じことをシーケンス式を利用する *)[foriin1..10doletr=fibiifr%2=0thenyieldr]|>printList
(* フォームの作成 *)openSystem.Windows.Formsletform=newForm(Visible=true,TopMost=true,Text="Welcome to F#")(* フォーム テキストを決める *)letx=3+(4*5)doform.Text<-(ifx=23then"Correct!"else"incorrect")
| アーキテクチャ | |
|---|---|
| 共通言語基盤 | |
| 言語 | |
| パッケージマネージャ | |
| 関連技術 | |
| その他のCLI実装 | |
| 組織 | |
| 開発環境 | |
| その他 | |