一、写在前面的话

个人由某方面的兴趣需要学习 F#,网络上有关F#的中文资料很少,微软官方有很不错的文档,但是很可惜的是绝大部分的章节都是英文的。个人是一位.NET爱好者,想自己将 F# 的官方文档翻译出来,算是为了自己喜欢的 .NET 做一些贡献。

二、原文链接

Getting started with F# in Visual Studio

三、在这篇文章中

  • 安装 F#
  • 创建一个控制台应用程序
  • 编写您的代码
  • 运行您的代码
  • 使用 F# Interactive

在 Visual Studio IDE 中支持 F# 和 Visual F#。在开始前,如果您还没有下载 Visual Studio 的话,我们应该先下载它。本文使用 Visual Studio 2017 Community 版本,您当然可以用您选择的版本来使用 F#。

四、开始

1. 安装 F#

如果您是第一次下载 Visual Studio, 它将首先安装 visual studio 安装程序。从安装程序中安装任何版本的 Visual Studio 2017。如果已经安装了它, 请单击 "修改"。 接下来将看到工作负载列表。您可以通过以下任一工作负载来安装 F#:

Workload Action
.NET desktop development Select F# language support from the right-hand side
ASP.NET and web development Select F# language support from the right-hand side
Data storage and processing Select F# language support from the right-hand side
Mobile development with .NET No action - F# is installed by default

最后, 单击右下方的 "修改"。这将安装您所选择的所有内容。然后, 通过单击 "启动", 就可以使用支持 F# 语言的 Visual Studio 2017 了。

2. 创建一个控制台程序

控制台应用程序是 Visual Studio 中最基本的项目之一。这里介绍怎样创建它。 打开 Visual Studio :

  1. 在“文件”菜单下,选择“新建”,然后选择“项目”。
  2. 在新建项目对话框中,我们应该能在“模板”区域内看到 Visual F#。选择该项以显示F#的模板。
  3. 选择“确定”按钮创建 F# 项目!你现在应该能在“解决方案资源管理器”中看到一个F#项目。

3. 编写您的代码

让我们立即开始写一些代码吧。请确保该程序. fs 文件已打开, 然后用以下内容替换它:

 module HelloSquare

 let square x = x * x

 [<EntryPoint>]
let main argv =
7   printfn "%d squared is: %d!" (square )
   // Return an integer exit code

在前面的代码示例中,定义了一个函数square,它需要一个输入 x,然后将它与自身相乘。因为 F# 使用类型推理,因此不需要指定 x 的类型。F# 编译器了解可使乘法有效的类型,并根据 square 被调用的情况来为 x 赋予合适的类型。如果你将鼠标悬停在 square,你应该能看到如下内容:

 val square: x:int -> int

这就是函数类型签名。它可以这样理解“square 是一个函数,它需要输入一个整数 x,然后产生一个整数”。请注意,编译器赋予当前的 square int 类型——这是因为并不是所有类型都能进行乘法操作,能够进行乘法操作的类型所构成的集合是一个封闭的集合。当前 F# 编译器选择 int,但是如果您调用 square 再传入一个不同类型的输入,例如 float,它将调整类型签名。

另一个定义的函数main,使用 EntryPoint 特性来告知编译器应该从哪里开始执行程序。它遵循与其他C语言风格的编程语言相同的约定,该函数可以接收命令行参数,会返回一个整数(通常为0)。

在这个函数中,我们调用 square 函数传入参数 12。然后,F# 编译器将赋予 square 的类型为 int -> int(表示这样的一个函数,输入 int 后产生一个 int)。printfn 是一个格式化输出函数,它使用类似于C语言样式的编程语言的格式化字符串,传入的参数对应格式化字符串中指定的值,然后输出结果并新起一行。

4. 运行您的代码

        您可以通过按 ctrl-f5 来运行代码并查看结。这将运行程序而不进行调试,允许您查看结果。或者, 您可以选择 Visual Studio 中的 "调试" 菜单项, 然后选择 "开始而不进行调试"。
现在, 您应该看到 Visual Studio 弹出的控制台窗口输出一下内容:
12 squared is 144!
恭喜您!您已经在 Visual Studio 中创建了您的第一个 F# 项目,该项目编写了一个 F# 函数,您调用了该函数,并输出了该函数产生的结果,最后运行了该项目并查看该结果。
5.  使用 F# 交互式编程
        在 Visual Sutdio 中,Visual F# 工具最好的一个功能就是 F# Interactive 窗口。它允许您将代码发送到一个进程,您可以调用其中的代码并交互式的查看结果。
        要开始使用它,请选中定义平方函数的代码。接着,按住 Alt 键并按下 Enter。这将在  F# Interactive 窗口中执行执行代码。您应该能看到 F# Interactive 窗口中输出一下内容:
