代码之家  ›  专栏  ›  技术社区  ›  Tom

冗余条件逻辑

  •  -1
  • Tom  · 技术社区  · 5 年前

    我有相同的条件块,在下面的确认方法中写了两次。我基本上需要以功能工作的方式将逻辑和冗余检查结合起来。

    public confirmation = (type: 'Reset' | 'Reject' | 'Approve') => {
         if (!this.showMessage
           && ((type === 'Approve' && this.permissions.ViewNotes)
             || (type !== 'Approve'))) {
           this.showMessage = true;
           return;
         }
    
         if (!this.message
           && ((type === 'Approve' && this.permissions.ViewNotes)
             || (type !== 'Approve'))) {
           this.messageService.add('Message is required.', 'warning');
           return;
         }
    
    
        if (type === 'Approve') {
          this.confirmationDialog.show(this.approvalMessage, type, () => this.confirm(type));
        } else if (type === 'Reset') {
          this.confirmationDialog.show(this.resetMessage, type, () => this.confirm(type));
        } else if (type === 'Reject') {
          this.confirmationDialog.show(this.rejectMessage, type, () => this.confirm(type));
        }
    
      }
    

    唯一的区别是第一个是检查showMessage变量,第二个是检查message变量。默认情况下,它们都是false。showMessage变量的主要用途是控制可见性 用户界面中文本框的。第二个变量comment用于检查用户是否在文本框中输入了任何内容。这是为了确保文本框是强制性的。用户第一次单击按钮时,文本框 自showMessage设置为true后,将变为可见。正如您还可以看到的,代码由于return语句而退出。当用户第二次单击按钮时,第一个块将被跳过,并在第二个块中 它在运行return方法时检查是否输入了注释,代码是否退出。第二个条件是,如果用户没有输入任何文本,则阻止点击。

    我试图将这两个块的逻辑结合起来,但实际情况是,它会在第一次点击时检查第二个条件。有什么可能的解决办法?

    尝试解决方案

      if (!this.showMessage
            ||!this.message
            && ((type === 'Approve' && this.permissions.ViewNotes)
            || (type !== 'Approve'))) {
            this.showMessage = true;
    
    
          if (!this.message) {
            this.messageService.add('Message is required.', 'warning');  
          }  
          return;
        }
    
    
    
        if (type === 'Approve') {
          this.confirmationDialog.show(this.approvalMessage, type, () => this.confirm(type));
        } else if (type === 'Reset') {
          this.confirmationDialog.show(this.resetMessage, type, () => this.confirm(type));
        } else if (type === 'Reject') {
          this.confirmationDialog.show(this.rejectMessage, type, () => this.confirm(type));
        }
    
      }
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Salim    5 年前

    我来试试

    (type) => {
        let A = type === 'Approve';
        let B = this.permissions.ViewNotes;
    
        if ((!A || B)) {
            if (!this.showMessage) {
                //TODO
                return;
            }
            if (!this.message) {
                //TODO
                return;
            }
        }
    
        switch (type) {
            case 'Approve':
                // Todo
                break;
            case 'Reset':
                // Todo
                break;
            case 'Reject':
                // Todo
                break;
        }
    }