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

不可及的if语句,如何避免

  •  1
  • Megidd  · 技术社区  · 6 年前

    ButtonStyle {
        padding.top: 0
        padding.bottom: 0
        padding.right: 0
        padding.left: 0
        background: Rectangle {
            implicitHeight: enableButton.height
            implicitWidth: enableButton.width
            color: {
                if ((buttonEnabled || hoverAlways) && enabled) {
                    if (propertyButton.hovered)
                        hoveredBgColor
                    else
                        defaultBgColor
                } else {
                    selectedBgColor
                }
                if (propertyButton.pressed)
                    selectedBgColor
            }
        }
    }
    

    我在Qt 5.11.2上收到以下警告:

    无法将[未定义]分配给QColor

    return 陈述如下:

    ButtonStyle {
        padding.top: 0
        padding.bottom: 0
        padding.right: 0
        padding.left: 0
        background: Rectangle {
            implicitHeight: enableButton.height
            implicitWidth: enableButton.width
            color: {
                if ((buttonEnabled || hoverAlways) && enabled) {
                    if (propertyButton.hovered)
                        return hoveredBgColor // return here
                    else
                        return defaultBgColor // return here
                } else {
                    return selectedBgColor // return here
                }
                if (propertyButton.pressed) // this condition is unreachable
                    return selectedBgColor // return here
            }
        }
    }
    

    添加以上内容后 返回 if (propertyButton.pressed) 语句变得无法访问。我想知道避免这种无法达到的条件的最佳做法是什么。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ian    6 年前

    由于使用return使控件离开代码块,因此最佳实践是确保首先处理所有特殊情况。

    在您的情况下,将最后一张支票移到该块的顶部,例如:

    ButtonStyle {
        padding.top: 0
        padding.bottom: 0
        padding.right: 0
        padding.left: 0
        background: Rectangle {
            implicitHeight: enableButton.height
            implicitWidth: enableButton.width
            color: {
                if (propertyButton.pressed) // moved up from below if-else block
                    return selectedBgColor  //
                if ((buttonEnabled || hoverAlways) && enabled) {
                    if (propertyButton.hovered)
                        return hoveredBgColor
                    else
                        return defaultBgColor
                } else {
                    return selectedBgColor
                }
            }
        }
    }