zoukankan      html  css  js  c++  java
  • swift之函数式编程(五)

    文章内容来源于《Functional Programing in Swift》,详情请看原著

    The Value of Immutability

    swift 对于控制值改变有一些机制。在这章我们将解释这些机制工作的不同,区分值类型,引用类型,同时说为什么限制使用可变状态是一个好idea。

    Variables and References 

     在swift中,有两种方法来初始化一个变量,通过使用 var 或者let

    var x:Int = 1
    let y:Int = 2

     var :变量 (mutable)            let: 常量(immutable variables)

    Value Types vs. Reference Types 

    我们都知道结构体是值类型,而类是引用类型,这一行为上的细微区别就造就了架构上的不一样

    值类型的实例,不管是在赋值或是作为函数参数的时候,都是被复制的。Int,String,Array,Dictionary,tuple,emum ,struct都是值类型

    引用类型的实例(主要是类,Any changes to this reference will also mutate the original object or instance. )可以有多个所有者。将一个引用赋值给一个新的变量或者传递给一个函数的时候, 他们都指向同一个实例。这是你熟悉的对象行为。

    说白了,值类型就是完全拷贝,引用仅仅是传递了一个指针。

    值类型能够使你构建非常清晰,简单,更容易测试的典型架构。

    值类型与外部状态通常没有依赖或者只有很少的依赖,所以当你思考它们的时候,你只需要考虑很少的一部分。

    值类型是内在可组合的和可重用的,因为它们是可交换的。

    最后,一个值类型层允许你从应用程序稳定的业务逻辑中独立出活跃的行为元素。代码越稳定,你的系统会变得越容易测试和修改。

    Structs and Classes: Mutable or Not? 

    对于struct来说,如果申明为let,那么他的值是不可改变的。例如

    let immutablePoint = PointStruct(x:0, y: 0)

    immutablePoint = PointStruct(x:1, y: 1)  // 这个是产生err的

    immutablePoint.x = 3  // 这也是不允许的

    但如果你声明为var的话,immutablePoint.x = 3 ; 这完全是允许的

    如果PointStruct的x,和y申明为let,name

    immutablePoint.x = 3 // Rejected

    但是,你可以将其赋值给新的结构体实体

    immutablePoint = PointStruct(x:1, y: 1)  //这是允许的

  • 相关阅读:
    深入浅出:了解前后端分离优势、前后端接口联调以及优化问题
    深入浅出:了解JavaScript中的call,apply,bind的差别
    Vue2.0 搭建Vue脚手架(vue-cli)
    深入浅出:promise的各种用法
    深入浅出:了解常见的设计模式(闭包、垃圾回收机制)
    sql server xml 功能
    sqlite 用法
    PowerDesigner使用
    asp.net 开发注意的几点
    vue template
  • 原文地址:https://www.cnblogs.com/Ohero/p/4704347.html
Copyright © 2011-2022 走看看