2016-03-28 19 views
0

This function's cyclomatic complexity is too high iletileri düzeltmek ve yalnızca bir switch deyim içeren basit bir işlev üzerinde yanılmak istiyorum. Fonksiyonun siklizik karmaşıklığı (5) (W074) olarak hesaplanmıştır.Bir JavaScript işlevinin döngüsel karmaşıklığı anlama

Configuration.prototype.loadAndParseDataFromStorageFilename = function(cmd) { 
    var jsonData; 

    var ext = path.extname(cmd.argumentDatasource.filename).toLowerCase(); 
    var rawData = fs.readFileSync(cmd.argumentDatasource.filename).toString().replace(/\n/g, "").replace(/\r/g, ""); 
    switch(ext) { 
     case ".config": 
      jsonData = xml.parseString(rawData); 
      break; 
     case ".xml": 
      jsonData = xml.parseString(rawData); 
      break; 
     case ".json": 
      jsonData = JSON.parse(cmd.argumentDatasource.filename); 
      break; 
     case ".js": 
      jsonData = require(cmd.argumentDatasource.filename); 
      break; 
     default: 
      var msg = colors.bgRed.white(cmd.argumentDatasource.filename + " not supported as data storage"); 
      console.log(msg); 
    } 
    return jsonData; 
}; 

Bu basit durumda 5'e siklomatik karmaşıklık nasıl hesaplanır? Şimdiye kadar bir anahtar için karmaşıklığı azaltma fikri yoksa. Anlayışım için karmaşıklığı maks. 3 veya 4 :). Bir yöntemi kodlamak için en iyi uygulama, yalnızca bir switch bildirimini içerir? codacy.com işlevi alabilir 5 yolları vardır maxcomplexity 4 veya 3.

+0

Karmaşıklık hesaplaması ne yapıyor? – Pointy

+3

Tek bir dönüşünüz olsa bile, geçiş boyunca 5 yol vardır. Bir harita/arama tablosu kullanabilirsiniz, ancak muhtemelen CC eşiğini 6 veya 8 olarak ayarlayabilir veya bu özel işlev için bu uyarıyı devre dışı bırakabilirim. – ssube

+0

jshint –

cevap

1

ayarlar ve bu nedenle

0

5 Sadece benim kod yeniden yazdım bir cyclomatic karmaşıklığını var gibi görünüyor. Görebildiğim kadarıyla en iyi uygulamada kodlamak için switch komutlarından kaçınmalıyız?

Configuration.prototype.loadAndParseDataFromStorageFilename = function(cmd) { 
    var jsonData; 

    var ext = path.extname(cmd.argumentDatasource.filename).toLowerCase().replace(/\./g,""); 
    var parserFunction = { 
     config : xml.parseString, 
     xml : xml.parseString, 
     json : JSON.parse, 
     js : require 
    }; 

    if (parserFunction[ext]){ 
     var rawData = fs.readFileSync(cmd.argumentDatasource.filename).toString().replace(/\n/g, "").replace(/\r/g, ""); 
     jsonData = parserFunction[ext](rawData); 
    } else { 
     var msg = colors.bgRed.white(cmd.argumentDatasource.filename + " not supported as data storage"); 
     console.log(msg); 
    } 

    return jsonData; 
}; 
İlgili konular