Как исправить проблему сонара «Обновите или реорганизуйте эту функцию, чтобы ее реализация не дублировала ту, что находится в строке xxx»

#angular #typescript #sonarqube

#угловатый #машинопись #сонаркобе

Вопрос:

SonarQube идентифицирует эти 4 функции как дубликаты в некоторых определенных строках:

  1. бенефициары.forEach(бенефициар => {
  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;
        }
    );
 

есть ли решение для устранения проблемы для первых двух функций без необходимости объединять их в одну?

Спасибо

Ответ №1:

Вам не нужно объединять функции, проблема в том, что у вас есть точно такая же функция в двух местах ( 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);
}
 

(Или сделайте это методом класса, но он не использует какое-либо состояние класса, поэтому, возможно, частный статический.)