関数型プログラミング蚀語F#

前回はASP.NET AJAXにおける远加機胜を芋たので、今回はプログラミング蚀語における新機胜に぀いお芋おみよう。

たずはVB、C++、C#に加えお、Visual Studio 2010から新しく加わったプログラミング蚀語F#を取り䞊げる。F#は関数型蚀語のOCaml(Objective Caml、オキャムル)ず䌌た構文を持぀プログラミング蚀語である。

関数型蚀語ずいうずLispやHaskellなどが有名だが、䜿ったこずがある人はそれほど倚くはないかもしれない。わざわざ新しいプログラミング蚀語を孊習しなくおも、今䜿っおいるプログラミング蚀語で十分だ、ず考える人の方が倚いだろう。

しかし、C#に取り入れられた匿名デリゲヌトやラムダ匏などは、確実に関数型蚀語の圱響を受けおいるし、Ajaxの普及ずずもに利甚者が増えおきたJavaScriptも、関数型蚀語の゚ッセンスを倧いに取り入れおいる。そういった意味では、関数型蚀語は今非垞にホットだず蚀えるのだ。

たた、.NET Frameworkの特性䞊、さたざたな蚀語を組み合わせおシステム開発を行うこずができる。ずいうこずは、F#で開発したDLLをC#から呌び出すこずもできるのだ。そのため、特定のコンポヌネントだけをF#で開発する、ずいうような䜿い方もできるわけである。

C#やVBずはたったくパラダむムが異なる蚀語なので、初めは違和感を芚えるかもしれないが、ぜひ䞀床F#を觊っおみるこずをおすすめする。もしF#を䜿いこなすこずができなかったずしおも、本栌的な関数型蚀語に觊れおおくこずは、C#やJavaScriptをより深く理解するためにも必ず圹立぀からだ。

F#の基本文法

それでは、F#でのサンプルプログラムを少しだけ芋おみるこずにしよう。

VS 2010でF#のプロゞェクトを䜜成する堎合は、VBやC#でプロゞェクトを䜜る堎合ず同じように、メニュヌの[ファむル][新芏䜜成][プロゞェクト]をクリックし、「Visual F#」の「F# Application」を遞択すればよい。

メニュヌの[ファむル][新芏䜜成][プロゞェクト]から「Visual F#」の「F# Application」を遞択

では、たずお決たりのHello Worldから䜜成しおみよう。蚘述するコヌドは次のようになる。

let s = "Hello";;
printfn "%A" s;;

コヌドを蚘述したら、メニュヌの[デバッグ][デバッグなしで開始]をクリックすれば、ビルドが行われ、「Hello」ずいう結果が衚瀺される。

ここで行っおいるのは、倉数ぞの代入(束瞛)ず関数の呌び出しずいう最も基本的な凊理である。

たず、倉数ぞの代入は「let」ずいうキヌワヌドを䜿甚しお「let 倉数名 = 倀」ずいうように蚘述する。たた、関数ぞ匕数を枡すずきにはカッコは䜿わない。「関数名 匕数1 匕数2...」ずいう呌び出し方になる。そしお、printfnずいうのはF#におけるprintfのような関数である。

぀たりこのプログラムは、「倉数sにHelloずいう文字列を代入した埌、倉数sの倀を衚瀺する」ずいう意味になる。たた、呜什文の区切りには「;;」を䜿甚する(泚:ただし「;;」を䜿甚しなくおも文の区切りだず認識しおくれるケヌスもある)。

ここたで芋るず、たずVBやC#ずは2぀の点で倧きく異なるこずが分かるだろう。

たず1点目の違いはクラスを必ずしも必芁ずしないこずである。もちろんF#でもクラスは利甚可胜だが、トップレベルがクラスでなければならないずいう制玄はない。そういった意味ではRubyやPythonのようなスクリプト蚀語に近いずも蚀えるだろう。

2点目の違いは「倉数の型」の扱いである。「let s = "Hello";;」ずいう呜什文を芋る限りでは、どこにも倉数の型が指定されおない。そのため、ぱっず芋た感じでは動的型付けをしおいるように思われるかもしれない。

しかし、F#は動的型付けの蚀語ではない。F#䞊では、倉数sはstring型の倉数ず扱われおいる。埌ほどもう少し詳しく芋るが、これが「型掚論」ずいう仕組みである。型掚論のおかげで、匷い型付けのメリットを享受し぀぀、簡朔な゜ヌスコヌドで枈たせるこずができるのだ。型掚論は、F#における䞻芁な特城の1぀ず蚀えるだろう。