Gibt es ein genaues Gegenteil von "ist leer"?

Schnittstellen zu Zeichenfolgenklassen haben normalerweise eine benannte MethodeIsEmpty (VCL) oderempty (STL). Das ist absolut vernünftig, da es sich um einen Sonderfall handelt, aber der Code, der diese Methoden verwendet, muss dieses Prädikat häufig negieren, was zu a führt"optisch (und sogar psychologisch)Overhead " (Das Ausrufezeichen ist nicht sehr offensichtlich, insbesondere nach einer öffnenden Klammer). Siehe zum Beispiel diesen (vereinfachten) Code:

/// format an optional time specification for output
std::string fmtTime(const std::string& start, const std::string& end)
{
    std::string time;
    if (!start.empty() || !end.empty()) {
        if (!start.empty() && !end.empty()) {
            time = "from "+start+" to "+end;
        } else {
            if (end.empty()) {
                time = "since "+start;
            } else {
                time = "until "+end;
            }
        }
    }
    return time;
}

Es hatvier Verneinungen, weil die leeren Fälle diejenigen sind, die übersprungen werden sollen. Ich beobachte oft diese Art von Negation, auch beim Entwerfen von Schnittstellen, und das ist eskein großes problem aber es ist ärgerlich. Ich möchte nur das Schreiben von verständlichem und einfach zu lesendem Code unterstützen. Ich hoffe du wirst meinen Punkt verstehen.

Vielleicht bin ich nur von Blindheit betroffen: Wie würden Sie das obige Problem lösen?

Bearbeiten: Nachdem ich einige Kommentare gelesen habe, denke ich, ist es notwendig zu sagen, dass der ursprüngliche Code die Klasse verwendetSystem::AnsiString der VCL. Diese Klasse bietet eineIsEmpty Methode, die sehr gut lesbar ist:

 if (text.IsEmpty()) { /* ... */ } // read: if text is empty ...

wenn nicht negiert:

 if (!text.IsEmpty()) { /* ... */} // read: if not text is empty ... 

...Anstatt vonWenn der Text nicht leer ist. Ich denke das wörtlicheis Es war besser, der Fantasie des Lesers zu überlassen, auch die Verneinung gut funktionieren zu lassen. Ok, vielleicht kein weit verbreitetes Problem ...

Antworten auf die Frage(11)

Ihre Antwort auf die Frage