>
val square : x:int -> int
>
        这与您将鼠标悬停到 square 上时显示出的函数签名相同。因为现在 square 已经在 F# Interactive 窗口中被定义,你可以传入不同的值来调用它:
> square 12;;
val it : int = 144
> square 13;;
val it : int = 169
        这将执行函数,并将结果绑定到 it 上,并显示 it 的类型和值。注意,每行必需用 ;; 结束。这让 F# Interactive 知道何时完成函数调用。您还可以在 F# Interactive 中定义新的函数:
> let isOdd x = x % 2 <> 0;;
val isOdd : x:int -> bool
> isOdd 12;;
val it : bool = false
        上面定义了一个新的函数 isOdd,它接受一个 int 参数并检查它是否为奇数!您可以调用此函数以查看它在不同的输入下返回的内容。可以如下调用函数:
> isOdd (square 15);;
val it : bool = true
        您也可以使用“管道转发”运算符将该值传入两个函数中:
> 15 |> square |> isOdd;; val it : bool = true

在Visual Studio中入门F#的更多相关文章

  1. 教程:Visual Studio 中的 Django Web 框架入门

    教程:Visual Studio 中的 Django Web 框架入门 Django 是高级 Python 框架,用于快速.安全及可扩展的 Web 开发. 本教程将在 Visual Studio 提供 ...

  2. 利用Visual GDB在Visual Studio中进行Android开发

    转载请注明http://www.cnblogs.com/adong7639/p/4119467.html 无意中发现了Visual GDB这个工具,可以再Visual Studio中进行Android ...

  3. 在Visual Studio 中开发Office Add-in

    作者:陈希章 发表于2017年7月13日 "Talk is cheap, show me the code",我们就用代码来说话吧.这一篇将给大家介绍如何开始Office Add- ...

  4. 教程:在 Visual Studio 中开始使用 Flask Web 框架

    教程:在 Visual Studio 中开始使用 Flask Web 框架 Flask 是一种轻量级 Web 应用程序 Python 框架,为 URL 路由和页面呈现提供基础知识. Flask 被称为 ...

  5. 在 Visual Studio 中使用 Q# 进行量子编程

    1 量子计算机与量子编程 1.1 量子计算机 Quantum computing is computing using quantum-mechanical phenomena, such as su ...

  6. 在 Visual Studio 中创建一个简单的 C# 控制台应用程序

    转载:https://blog.csdn.net/qq_43994242/article/details/87260824 快速入门:使用 Visual Studio 创建第一个 C# 控制台应用 h ...

  7. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  8. Visual Studio 中 Build 和 Rebuild 的区别

    因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...

  9. [No0000AE]在 Visual Studio 中调试 XAML 设计时异常

    在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况.很多时候由于最终生成的项目在运行时并 ...

随机推荐

  1. 多线程——i++的坑

    在使用socket编程的时候发生数据丢失问题,一直以为是网络原因,后来测试后发现是多线程操作同一数据源又未加入数据锁导致. 直接上代码,下面程序执行的结果可能出现198.199.200.两个线程统一时 ...

  2. CentOS最小化安装后启用无线连接网络

    想要链接无线就需要无线工具包. yum install -y  wireless-tools安装完成之后就有 iwconfig,iwlist,iw等命令行工具了. 首先启动无线网卡,记得开启无线开关, ...

  3. 模块中为什么要加__name__ == "__main__"

    写一个hello模块 #!/usr/sbin/env python #-*- coding:utf- -*- print "我是hello模块,我被执行了" 在另一个python程 ...

  4. SEQ序号与ACK序号理解总结

    备查 SEQ序号与ACK序号理解总结

  5. dotweb——go语言的一个微型web框架(三)路由注册

    上一章我们讲了如何启动一个dotweb程序,本篇文章将介绍如何注册路由. router是dotweb用来管理路由的结构体,它提供了一些关于路由操作函数. app := dotweb.New() rou ...

  6. 老李分享:持续集成学好jenkins之安装

    老李分享:持续集成学好jenkins之安装   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...

  7. POPTEST老李分享修改dns ip的vbs代码

    POPTEST老李分享修改dns ip的vbs代码   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...

  8. Android线程池使用终结版

    有一段时间没写博文了,今天抽空总结一下,也希望能通过自己写的这些文章,加深理解的同时能帮 助在技术方面有疑点的朋友搞清楚个所以然来,由于经常会在网上或群里看到有朋友会问线程方面的 东西,就像我一个朋友 ...

  9. 线上分享会.net框架“ABP”分享会总结

    前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...

  10. 最近公共祖先LCA(Tarjan算法)的思考和算法实现

    LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...