Есть ли лаконичная противоположность «пусто»?

Интерфейсы для строковых классов обычно имеют метод с именемIsEmpty (VCL) или жеempty (СТЛ). Это абсолютно разумно, потому что это особый случай, но код, который использует эти методы, часто должен отрицать этот предикат, что приводит к«оптический (и даже психологический)накладные расходы» (восклицательный знак не очень очевиден, особенно после открывающей скобки). Смотрите, например, этот (упрощенный) код:

/// 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;
}

Она имеетчетыре отрицанияпотому что пустые ящики пропускаются. Я часто наблюдаю такого рода отрицание, также при разработке интерфейсов, и этоне большая проблема но это раздражает. Я только хочу поддержать написание понятного и легкого для чтения кода. Надеюсь, вы поймете мою мысль.

Может быть, меня поразила только слепота: как бы вы решили вышеупомянутую проблему?

Редактировать: Прочитав некоторые комментарии, я думаю, что необходимо сказать, что исходный код использует классSystem::AnsiString VCL. Этот класс обеспечиваетIsEmpty метод, который очень читабелен:

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

если не отрицается:

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

...вместоесли текст не пустой, Я думаю буквальныйis Лучше оставить фантазию читателя, чтобы и отрицание работало хорошо. Хорошо, возможно не распространенная проблема ...

Ответы на вопрос(11)

Ваш ответ на вопрос