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