zoukankan      html  css  js  c++  java
  • iOS 函数式(链式)编程

    https://www.cnblogs.com/chzheng/p/5949376.html

    函数式编程概念

    • 函数式编程是种编程范式
    • 函数式编程 Functional Programming,简写 FP
    • 使用特点,将局部小的逻辑计算封装为一个个小的函数体,在实际应用中将这些小的函数体 自由组合
    • 可以接受函数当作输入(参数)和输出(返回值)
    • 函数式编程的基础是 block闭包
    • 函数式编程的代表作品:Masnory / SnapKit
    make.centerY.equalTo(self.view).offset(100);
    

    函数式编程体验

    基本方法调用

    • 定义 Person 类
    @interface Person : NSObject
    
    - (void)eat;
    - (void)run;
    
    @end
    
    @implementation Person
    
    - (void)eat {
        NSLog(@"吃");
    }
    
    - (void)run {
        NSLog(@"跑");
    }
    
    @end
    
    • 调用方法
    Person *p = [[Person alloc] init];
    [p run];
    [p eat];
    
    • 存在问题,每个方法要分别调用,不能组合调用

    改进一 —— 添加方法的返回值

    - (Person *)eat1 {
        NSLog(@"吃1");
        return self;
    }
    
    - (Person *)run1 {
        NSLog(@"跑1");
        return self;
    }
    
    • 方法调用
    [[person eat1] run1];
    
    • 改进点
      • 可以在一个方法的基础上继续调用后续的方法
      • 方法调用顺序更加灵活

    改进二 —— 将返回值修改为 block,以函数的形式调用

    - (Person * _Nonnull (^)())eat2 {
    
        Person * (^myEatBlock)() = ^ Person * () {
            NSLog(@"吃2");
    
            return self;
        };
    
        return myEatBlock;
    }
    
    - (Person * _Nonnull (^)())run2 {
    
        return ^ Person * {
            NSLog(@"跑2");
    
            return self;
        };
    }
    
    • 执行函数
    person.eat2().run2();
    person.run2().eat2();
    

    改进三 —— 增加函数参数

    - (Person * _Nonnull (^)(NSString * _Nonnull))eat3 {
        return ^ Person * (NSString * food) {
            NSLog(@"吃 %@", food);
    
            return self;
        };
    }
    
    - (Person * _Nonnull (^)(float))run3 {
        return ^ Person * (float distance) {
            NSLog(@"跑了 %f 米", distance);
    
            return self;
        };
    }
    
    • 执行函数
    p.run3(100).eat3(@"food");

    简单的实际运用可以参考 我的这篇文章
  • 相关阅读:
    你的服务器和网站为什么会被反复入侵
    MAC 查看当前安装的JDK位置
    Jmeter高并发测试
    解密AndroidManifest.xml、AXMLPrinter2.jar源码下载
    Win10家庭版如何启用本地组策略
    SQLFlow使用中的注意事项--设置篇
    Sqlflow 之隐私政策(Privacy plolicy)介绍
    血缘关系分析工具SQLFLOW--实践指南
    Oracle SQL 性能优化利器
    SQLFlow数据流分析工具的job功能介绍
  • 原文地址:https://www.cnblogs.com/itlover2013/p/15371495.html
Copyright © 2011-2022 走看看