iOS 函数式编程

作者: LYSNote | 来源:发表于2016-12-16 21:25 被阅读153次

    在介绍函数式编程之前,大家先了解下在平常工作中,我们那些地方使用了函数式编程,以及使用函数编程有哪些好处.

    对JavaScript进行封装了的jQuery就是函数式编程的经典之作

    $("p").css("background-color");
    

    iOS 中Masonry第三方约束也是使用了函数式编程的思想

    make.centerY.equalTo(self.view).offset(100);
    

    我们先分析一下,这样写,有什么好处

    • 把某一个设置进行模块化,每一个 "." 之后都代表着一个功能的添加(看上去,条理清晰)
    • 在添加和取出某一功能模块更加容易,只需要删除 "." 之后的那一功能即可

    是不是感觉好厉害!!!

    那么iOS 要想实现这样的编程方式,我们需要了解什么呢?

    • 其实每一个功能模块,都有一个返回值,而且实现函数式编程的重点就是这个返回值,自始至终,连接这些功能块就是这个返回值

    是不是有点明白?

    举个例子:

    @interface Person : NSObject
    - (void)eat;
    - (void)run;
    @end
    
    @implementation Person
    - (void)eat{
        NSLog(@"吃饭");
    }
    - (void)run{
        NSLog(@"跑步");
    }
    @end
    
    Person *person = [[Person alloc] init];
    [person eat];
    [person run];
    

    是不是很熟悉,要是不熟悉的话,请洗洗睡吧

    eat 和 run 算不算是两个功能点?,是不是都是这个人在做?

    上面说了, 函数式编程的主线就是那个返回值

    改:

    @interface Person : NSObject
    - (Person *)eat;
    - (Person *)run;
    @end
    
    @implementation Person
    - (Person *)eat{
        NSLog(@"吃饭");
        return self;
    }
    - (Person *)run{
        NSLog(@"跑步");
        return self;
    }
    @end
    
    Person *person = [[Person alloc] init];
    [[person eat] run];
    

    哎呀! 是不是有点感觉了

    继续改:

    @interface Person : NSObject
    - (Person *(^)())eat;
    - (Person *(^)())run;
    @end
    
    @implementation Person
    - (Person *(^)())eat{
        return  ^Person *(){
            NSLog(@"吃饭");
            return self;
        };
    }
    - (Person *(^)())run{
        Person *(^block)() = ^(){
            NSLog(@"跑步");
            return self;
        };
        return block;
    }
    @end
    
    Person *person = [[Person alloc] init];
    person.run().eat();
    

    哦,是不是很简单,这个时候每次返回的是一个block块

    相关文章

      网友评论

        本文标题:iOS 函数式编程

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