F 探險之旅(一) 選擇不同的開發方式

2021-09-05 19:30:21 字數 2676 閱讀 6488

f#系列隨筆索引頁面

踏上新的旅途

每次旅途都會讓人興奮,都會帶來愉快的體驗。踏上新的地方,欣賞那些美景,感受那些與自己無關的人和事,身心會得到很大的放鬆。而回來以後,則會對自己習慣居住的地方產生新的感受,不知你有沒有如此的體會呢?

學習f#,也算是這樣的旅途吧,畢竟其理念與一直接觸的c/c#等很不一樣。好奇心遇到未知的事物就會興奮,就像要踏上新的旅途一樣。那為什麼叫探險之旅呢?

知識是有時效的資產,咱們微軟平台下的開發人員對此應當感受頗深。平台、語言、環境更新地很快,更新意味著舊有知識的貶值,隨之帶來的是程式設計師的貶值(但也不是絕對的)。另一方面,長時間使用同一種平台/語言/環境,我們的思維也會僵化。這些都不是我們希望看到的。

我們需要對自己的知識進行評估並進行投資。富蘭克林說,「知識上的投資總能得到做好的回報」,但別忘了,投資總會伴隨著風險,這就是所謂的「探險」了。

《程式設計師修煉之道》建議,每年至少學習一門新語言,認為這會幫助程式設計師拓展思路,避免墨守成規。個人認為,學習不同的語言,了解解決問題的不同方式,讓自己融會貫通,這是好事,但至少要對一門語言有夠深的理解,否則可能會「樣樣精通,樣樣稀鬆」。

另外說句題外話,《程式設計師修煉之道》還建議,閱讀非技術書籍,這也許是乙個容易被忽略的問題。記住,我們是程式設計師,但首先我們都作為乙個人。

言歸正傳

要了解f#跟和我們朝夕相處的c#的關係,可以看看allen lee的從c#3.0到f#。要想快速地獲得對f#的了解,可以看看這兩篇隨筆:f#快速上手(一),f#快速上手(二)。

接下來我們看看開發f#時可以選用的不同方式。

(一)notepad

f#程式本質上就是文字檔案,所以我們可以使用文字編輯器來編寫,比如記事本。它的擴充套件名為.fs,編寫完畢後使用fsc.exe來編譯。比如,編寫乙個最簡單的檔案helloworld.fs:

#light

print_endline 

"hello world

"read_line()

使用命令fsc.exe helloworld.fs編譯該檔案,生成helloworld.exe檔案,它將在控制台輸出一段文字。注意要將fsc.exe的路徑新增到環境變數中。

如果採用文字編輯器的方式,我們當然不會真的使用notepad,大可以採用editplus或notepad++這樣的工具,它們不但提供了更強大的編輯功能,還可以新增使用者自定義工具,這樣就不用每次都開啟命令列編譯了。

(二)fsi

f#互動控制台(f# interactive console, fsi)採用的是「repl loop」模式,即read-evaluate-print-loop。也就是輸入一段**,編譯並執行,然後輸出結果。通過它您可以快速地開發和測試程式。可在開始選單中找到它。

(三)vfsi(在vs中整合fsi)

要在vs中啟用fsi,開啟add-in manager視窗。

選中「f# inactive for visual studio」。然後,選中要執行的程式**:

接著按下alt+enter(實際上,如果fsi還麼有開啟,需要按兩次alt+enter)。這時會看到出現了乙個工具視窗:

我們剛才做的事情是將**片段直接傳送給fsi會話,fsi將結果輸出。

這是最簡單的方式了,我們可以利用vs提供的智慧型感知,可以檢視各個識別符號的型別等資訊,非常方便。

另外我們可以將fsc.exe新增到外部工具中,為該命令分配快捷鍵。比如可以這樣新增:

然後分配快捷鍵:

有時fsi會莫名地不能編譯通過,通過這樣的方式可以方便的將單個檔案編譯為可執行檔案,編譯也不會有問題了。

(四)f# script

除了.fs,我們還可以將**檔案儲存為.fsx,在資源管理器中右擊該檔案,會發現「run with f# interactive」選單項,選擇它就可以執行**了,這種方式適合於小型檔案,可以隨時修改,無須編譯。

(五)sharpdevelop

最新版的sharpdevelop提供了對f#專案的支援,但是不支援智慧型感知。我覺得最有用的是它的檔案順序調整功能,如果你的專案包含較多的檔案,可以試試它。

關於檔案順序的問題,可以參考如何組織程式一文。

最後,建議主要使用第三種方式即vfsi開發,其它的作為補充。

f#系列隨筆索引頁面

乙個js檔案中使用不同的id呼叫不同的方法

在進行js的學習和時間中,遇到了乙個需求是,在乙個js檔案中有許多的操作,而我需要根據不同的id進行不同的操作。最開始我想到的是通過建立不同的js然後在html頁面呼叫不同的js來完成,但是過於笨重並且十分麻煩,於是在思考一種比較方便的方法。於是我想到了document.getelementbyid...

Qt移動應用開發(一) 適配不同的螢幕

到眼下為止。qt5.3已經出現非常長一段時間了。而且已經有一些應用使用qt進行構建了。我自己也完畢了第一款使用qt構建的手機遊戲 吃藥了 那麼接下來的幾篇文章主要向大家分享我是如何使用qt進行移動開發的。qt移動應用開發分為多篇部落格文章,每一篇文章都力求精簡不羅嗦。力求為大家提供乙個快捷的參考。我...

關於F5負載均衡的一點方案

網路的作用是交付應用和服務,目標客戶群體遍布各地,隨著業務需求的變化和提公升,xx網路系統的訪問量將成倍增長,為了避免internet鏈路中斷所造成的損失,我們建議使用不同isp提供的兩條internet鏈路,以提供更好的鏈路可靠性和效能。可靠性的提高來自於兩條鏈路的使用,而效能提高則是因為同時使用...