チェーンプログラミングの思想理解

2030 ワード

まず、現在知られているプログラミング思想を簡単に紹介します.
  • 1、プロセス向け:処理はプロセスを核心とし、一歩一歩の実現である.
  • 2、対象:万物すべて対象.
  • 3、チェーンプログラミング思想:複数の操作(複数行コード)をドット(.)でリンクして1つのコードにし、コードの可読性を良くする.例えば、a(1).b(2).c(3). チェーンプログラミングの特徴:メソッドの戻り値はblockで、blockには戻り値(戻りオブジェクト自体)、blockパラメータ(操作が必要な値)が必要です.代表:Masonryフレームワーク.
  • 4、応答式プログラミング思想:呼び出し順序を考慮する必要はなく、結果を考慮するだけで、蝶効果に似ていて、1つの事件を生み出して、多くのものに影響を与えて、これらの事件は流れのように伝播して、それから結果に影響して、対象に向かう一言を借りて、万物はすべて流れです.代表:KVO運用.
  • 5、関数式プログラミング思想:操作をできるだけ一連のネストされた関数または方法呼び出しに書く.関数プログラミングの特徴:各メソッドには、戻り値(オブジェクト自体を返す)、関数またはBlockをパラメータ、blockパラメータ(操作が必要な値)、block戻り値(操作結果)が必要です.代表:ReactiveCocoa.
  • ここではチェーンプログラミングの思想コードで計算機を実現します.
    #import
    @class CaculatorMaker;
    @interface NSObject (CaculatorMaker)
    //  
    + (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker;
    @end
    
    #import "NSObject+CaculatorMaker.h"
    #import "CaculatorMaker.h"
    @implementation NSObject (CaculatorMaker)
    //  
    + (int)makeCaculators:(void(^)(CaculatorMaker *make))block
    {
        CaculatorMaker *mgr = [[CaculatorMaker alloc] init];
        block(mgr);
        return mgr.iResult;
    }
    @end
    
    #import
    @interface CaculatorMaker : NSObject
    @property (nonatomic, assign) int iResult;
    //  
    - (CaculatorMaker *(^)(int))add;
    //  
    - (CaculatorMaker *(^)(int))sub;
    //  
    - (CaculatorMaker *(^)(int))muilt;
    //  
    - (CaculatorMaker *(^)(int))divide;
    @end
    
    #import "CaculatorMaker.h"
    @implementation CaculatorMaker
    - (CaculatorMaker *(^)(int))add
    {
       return ^(int value)
        {
            _iResult += value;
            return self;
        };
    }
    @end
    

    呼び出し:
    int iResult = [NSObject makeCaculators:^(CaculatorMaker *make) {
         make.add(1).add(2).add(3).divide(2);
       }];
    

    このメソッドの実行手順を分析します.最初のステップ:NSObjectはブロックを作成しました.このブロックにはCaculatorMakerオブジェクトmakeが作成され、2番目のステップに戻ります.このオブジェクトmake呼び出しメソッドaddのとき、中にある属性iResultが加算され、自分に戻り、次にメソッドを呼び出すことができます.これがチェーンプログラミング思想の小さなが明らかな例である.Demo
    Clangのテクニカルブログ:https://chenhu1001.github.io