Redundante optionale Verkettung

Diese Warnkategorie wird von qmllint mit [redundant-optional-chaining] angegeben.

Redundante optionale Verkettung

Was ist passiert?

Einige Lookups verwenden optionale Verkettungen, obwohl sie nicht notwendig sind. Dies kann passieren, wenn Enum-Werte nachgeschlagen werden oder wenn ein Lookup auf einer Basis durchgeführt wird, die nicht null oder undefined sein kann.

Warum ist das schlecht?

Ein optionaler Lookup muss eine Laufzeitprüfung durchführen, die ein regulärer Lookup nicht durchführt. Diese zusätzlichen Anweisungen können nicht immer als redundant erkannt und von den Werkzeugen optimiert werden. Sie führen dann zu zusätzlichen Kosten für die Laufzeitleistung und blähen das Programm unnötig auf.

Außerdem kann die Warnung darauf hindeuten, dass die optionale Suche an der falschen Basis in der Kette durchgeführt wurde. Im nächsten Abschnitt finden Sie ein konkreteres Beispiel.

Beispiel

// Main.qml
import QtQml

QtObject {
    // Main will either be resolved and always work, or throw an exception or fail to compile
    enum E { A, B, C }
    property int i: Main?.A

    // A url cannot be null or undefined
    property url u: ""
    property string s: u?.toString()

    // Did you mean to make the second lookup optional?
    property int i: Safe?.Unsafe.i
}

Um diese Warnungen zu beheben, ersetzen Sie die überflüssigen optionalen Lookups durch nicht-optionale:

// Main.qml
import QtQml

QtObject {
    enum E { A, B, C }
    property int i: Main.A

    property url u: ""
    property string s: u.toString()

    property int i: Safe.Unsafe?.i
}

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.