swift之函数式编程(五)
文章内容来源于《Functional Programing in Swift》,详情请看原著
The Value of Immutability
swift 对于控制值改变有一些机制。在这章我们将解释这些机制工作的不同,区分值类型,引用类型,同时说为什么限制使用可变状态是一个好idea。
Variables and References
在swift中,有两种方法来初始化一个变量,通过使用 var 或者let
var x:Int =
let y:Int =
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) //这是允许的
swift之函数式编程(五)的更多相关文章
- swift 之函数式编程(一)
1. 什么是函数式编程? 函数式编程是阿隆佐思想的在现实世界中的实现, 它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及异变物件. 函数式编程的最重要基础是λ演算.而且λ演算的函數可以接受函 ...
- swift之函数式编程
函数式编程初探 最近初学swift,和OC比,发现语言更现代,也有了更多的特性.如何写好swift代码,也许,熟练使用新特性写出更优秀的代码,就是答案.今天先从大的方向谈谈swift中的编程范式-函数 ...
- swift之函数式编程(四)
文章内容来自<Functional Programing in Swift>,具体内容请到书中查阅 Map, Filter, Reduce Functions that take func ...
- swift之函数式编程(二)
本文的主要内容来自<Functional Programming in Swift>这本书,有点所谓的观后总结 在本书的Introduction章中: we will try to foc ...
- 最通俗易懂的方式让你理解 Swift 的函数式编程
函数式编程(Functional Programming)是相对于我们常用的面向对象和面向过程编程的另外一种开发思维方式,它更加强调以函数为中心.善用函数式编程思路,可以对我们的开发工作有很大的帮助和 ...
- swift之函数式编程(三)
文章来源于<Functional Programing in Swift>,本系列仅仅是观后概括的一些内容 Wrapping Core Image 上一篇文章我们介绍了 高阶函数并且展示了 ...
- Swift の 函数式编程
Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法糖和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. S ...
- swift语言的特征:类型系统与函数式编程:swift是面向类型和面向函数编程的语言
swift语言的特征: 类型系统:值类型与引用类型.泛型.协议类型 函数式编程:
- 函数式编程-将Monad(单子)融入Swift
前言 近期又开始折腾起Haskell,掉进这个深坑恐怕很难再爬上来了.在不断深入了解Haskell的各种概念以及使用它们去解决实际问题的时候,我会试想着将这些概念移植到Swift中.函数式编程范式的很 ...
随机推荐
- OSGi-开发环境的建立和HelloWorld(04)
1 OSGi开发环境的建立 1.1 Equinox是什么 从代码角度来看,Equinox其实就是OSGi核心标准的完整实现,并且还在这个基础上增加了一些额外的功能(比如为框架增加了命令行和程序执行的入 ...
- Sping IOC
这2天学习了Spring的AOP 其中包括注解式和非注解式的配置 个人感觉注解式的配置非常好用.具体内容如下: 1. AOP 面向切面编程 个人理解就是在一个写好的方法上增加一些新的功能 ...
- 绘制QQ圆形图像
思路:这里用到的是图像求交.现在画布上画上圆形,即所需要的圆形头像,然后设置paint的属性设置为求交集,再将bitmap划到canvas上面就好了. 代码如下: private static Bit ...
- 从输入 URL 到页面加载完成的过程中都发生了什么
从输入 URL 到页面加载完成的过程中都发生了什么 过程描述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务器建立 socket 连接: 浏览器与服务器通信: 浏览器请求,服务器处理 ...
- 【DDD】领域驱动设计实践 —— UI层实现
前面几篇blog主要介绍了DDD落地架构及业务建模战术,后续几篇blog会在此基础上,讲解具体的架构实现,通过完整代码demo的形式,更好地将DDD的落地方案呈现出来.本文是架构实现讲解的第一篇,主要 ...
- Opengl4.5 中文手册—F
索引 A B C D E F G H I J K L M N O P Q ...
- MySQL高级查询(二)
EXISTS 和NOT EXISTS子查询 EXISTS子查询 语法: SELECT ……… FROM 表名 WHERE EXISTS (子查询); 例: SELECT `studentNo` A ...
- Redis——windows环境安装redis和redis sentinel部署
一:Redis的下载和安装 1:下载Redis Redis的官方网站Download页面,Redis提示说:Redis的正式版不支持Windows,要Windows学习Redis,请点击Learn m ...
- Java客户端调用.NET的WebService
项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来. 1,新建.NET WebService.只在原方法上加上一个string类型的参数str [WebMe ...
- 修改host可以上的一些网站
打开路径 C:\Windows\System32\drivers\etc 博客园 223.6.248.220 www.cnblogs.com github 192.30.253.112 github. ...