チェーンプログラミング:通過.複数行のコードを1行に合成

3043 ワード

チェーンプログラミング思想:複数の操作(マルチラインコード)をポイント(.)に通すリンクは一緒に1つのコードになって、コードの可読性をよくします.a(1).b(2).c(3)
チェーンプログラミングの特徴:メソッドの戻り値はblockで、blockには戻り値(自分のオブジェクト)、blockパラメータ(操作が必要な値)が必要です.
代表:masonryフレームワーク.
例:masonryを真似て、加算計算機を書いて、チェーン式のプログラミング思想を練習します.
  • まずmasonry
  • についてお話しします
    UIView * redView =[[UIView alloc] init];
       UIView * redView =[[UIView alloc] init];
        redView.backgroundColor=[UIColor redColor];
        [self.view addSubview:redView];
        
        [redView mas_makeConstraints:^(MASConstraintMaker *make) {
            //                      
            //  make.top.left.bottom.right.equalTo    block   block()   
            make.top.left.bottom.right.equalTo(@10);
        }];
    
    
  • まずこのような形式の計算を書いてみましょうmake.top.left.bottom.right.equalTo(@10)
  • まず計算機のマネージャクラスを作成し、加算を例に方法を書きます.
  • 残りの方法は
  • と同じである.
     .h   
    @property (nonatomic, assign)  int result;
    - (CaculatorMaker *(^)(int num))add;
    
    
    .m    
    -( CaculatorMaker *(^)(int number))add{
      return ^(int number){
           self.result+= number;
           return self;
      };
    }
         :
      CaculatorMaker *maker = [[CaculatorMaker alloc] init];
      int result = [maker.add(10).add(20).add(30).add(40) result];
      
    
    

    Blockの戻り値とチェーン式のプログラミングの原理の説明
    add(10)の後も使用するためである.add(20)だからintに戻ることができなくて必ずCaculatorMakerタイプに戻ってこのようにやっとずっと点をつけることができます
    CaculatorMaker*(^)(int number)この戻り値は、戻り値CaculatorMakerパラメータである:intタイプ
    そしてちょうど返されるのは、この戻り値と返されるコードブロックに相当するblockの定義です~~
    したがって、外部呼び出しの場合addは、ブロックを呼び出すには直接block(渡すパラメータが必要)CaculatorMaker*(^)(int number)=^(int number){self.result+=number;return self;};
    **でも今でも問題があります**
  • 高集約なし計算する必要があるコードを1つの
  • に置かない.
  • 毎回クラスを作成して計算するので、分類者のすべてのクラスを作成して
  • を計算することができます.
       
    #import "NSObject+Caculator.h"
    #import "CaculatorMaker.h"
    @implementation NSObject (Caculator)
    
    //        int         �
    //        CaculatorMaker       block                  
    //                CaculatorMaker * make           block
    //callBack(make) make         make  make.add(10).add(20)
    +(int)makeCaculator: (void(^)(CaculatorMaker * make))callBack{
        CaculatorMaker * make =[[CaculatorMaker alloc] init];
        callBack(make);
        return make.result;
    }
    /**
     *           
     */
     /*
    [self loadData:^{
        //   
        NSLog(@"    ");
    }];
    
    //block       
    -(void)loadData:(void(^)())finished{
        //   
        NSLog(@"      ");
        //block  
        finished();
    }
    */
    @end
    
  • 外部の呼び出し
  •      
       // block:      
     int result =  [NSObject makeCaculator:^(CaculatorMaker *maker) {
            maker.add(10).add(30);
            maker.add(20).add(40);
            maker.multy(2).division(10);
            maker.jian(19);
        }];
        NSLog(@"%d",result);
    

    まとめ
  • 以前は開発中に比較的慣れていて、事を一つの方法にカプセル化して、
  • チェーンプログラミング思想:やるべきことをblockにカプセル化し、このBlockに戻る方法
  • を外部に提供する.
  • チェーンプログラミング思想方法の特徴:方法戻り値はblockでなければならない、blockパラメータ:操作が必要な内容を入れ、block戻り値:方法呼び出し者
  • 参考Demo:チェーンプログラミング--コードの可読性を高めるツールのフレームワーク:チェーンプログラミング-ツールクラスはFundationの最も基本的な機能と最も一般的な機能の書き方を抽出します.