F#簡(jiǎn)明教程一:F#與函數(shù)式編程概述
原創(chuàng)【51CTO獨(dú)家特稿】F#是微軟.NET開(kāi)發(fā)平臺(tái)的一門(mén)編程語(yǔ)言,其最大的特點(diǎn)是對(duì)函數(shù)式編程(FP,F(xiàn)unctional Programming)的引入;F#對(duì)面向?qū)ο螅∣OP)編程的支持也很出色,使用F#語(yǔ)言,開(kāi)發(fā)人員可以自由選擇函數(shù)式編程或面向?qū)ο缶幊虂?lái)實(shí)現(xiàn)他們的項(xiàng)目。此外,F(xiàn)#還可以與.NET平臺(tái)上C#、VB等其他編程語(yǔ)言緊密結(jié)合。
#T#CPU多核心化和云計(jì)算的背景下,函數(shù)式編程可以很好的解決多并發(fā)運(yùn)算的問(wèn)題(在處理并發(fā)問(wèn)題方面,面向?qū)ο缶幊檀嬖谝欢ǔ潭鹊墓逃腥毕荩热珙惡蛯?shí)例化過(guò)程中產(chǎn)生的一些副作用,詳細(xì)請(qǐng)參考51CTO.com對(duì)另一門(mén)函數(shù)式編程語(yǔ)言Erlang的視頻訪談《因并發(fā)而生 因云計(jì)算而熱:Erlang專家訪談實(shí)錄》)。微軟看到了這個(gè)趨勢(shì),試圖通過(guò)專門(mén)為函數(shù)式編程打造的F#語(yǔ)言提升.NET平臺(tái)在并發(fā)處理、多核多并發(fā)方面的能力,進(jìn)一步提升開(kāi)發(fā)人員的生產(chǎn)力和代碼運(yùn)行效率。
在2009年的TechED上,51CTO.com就F#和函數(shù)式編程的問(wèn)題視頻采訪了微軟MVP趙頡老師,我們可以采訪視頻了解F#和函數(shù)式編程最近的發(fā)展,詳細(xì)請(qǐng)參考《TechED 09視頻專訪:F#與函數(shù)式編程語(yǔ)言》。
F#小背景:看似年輕的F#已經(jīng)有近10年的歷史。最初由微軟研究院的Don Syme于2002年立項(xiàng)研發(fā);F#在2005年推出第一個(gè)版本,2007年底,微軟宣布F#進(jìn)入產(chǎn)品化階段。在不斷的改進(jìn)中,F(xiàn)#從C#、Linq和Haskell中吸收了很多優(yōu)點(diǎn)。
F#編程起步
F#可以運(yùn)行在.NET Framework 2.0版本以上的平臺(tái)。如果你的Visual Studio之前沒(méi)有安裝F#,可以從微軟F# Developer Center獲得(http://msdn.microsoft.com/en-us/fsharp/default.aspx)。
不能免俗,讓我們來(lái)看看F#的Hello World代碼:
- #light
- System.Console.WriteLine(“This is one hello”)
- printfn “This is another hello”
將代碼保存為hello.fs文件后,我們需要在命令行中通過(guò)fsc.exe編譯生成一個(gè).NET程序集。在命令行中的編譯代碼如下:
- fsc hello.fs
通過(guò)上面的代碼,我們就得到了常見(jiàn)的可執(zhí)行文件(.exe文件),這就是我們F#的起步——hello.exe。
F#小提示:F#是.NET平臺(tái)上的一個(gè)編譯型語(yǔ)言,但仍然可以像腳本語(yǔ)言一樣運(yùn)行??梢允褂肰isual Studio或fsi.exe(在F#安裝目錄下的bin目錄)進(jìn)行F#腳本的執(zhí)行。
代碼解讀
讓我們來(lái)仔細(xì)看看hello.fs文件里的代碼
◆程序首先以“#light”開(kāi)始,在以后的F#之路上,我們會(huì)經(jīng)??吹健?light”;大多數(shù)時(shí)候,“#light”總是出現(xiàn)在F#程序的開(kāi)始位置,這是F#輕量級(jí)語(yǔ)法的標(biāo)識(shí);在最新的F#版本中,#light將作為默認(rèn)選項(xiàng)。
◆“System.Console.WriteLine”調(diào)用一個(gè).NET基礎(chǔ)類(熟悉C#或VB.NET的朋友會(huì)相當(dāng)熟悉)用來(lái)初始化一些必要的功能。
◆“printfn”是F#的一個(gè)常用函數(shù),他會(huì)將雙引號(hào)中的參數(shù)輸出到控制臺(tái)上顯示。
跟其他程序的Hello World一樣,這段F#代碼簡(jiǎn)單易懂,看著跟其他語(yǔ)言寫(xiě)就的Hello World還有些相似;但作為函數(shù)式編程語(yǔ)言,F(xiàn)#的語(yǔ)法和編程中的思路卻有很大的不同。在下周的章節(jié)中,我們將深入F#編程,講解F#的類型系統(tǒng)及編譯機(jī)制。