F#現在和未來的前景或者應用領域會怎樣?
作為微軟的主打編程語言,F#的流行程度似乎不如C#,學習F#是否有很大的前景和應用,能舉例說明嗎?謝謝
F#項目早於C#, 但是因為F#需要的一些特性,在早期的.NET runtime中並不支持, 比如1.x時期並不支持泛型, 不支持可空值類型等. 所以成熟的F#(因為從成熟的OCaml發展來的, 所以一開始就是成熟語言) 反而在不成熟的C#之後很多年才發布.
F#的積極意義在於大大推動了.NET新版本發展(對C#和http://VB.NET來說很多東西可有可無,但對F#確是必須的,F#團隊一直在追著CLR團隊增加那些東西), 那些為了F#而準備的東西也使得C#受惠了.至於應用場景,我知道的是有個倫敦的朋友說現在倫敦金融圈子很推F#....拋開那些遙遠的東西,我覺得每個打算把.NET開發走下去的人都值得學習F#, 即使你一輩子不使用它. 因為當你真的學會F#以後, 你再看你的C#代碼會覺得很醜...為什麼你用F#一百行代碼可以做的事情, 你以前用C#寫了500行甚至1000行? 都運行在.NET上使用一樣的庫, 為什麼C#不能? 然後你就會嘗試著用C#去翻譯你用F#寫的代碼....最終結果你發現,只要額外做一點點事情,然後改變一下代碼思路, C#也可以用接近F#的行數完成一樣的事情,於是你原來1000行的C#代碼被你重構得只剩下150行了...雖然比F#代碼還是多了一些,但是比以前已經短了很多.
代碼並非越短越好, 把變數名起成一個字母是個壞習慣, F#代碼短的原因是使用更少的語法元素(因為F#語法元素比C#多而且複雜,因此只需要使用更少....就像10進位有10個元素,所以10進位數字寫起來比2進位要短..) 而更少的語法元素意味著更少的犯錯的點, 更少的細節, 也會帶來更少的bug.
舉個例子,同樣是C#代碼, for循環比foreach 需要更多語法元素,所以同樣一個循環,如果可以for也可以foreach, foreach出bug的機會會比for少很多, for出bug可能出在 (int i=0;i&
從一堆products裡面找出昂貴的商品的名字出來(假設超過100元算貴)
典型C#代碼:public List&
{
List&
foreach(Product p in products)
{
if(p.Price &> 100.0)
{
names.Add(p.Name);
}
}
return names;
}
這個代碼沒有問題吧? 但是如果你學懂F#,你再用C#寫這個代碼,你肯定不會這麼寫了, 因為用F#的思考邏輯,這個C#代碼應該這麼寫:
public List&
{
products
.Where(p=&>p.Price &> 100.0)
.Select(p=&>p.Name)
.ToList();
}
當然,沒學過F#的人如果LINQ用得熟悉也寫得出這種代碼,但你不一定會想到這個, 只是如果你學過F#,你就自然而然壓根不會想去寫最上面那種代碼. (這裡為了容易理解這種思路這個例子里用的 "語法組件" where 和 select 都是linq里現成的, 當遇到要用F#獨有的那些 "語法組件" 而linq里並沒有對應的方法的時候(這種情況太多了...F#提供比LINQ豐富得多的謂詞), 你可能會考慮在C#里給LINQ再定義一些可用的方法來代替F#特有的那些, 因為那可以讓你的代碼更容易看懂也更優雅.總之, 使用F#一段時間以後你的C#代碼水平會有一個飛升的.
所以即使不使用F#, 它也依然是值得學習的.
FunScript項目可以把F#編譯成javascript,完爆typescript和其他各種altjs
我只能說,在金融界比如做Quant之類的,F#是一門非常有前景而且越來越火的語言。另外,總覺得知乎應該為F#建立一個單獨話題。
C#側重面向對象,但也支持函數式風格編程,F#側重函數式,但也支持面向對象編程風格。
其實現在學習任何一門函數式編程語言都是值得的,多一種編程思維對我們寫代碼有好處。越來越多的語言正在向混合式風格轉變,即即支持命令式也支持函數式編程。
https://www.youtube.com/watch?v=8HKW9pBiY_0list=PLdss4Wq7WZqVENIoj0Ca_RwdMtS9g-sQWindex=47一個視頻里就展示了許多F#功能。
每次看到F#相關話題里總有人對比C#,然後再給個C#用LINQ的例子……
講道理,寫代碼不能只講究「炫酷」啊。用一個數組能解決的事用LINQ要麼得用List要麼得自己去實現IEnumerable。
雖然答主C#1的時候就有接觸了,但是不得不說C#近年火起來跟unity有很大關係。答主在某遊戲公司做unity前端主程,同事很多都是從C++轉過來的,比如他們不知道foreach的變數只聲明一次,對於內嵌的匿名方法永遠都只能捕獲到同一個變數;比如他們不知道怎樣使用LINQ是立即執行,哪樣的是延遲執行,哪樣會產生一個對性能影響巨大的緩衝操作(尤其是在遊戲中),等等問題,要他們非得用「函數式」的風格寫代碼,先不說可讀性,太多的性能陷阱會造成無止境的麻煩。倒不如用cpp風格來寫,「丑」是丑,好歹少出錯。http://Jet.com 去年被沃爾瑪收購,自稱僅次於amazon,用的 F#
推薦閱讀:
※vba程序中為什麼首先activate或select一個sheet?
※如何看待思普操作系統狀告微軟?
※win10如何實現定定時休眠?
※微軟基於arm的WinRt系統,底層API是什麼?
TAG:微軟Microsoft | 編程語言 | VisualF# |
