zoukankan      html  css  js  c++  java
  • F#学习笔记基本类型

    最近在看《Programming F#》这本书,大约看到了第二章,感觉还不错,挺适合我这样的初学者。本书目前只有英文版的,以前看英文书很少能认认真真的看下去的,这次到还不错,已经看到了60多页了,目前把第二章看完了,也就是最基础的部分(Fundamentals),现在打算整理下,也算是对之前学习的内容的复习吧。

     

    数字

    这个跟C#里的没什么差别,只是在写法上略有不同。

    类型 后缀 .Net 类型 范围
    byte uy System.Byte 0 to 255
    sbyte y System.SByte -127 to 128
    int16 s System.Int16 −32,768 to 32,767
    uint16 us System.UInt16 0 to 65,535
    int, int32   System.Int32

    −2^31 to 2^31 − 1

    uint, uint32 u System.UInt32 0 to 2^32 – 1
    int64 L System.Int64 -2^63 to 2^63 – 1
    uint64 UL System.UInt64 0 to 2^64 – 1
    float*   System.Double  
    float32** f System.Float  
    decimal M System.Decimal  

    * ** 这2个倒是跟C#有些差别,需要注意。测试了下,float也可以写做double;float32可以写作single。

     

    // byte

    let n_byte = 2uy

    val n_byte : byte = 2uy

    // sbyte

    let n_sbyte = –3y

    val n_sbyte : sbyte = –3y

    // int16

    let n_int16 = –513s

    val n_int16 : int16 = –513s

    // uint16

    let n_uint16 = 65000us

    val n_uint16 : uint16 = 65000us

    // int

    let n_int = –100323

    val n_int : int = –100323

    // uint

    let n_uint = 2345000

    val n_uint : int = 2345000

    // int64

    let n_int64 = –354533234342L

    val n_int64 : int64 = –354533234342L

    // uint64

    let n_uint64 = 3423454323443UL

    val n_uint64 : uint64 = 3423454323443UL

    // float

    let n_double = 3.14159265358979

    val n_double : float = 3.141592654

    // float32

    let n_single = 1.41414141f

    val n_single : float32 = 1.41414142f

    // decimal

    let n_decimal = 0.6180339887498948482045868344M

    val n_decimal : decimal = 0.6180339887498948482045868344M

    // bigint

    let n_bigint = 12345678901234567890I

    val n_bigint : System.Numerics.BigInteger = 12345678901234567890

     

    四则运算

    加法:+

    减法:-

    乘法:*

    除法:/

    在F#里,运算符的两侧必须是2个相同类型的数字进行运算,不能像C#里那样自动类型转换。例如,当1 + 1.0的时候会得到如下错误:

    > let x = 1 + 1.0;;

      let x = 1 + 1.0;;
      ------------^^^

    d:\Temp\Max\stdin(5,13): error FS0001: The type 'float' does not match the type 'int'

    需要显示的做出类型转换:

    > let x = float 1 + 1.0;;

    val x : float = 2.0

     

    乘方运算符为:**,例如 2 ** 3 = 8。乘方运算符仅适用于float以及float32类型。

    取模运算符为:%, 例如 5 % 3 = 2。

     

    类型转换

    下表给出了几种类型转换的例子,其中第一个跟C#里的,基本上形式差不多(sbyte)5,后面3种,是将字符串转换成数字,这个实际上是调用了System.Convert中的方法。当转换失败的时候,则会抛出System.FormatException。

    类型 描述 例子 结果
    sbyte convert to sbyte sbyte 5 5y
    byte convert to byte byte “42” 42uy
    int16 convert to int16 int16 ‘a’ 97s
    uint64 convert to uint64 uint64 “0xFF” 256UL

     

    BigInt

    BigInt是在.Net 4.0新增加的数据类型,这在计算一些很大的数的时候很有用。它在System.Numerics命名空间下,类型名称是BigInterget。

    let gigabyte = 1024I * 1024I * 1024I

    let petabyte = gigabyte * 1024I * 1024I;;

    val gigabyte : System.Numerics.BigInteger = 1073741824
    val petabyte : System.Numerics.BigInteger = 1125899906842624

     

    位运算

    操作 描述 例子 结果
    &&& 位与 0b1111 &&& 0b0011 0b0011
    ||| 或与 0xFF00 ||| 0x00FF 0xFFFF
    ^^^ 异或 0b0011 ^^^ 0b0101 0b0110
    <<< 左位移 0b0001 <<< 3 0b1000
    >>> 右位移 0b1000 >>> 3 0b0001

     

    字符

    .Net下的字符表现为2-byte的UTF-16。

    printfn "Hex u0061 = '%c'" '\u0061';;
    Hex u0061 = 'a'

    // convert char to int

    int ‘C’;;

    val it : int = 67

    // convert char to byte

    ‘C’B;;

    val it : byte = 67uy

     

    字符串

    在F#里,字符串的定义可以有以下3种方式:

    // 普通的定义方式

    let password = “abcd”;;

    val it : string = “abcd”

    // 带换行的定义

    let password = “abc

    d

    e”;;

    val it : string = “abc

    d

    e”

    // 除最后一行外,每行最后带'\’,这样可以将一个很长的string拆成多行,但实际还是一行

    let password =”abc\

        d\

    e”;;

    val it : string = “abcde”

    获取string中的字符的方式也不同于C#,语法是:string.[index],例如"string”.[0] = ‘s’。

     

    布尔值

    true & false

    操作 说明 例子 结果
    && true && false false
    || true || false true
    not not false true

    在F#里也是支持布尔运算也是支持短路的(不记得是不是这么叫的了)

    true || f() // will return true and won’t execute function f

    false && f()  // will return false and won’t execute function f

     

    数据比较

    操作 说明 例子 结果
    < 小于 1 < 2 true
    <= 小于等于 4.0 <= 4.0 true
    > 大于 1 > 2 false
    >= 大于等于 4.0 >= 4.0 true
    = 等于 3u = 4u false
    <> 不等于 3I <> 4I true
    compare 比较 compare 1 1 0
        compare 0 1 -1
        compare 10 1

     

    好了,F#里基本的数据类型就差不多介绍完了。后面该介绍在F#里怎么定义方法还有一些核心类型,如Unit, Tuple, Option等之类的了。

  • 相关阅读:
    win7开启Administrator账户
    二叉树遍历
    使用NAnt提高工作效率(二)
    系统服务的最简单实现
    右键附加启动命令行
    C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
    百度原CTO李一男经典语录
    Sql开发技巧
    使用NAnt提高工作效率(一)
    对获取config文件的appSettings节点简单封装
  • 原文地址:https://www.cnblogs.com/FMax/p/1735884.html
Copyright © 2011-2022 走看看