美文网首页
Swift-函数式编程

Swift-函数式编程

作者: Sweet丶 | 来源:发表于2023-03-16 08:59 被阅读0次

函数式编程是一种编程范式,一个方法论。
其主要思想: 把计算过程尽量分解成一系列可复用函数的调用。
主要特征: 函数是“第一等公民”,也就是函数与其他数据类型一样,可以赋值给其他变量,作为函数参数或者返回值。

1. 柯里化(currying)

高阶函数:接收一个或多个函数作为输入;或者返回一个函数。
柯里化:将一个接收多个参数的函数变换为一系列只接收单个参数的函数的过程。
柯里化例子:将传3个参数的函数变为连续传参的函数

func add_tobeCurrying(v1: Int, v2: Int, v3: Int) -> Int { v1 + v2 + v3 }

// 将带三个参数的函数进行柯里化
prefix func ~<A, B, C, D>(_ fn: @escaping (A, B, C) -> D) -> (C) -> (B) -> (A) -> D {
    {c in { b in { a in fn(a, b, c) } } }
}

func testCurrying() {
    print((~add_tobeCurrying)(10)(20)(30))
}
2. 函子(Factor)

像Array、Optional这样支持map运算的类型,称为函子。

3. 适用函子(Applicative Functor)

对于任意一个函子F,如果能支持以下运算,那么该函子就是适用函子。

func pure<T>(_ value: T) -> F<T>
func <*><A, B>(fn: F<(A) -> B>, value: F<A>) ->F<B>

Array、Optional是适用函子:

// T是一个函子类型
func pure<T>(_ value: T) -> T? {
    return T
}
infix operator <*> : AdditionPrecedence
func <*><A, B>(fn: ((A) -> B)?, value: A?) -> B? {
    guard let f = fn, let v = value else{
        return nil
    }
    return f(v)
}

var number: Int? = 10
var fn: ((Int) -> Int)? = { $0 * 5 }
pure(number)// 这里是Optional(10)
fn <*> number// 这里在<*>中缀运算符计算后,得到的结果是Optional(50)
4. 单子(Monad)

对于任意一个类型F,如果支持以下操作就被称为单子。

func pure<T>(_ value: T) -> F<T>
func flatMap<A, B>(_ value: F<A>, _ fn: (A) -> F<B>) -> F<B>

可选类型、数组显然符合这两个条件。

数组、Optional也是符合的,可见Swift语言为函数式编程是做了支持的,而在OC中,函数式编程集成了ReactiveObjc库之后才有这些高阶函数,才算是支持。

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:Swift-函数式编程

      本文链接:https://www.haomeiwen.com/subject/yovrrdtx.html