swift之函数式编程(二)------- Thinking Functionally

本文的主要内容来自《Functional Programming in Swift》这本书,有点所谓的观后总结

在本书的Introduction章中:

we will try to focus on some of the qualities that we believe well-designed functional programs in Swift should exhibit:

1. Modulatity【模块化】

2. A Careful Treatment of Mutable State 【细心对待可变的状态】: 不变性和无副作用

3.Types【类型】

其实上面的3点在我上篇文章已经详细介绍了。

Thinking Functionally  ----- 函数式编程思想,这是本书的第二章

Functions in Swift are first-class values

下面我们根据书中的例子来阐述下本章的主要内容:

1. The first function we write, inRange1, checks that a point is in the grey。核查一个point是否在某个范围内,相对于(0,0)

判断目标点到原点的距离是不是<= range

typealias Position = CGPoint typealias Distance = CGFloat
func inRange1(target: Position, range: Distance) -> Bool {
    return sqrt(target.x * target.x + target.y * target.y) <= range
}

2. We now add an argument representing the location of the ship to our inRange function:

inRange方法中增加一个代表船的位置的参数:

判断两个点之间的距离是不是<= range

func inRange2(target: Position, ownPosition: Position, range: Distance) -> Bool {
    let dx = ownPosition.x - target.x
    let dy = ownPosition.y - target.y
    let targetDistance = sqrt(dx * dx + dy * dy)
    return targetDistance <= range
}

现在你意识到如果target 理你太近了你要躲避它。这个时候我们定义一个minimumDistance 来代表安全距离

let minimumDistance: Distance = 2.0 

func inRange3(target: Position, ownPosition: Position, range: Distance) -> Bool {
    let dx = ownPosition.x - target.x
    let dy = ownPosition.y - target.y
    let targetDistance = sqrt(dx * dx + dy * dy)
    return targetDistance <= range && targetDistance >= minimumDistance
}

最后,你也需要去逃离 其他的离你比较近的ships。

func inRange4(target: Position, ownPosition: Position, friendly: Position, range: Distance) -> Bool {
    let dx = ownPosition.x - target.x
    let dy = ownPosition.y - target.y
    let targetDistance = sqrt(dx * dx + dy * dy)
    let friendlyDx = friendly.x - target.x
    let friendlyDy = friendly.y - target.y
    let friendlyDistance = sqrt(friendlyDx * friendlyDx + friendlyDy * friendlyDy)
    return targetDistance <= range
              && targetDistance >= minimumDistance
              && (friendlyDistance >= minimumDistance)
}

  

 

  

时间: 2024-11-06 23:32:56

swift之函数式编程(二)------- Thinking Functionally的相关文章

[Swift]以函数式编程的方式使用字符串中的Ranges

原文:Swift: Using String Ranges The Functional Way 几周之前,我介绍了『Swift中如何使用Range截取字符串』.那时,Swift中使用Range为什么如此艰难让人疑惑不解,但是至少我们找到一种可以工作的使用方法. 然而,当我在过去几周学习了许多函数式编程的知识之后,忽然意识到,Swift中的Range之所以这么难用是为了引导我们以一种更加具象的方式使用它--具体来说就是类似于函数式编程的方式. 通过观看edX FP101x课程,我学到的第一条知识

swift 之函数式编程(一)

1. 什么是函数式编程? 函数式编程是阿隆佐思想的在现实世界中的实现, 它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及异变物件. 函数式编程的最重要基础是λ演算.而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值),函數式編程更加強調程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程.函数式编程的杀手锏正是当今世界上日益增长的并行性编程和元数据编程趋势.其主要思想就是把运算过程尽量写成一系列嵌套的函数调

swift之函数式编程(三)

文章来源于<Functional Programing in Swift>,本系列仅仅是观后概括的一些内容 Wrapping Core Image 上一篇文章我们介绍了 高阶函数并且展示了函数是如何作为参数传递给其他函数.在本章中,我们将展示如何使用高阶函数对已有的 面向对象的API 进行函数式包装. Core Image 是一个非常强大的图形处理的框架,但有些时候 它的API的使用有点笨重.CoreImage的API是松散类型—— image filters are configured u

swift之函数式编程(四)

文章内容来自<Functional Programing in Swift>,具体内容请到书中查阅 Map, Filter, Reduce Functions that take functions as arguments are sometimes called higher- order functions. higher-order function(高阶函数)就是说函数可以作为另一个函数的参数. 在本章,我们将介绍一下swift标准库中在数组方面的一些相关的高阶函数,先介绍一些比较普

001 java为什么需要函数式编程

一 .概述 集合是我们java程序员每天都需要的工具,没有了集合,java程序员几乎不能干任何的事情,我们每天的工作也是在对集合进行不同的操作. 尽管集合的功能已经足够强大,但是当我们面对复杂的业务问题的时候,利用原始的集合操作就会变得让人恶心. 于是在java8之中出现了lambda和stream的API,为我们以一种更加优雅的方式使用集合. 没错,就是集合,当我们现在使用NOSQL,各种日志分析,等等的大数据操作的时候,我们不可能使用原始的数据库的sql操作帮助我们完成如排序,求和,分组等操

Scala 中的函数式编程基础(二)

主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. 2. Higher Order Functions 把其他函数作为参数或者作为返回值,就是 higher order functions,python 里面也可以看到这样使用的情形.在酷壳上的博客有一个例子就是将函数作为返回值. 2.1 匿名函数 在 python 里边叫 lambda 函数,常常与 map(

Swift研究之编程高级教程(二)属性,存储属性详解

 属性 属性是依赖于某个特定的类.结构体或者枚举类型的值.Swift有两种属性:存储类型和计算类型.其中存储类型可以作为实例的一部分存放变量或者常量的值,而计算类型的属性值是通过运算的来的.计算类型的属性可以在类.结构体和枚举类型中出现,但存储类型只可能出现在类和结构体类型中. 属性一般依赖于一个特定类型的实例,但是也可以依赖于类本身.依赖于类型本身的属性称为类型属性. 可以定义属性观察者来监督属性值的改变,从而作出响应.对集合不明白的看集合类型-数组详解 存储属性 常量属性let的值在初始

Swift の 函数式编程

Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法糖和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. Swift 概览 对编程语言有了一些经验的程序员,尤其是那些对多种不同类型的编程语言都有经验的开发者, 在学习新的语言的时候更加得心应手.原因在于编程语言本身也是有各种范式的, 把握住这些特点就可以比较容易的上手了. 在入手一门新的语言的时候,一般关注的内容有: 原生数据结构 运算符 分支控制 如果是

[连载]Swift开发入门(06)--- 函数式编程

??面向对象编程和函数式编程是目前最主流的两种编程范式,而关于这两种范式孰优孰劣的讨论一直都没有停止过.事实上,真正理解两种编程范式的程序员不会武断的说这二者孰优孰劣,因为任何编程语言都没有什么灵丹妙药让其使用者成为优秀的程序员.其实,像Java这样很经典的面向对象的编程语言,也能够看到函数式编程的影子,如果你使用过访问者模式.命令模式,如果你使用过接口回调,你实际上已经使用了函数式编程的理念,而且在新版本的Java中,已经开始支持Lambda表达式和函数式接口,这些都是Java为了支持函数式编