文 / 蔡學鏞
微軟從2002年開始研發F#,2005年推出第一個版本,而2008年的現在,F#已經接近成熟。2007年底,微軟宣布將F#從研究室的專案轉移到產品部門,進入產品化的階段。在下一個版本的Visual Studio中,F#將會成為正式的一員,和C#、Visual Basic平起平坐。目前,F#也已經和Visual Studio做了初步的整合。
一個新語言的誕生,自然有它的時代背景,對F#來說,自然是函數式編程(FP,Functional Programming)的因素。我已經在許多文章提到FP對現在IT環境的重要性,請自行上網查詢閱讀這些文章,我不在此重複敘述。
事實上,除了具備FP的能力,F#在Imperative Programming與OOP(物件導向編程)方面的能力,也是不打折的。因此,利用F#寫程式,可以享有高度的自由,想用什麼樣的paradigm,你可以自己作主。但如果完全不使用FP,那麼使用F#的意義不大,不如回頭使用C#。
雖然F#比其他FP語言(Haskell、Erlang、Common Lisp)似乎更好學(因為語法比較不奇怪),但是一般人要善用F#並不容易,主要是FP的Paradigm和我們慣用的OOP與Imperative Programming不同。因此,熟悉F#的過程中,一開始最好強迫自己只用FP的方式寫F#程式,不要用到OOP和Imperative Programming。
FP編程常用到的技巧包括了下面八點:Higher-Order Function、Currying、Lazy Evaluation、Continuations、Pattern Matching、Closure、List Processing、Meta-Programming。令人驚訝地,F#對這八點的支援都相當不錯。許多FP語言在這些方面可能還比不上F#完整。一開始寫F#程式,盡量多用這些技巧,寧可矯枉過正,這是學習的必經階段。
我認為,想要開始習慣用F#寫FP程式,你可以開始做下面的事:
- 將Object為主的程式碼轉回Procedure的方式:將Object化成Record,將Method轉成Function,將this(或self)當作Function的參數,把Function集中放到Module(模組)。
- 將程式中用到迴圈的地方,盡量轉成遞迴(Recursion)。先不要管執行效率的問題。
- 將程式中用到if/else或switch/case的地方,改用Pattern Matching(模式比對)。
只要做到上述這三件事,你的F#程式會具有濃濃的FP風味。
F#由於是建構在.NET平台上,所以當然和.NET有天衣無縫的整合。事實上,F#所提供的互動式環境,對於學習.NET API來說,是相當不錯的工具,比PowerShell更適合程式員使用。
由於F#的開發相當早(2002年),且F#比較是屬於靜態的語言,而不是動態的語言,所以目前F#並沒有以.NET的DLR(Dynamic Language Runtime)為平台。未來F#會不會搬到DLR上頭?情況還不明朗。
以往用FP開發的系統多以科學和財務為主,現在有了F#和.NET,應該可以為FP打開更廣的應用領域。我相信,漸漸地會有人改用F#寫.NET的各種應用(ASP.NET、GUI、LINQ)。
F#也是一種Language-Oriented Programming(語言導向編程)的語言。所謂的「語言導向編程」,就是Meta-Programming,也就是「可以建立自己的DSL」。我寫過一篇關於「GPL & DSL」的文章,但是這篇文章並未得到太多讀者的注意,顯然大家並沒有意識到Meta-Programming的重要性,相當可惜。
F#對於Meta-Programming的支援相當好,有多種方式可以實作出DSL。有了F#,你不需要用到ANTLR這樣的外部工具,也可以建立自己的DSL。
如果你現在就想學習F#的話,要特別注意。目前F#的文件寫得並不好,不完整、未更新、且凌亂。想透過閱讀官方的線上資料來學習F#,能學會F#的機會不高。必須讀APress出版的Expert F#這本書。此書作者之一Don Syme是F#計畫的負責人。
雖然目前文件上有缺失,但是因為F#已經轉移到產品部門,所以我相信再不用多久,這些問題就會逐漸解決。
雖然F#已經推出三年,但是過去僅算是實驗室的專案,並不是商品,所以在Tiobe排行榜上面並沒有特別好的表現。在商品化之後,應該就會改善。在Tiobe排行榜中,F#併入ML中,而目前ML在排行榜中是39。未來這幾年,勢必會漸漸逼近20名。
整體來說,F#是很不錯的語言,熟悉F#之後應該可以提升軟體開發的生產力。身為微軟.NET家族的唯一FP語言,F#的地位相當特殊而重要。以F#的先進與方便,未來「說不定」會成為C#的強大競爭對手。有人甚至認為,使用過F#之後,就不會想用其他.NET語言了。這是真的...至少對我來說是如此。
相关推荐
F#是一种多范式编程语言,由微软研究实验室开发,并在.NET框架上运行。它结合了函数式、命令式和面向对象编程的特性,为程序员提供了丰富的表达能力。F#的独特之处在于其简洁的语法、强大的类型系统以及对并行和并发...
F#拥有许多独特的优势,使其在特定场景下成为开发者首选的语言之一。以下是几个重要的理由: - **简洁性**:F#允许开发者以更少的代码量实现相同的功能,这不仅提高了开发效率,也使得代码更容易维护。 - **类型...
**F# 2.0** 是一种由微软研究部门与开发者部门共同研发的编程语言,旨在为开发人员提供强大的功能编程能力的同时,也支持面向对象编程、命令式编程等多种编程范式。该版本发布于2010年4月,并且此文档是该版本的一个...
F#是一种功能强大的编程语言,它由微软研发并作为.NET框架的一部分。该语言融合了面向对象编程与函数式编程的特点,提供了类型安全、高性能及脚本语言级别的交互性。F#基于Ocaml,并进一步扩展和完善了ML函数式编程...
.net f# 函数式编程 ocaml Visual F# 由微软发展成为微软.NET语言提供运行环境的程序设计语言。Visual f#是多元化编程语言,它支持函数式、命令式和面向对象的混合编程风格。Visual F# 可用于开发应用程序或用 F# 码...
微软官方 F# 指南 20171224 微软官方 F# 指南 20171224
F#语言是.NET框架的一部分,由微软开发并维护,旨在提升程序员的生产力和代码质量,尤其在处理复杂计算和数据处理任务时表现优秀。 F#的设计灵感来源于ML语言家族,同时吸取了其他编程范式的精华,如面向对象和命令...
F#是一种由微软开发的多范式编程语言,它融合了函数式、命令式和面向对象的编程风格。在本文中,我们将通过一个具体的实例来学习F#的基本语法。实例是一个实现Sieve of Eratosthenes算法的简单程序,用于找到给定...
F#是一种由微软开发并支持的多范式编程语言,它融合了函数式、命令式和面向对象编程的特性。在《F#语言程序设计》一书中,作者郑宇军详细介绍了如何利用F#进行高效且优雅的软件开发。这本书作为清华大学出版社的教材...
- **Don Syme**:F#语言的主要创造者之一,微软研究院的研究员。 - **Adam Granicz**:.NET和F#领域的专家,同时也是GrapeCity公司的创始人之一。 - **Antonio Cisternino**:软件工程师,专注于.NET平台及F#的应用...
《Expert F#》是Apress出版社出版的一本深入探讨F#编程语言的专业书籍。F#是一种功能丰富的编程语言,属于.NET框架的一部分,它融合了函数式、命令式和面向对象编程范式,使得开发者能够利用多种编程风格进行高效...
F#是一种由微软开发的多范式编程语言,它融合了函数式、命令式和面向对象的编程风格。作为微软.NET框架的一部分,F#提供了一种高效、强大的工具,特别适用于处理复杂的数据分析和并行计算任务。在“微软最新脚本语言...
F#是一种多范式编程语言,它在.NET框架上运行,并且完全支持.NET生态系统。F#的设计目标是提供一种简洁、高效且强大的编程工具,它融合了函数式、面向对象和命令式编程范式,使得开发者能够根据问题的特性选择合适的...
《F#基础》这本书深入浅出地介绍了F#编程语言及其背后的函数式编程思想,旨在为读者提供一个全面了解F#及其应用的平台。通过学习本书,你可以掌握一系列与F#相关的关键知识点。 1. **F#语言简介**:F#是一种多范式...
### F#:微软的功能性编程语言 #### 一、引言 《Beginning F#》这本书由罗伯特·皮克林(Robert Pickering)撰写,是面向初学者介绍微软F#编程语言的一本指南。本书得到了F#之父唐·西姆(Don Syme)以及资深F#专家...
F#是一种多范式编程语言,它融合了函数式、命令式和面向对象编程的特点,由微软研究团队开发,并且得到了广泛的支持和应用。在F#中,开发者可以灵活地选择最适合问题域的编程风格,从而提高代码的可读性和可维护性。...
### F# 2.0: Key Concepts and Applications #### Introduction _F# 2.0_ is a comprehensive guide aimed at teaching the essentials of the F# programming language, specifically focusing on version 2.0. ...
F#是一种功能强大的编程语言,它基于.NET平台,具有静态类型、函数式、命令式、面向对象和反射式编程特性。F#强调简洁和表达力强的语法,以及类型安全和模式匹配等特性,非常适合于金融、医疗、科学和游戏开发等多个...