【问题标题】:SonarQube displaying to 'remove this useless assignment to local variable'SonarQube 显示“删除对局部变量的无用赋值”
【发布时间】:2020-04-12 17:51:35
【问题描述】:

SonarQube 为什么会出现此错误?我应该如何解决它?他们的规则页面没有指定解决方案,

删除这个对局部变量“validateAddressRequest”的无用赋值。

  validateAddress() {
    if (this.propertySitusMailingForm.valid) {
      let validateAddressRequest: ValidateAddressRequest = new ValidateAddressRequest();
      let propertySitusData = new PropertySitusAddress(this.propertySitusMailingForm.value);
      validateAddressRequest = convertToValidateRequest(propertySitusData);
      this.validationService.validateCall(validateAddressRequest);
    }
  }

【问题讨论】:

    标签: javascript angular typescript sonarqube angular8


    【解决方案1】:

    This site says表示错误发生时间:

    一个值被分配给一个变量或属性,但是该位置以后永远不会被读取,或者它的值总是在被读取之前被覆盖。这意味着原来的赋值无效,并且可能表示逻辑错误或代码不完整。

    if 块的第一行,您分配给validateAddressRequest,但随后在if 块的第三行,您覆盖validateAddressRequest,而没有读取先前分配的变量。所以第一行没用。

    仅在调用convertToValidateRequest 时声明validateAddressRequest

    const validateAddressRequest = convertToValidateRequest(propertySitusData);
    

    请注意,您几乎肯定不需要类型注释 - 如果 Typescript 知道 convertToValidateRequest 已经返回 ValidateAddressRequest,则无需使用新变量再次这样做。如果您认为其他情况不清楚,或者您没有 Intellisense 类型,您可以这样做,但它可能只是噪音。

    如果您使用let 声明变量以便在将来启用对它的分配,请记住,最好尽可能避免重新分配,并且几乎总是可以避免重新分配。如果您需要另一个包含ValidateAddressRequest 的变量,请给它一个不同的变量名称,以便您可以使用const 来声明这两个变量;这使代码一目了然,读者可以确定不会重新分配特定的变量引用。

    【讨论】:

    • 是的,但您几乎可以肯定不需要类型注释 - 如果 Typescript 知道 convertToValidateRequest 已经返回 ValidateAddressRequest,则无需使用新变量再次这样做。跨度>
    • 最好尽可能避免重新分配,而且几乎总是可以避免重新分配。如果您需要另一个包含ValidateAddressRequest 的变量,请给它一个不同的变量名称,以便您可以使用const 来声明这两个变量;这使代码一目了然,读者可以确定不会重新分配特定的变量引用。
    • 好的,谢谢,我将避免重新分配,但是将声明类型为 this,只是为了确定,不确定我的队友如何影响代码,希望 sonarqube 不会给我声明类型的警告(无论是否无意义) const validateAddressRequest: ValidateAddressRequest = convertToValidateRequest(propertySitusData);
    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2011-05-05
    • 2013-08-02
    • 2011-11-06
    • 2018-01-12
    相关资源
    最近更新 更多