首页 > 解决方案 > 如何解决声纳问题“更新或重构此功能,使其实现不会重复第 xxx 行的那个”

问题描述

SonarQube 在某些特定行中将这 4 个函数标识为重复项:

  1. beneficiaires.forEach(beneficiaire => {
  2. () => {

这是我的功能:

affectPercentageToBeneficiares(beneficiaires: BeneficiaryData[], sum: number) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100.02 - sum) / numberOfBeneficiaresWithEmptyPrecentage;
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    })
}

affectPercentageToBeneficiaresInZeroCase(beneficiaires: BeneficiaryData[]) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100) / numberOfBeneficiaresWithEmptyPrecentage;
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    });
}

this.userProfilService.updateUser(this.UpdatedUser)
    .subscribe(
        () => {
            this.toastr.success('User has been updated successfully', null, {
                enableHtml: true,
            });
        },
        (err) => {
            this.toastr.error('erreur dans la modification utilisateur', null, {
                enableHtml: true,
            });
        }
    );

this.userProfilService.addUser(this.User)
    .subscribe(
        () => {
            this.toastr.success('User has been created', null, {
                enableHtml: true,
            });
        },
        (err) => {
            throw err;
        }
    );

有没有解决方案可以解决前两个函数的问题,而不必将它们合并为一个函数?

谢谢

标签: angulartypescriptsonarqube

解决方案


您不必合并函数,问题是您在两个地方(forEach回调)具有完全相同的函数。将受益人的更新放入它自己的函数或方法中,并从两个地方调用它:

// Outside the class
function updateBeneficiaires(beneficiaires, valueToAffecte) {
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    });
}

// In the class
affectPercentageToBeneficiares(beneficiaires: BeneficiaryData[], sum: number) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100.02 - sum) / numberOfBeneficiaresWithEmptyPrecentage;
    updateBeneficiaires(beneficiaires, valueToAffecte);
}

affectPercentageToBeneficiaresInZeroCase(beneficiaires: BeneficiaryData[]) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100) / numberOfBeneficiaresWithEmptyPrecentage;
    updateBeneficiaires(beneficiaires, valueToAffecte);
}

(或将其设为类方法,但它不使用任何类状态,因此可能是私有静态。)


推荐阅读