2016-12-28 11 views
2

を破る:あなたが最後のパラメータを見ることができるよう私は機能次ている参照透明

_processSelectedPlantWcOb: function (oSelectOb, oSetNewDates, oWpServiceOb, fnQueryDatesPlantWcOb) { 
    let self = this; 

    return oSelectOb 
    .map(function (oEvent) { 
     return oEvent.getSource(); 
    }) 
    .switchMap(function (oSelect) { 
     return oSetNewDates.mapTo(oSelect); 
    }) 
    .map(function (oSelect) { 
     let oItem = oSelect.getSelectedItem(); 
     let aKeys = oItem.getKey().split("/"); 
     return {sPlant: aKeys[0], sWc: aKeys[1]}; 
    }) 
    .switchMap(function (oSelected) { 
     return fnQueryDatesPlantWcOb(oWpServiceOb, oSelected.sPlant, oSelected.sWc); 
    }); 
}, 

して機能を期待され、機能fnQueryDatesPlantWcObの実装は以下のようになります。

_processQueryDatesPlantWcOb: function (oWpServiceOb, sPlant, sWc) { 

    return oWpServiceOb 
    .switchMap(function (oModel) { 
     let oPlantFilter = new sap.ui.model.Filter("Plant", sap.ui.model.FilterOperator.EQ, sPlant); 
     let oWcFilter = new sap.ui.model.Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, sWc); 

     return Rx.Observable.create(function (subscriber) { 
     oModel.read("/CostCenterCalendarSet", { 
      success: function (oData, oResponse) { 
      subscriber.next(oResponse); 
      }, 
      error: function (oError) { 
      subscriber.error(oError); 
      }, 
      filters: [oPlantFilter, oWcFilter] 
     }); 
     }); 
    }) 
    .filter(function (oData) { 
     return oData.data.results.length > 0 
    }) 
    .mergeMap(function (oData) { 
     return Rx.Observable.from(oData.data.results); 
    }) 
    .map(function (oData) { 
     let oDate = oData.InspectionDate; 
     return new Date(oDate.getFullYear(), oDate.getMonth(), oDate.getDate()); 
    }) 
    .filter(function (oDate) { 
     let oToday = new Date(); 
     return oDate.getTime() > oToday.getTime(); 
    }) 
    .map(function (oDate) { 
     return oDate.getTime(); 
    }); 
}, 

することができますようにパラメータsPlantおよびsWcは、switchMap関数で使用されます。

私が知りたいことは、機能的パラダイムを破ることですか? 私はそれを打破しないと思うのですが、同じsPlantsWcの値を渡すたびに同じ結果が得られますが、わかりません。

答えて

0

私はJSでプログラムをしませんが、「機能的なパラダイムは」実際に(pure) functionsに関するのプロパティ定義:

  • を同じ引数指定した場合、それは常に同じ結果を返します。これはという参照用透明度と呼ばれ、5ドルのプログラミング用語のリストに追加できます。
  • これは副作用を引き起こすことはできません。つまり、関数は、外部からアクセス可能な可変オブジェクトを変更したり、ファイルに書き込んだりするなど、関数自体の外で観察可能な変更を行うことはできません。 oModel.read("/CostCenterCalendarSet", ...)以来

は、I/O、それは純粋な関数は(読んはあまりにも、副作用である理由はthis questionをチェックアウト)ではありませんやっているようです。

さらに、日付/時刻を使用している関数が、特にパラメータリストに含まれていない場合に、すべての場合に透過的に透明になる場合は、controversial topicです。

関連する問題