Информация об изменениях

Сообщение Re[3]: про многословность от 04.02.2025 11:16

Изменено 04.02.2025 14:07 rg45

Re[3]: про многословность
Здравствуйте, ononim, Вы писали:

O>·>А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.

O>
O>std::strong_ordering Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O>    }
O>    return std::strong_ordering::equal;
O>}
O>


O>
O>std::cmp Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::less : std::greater;
O>    }
O>    return std::equal;
O>}
O>


O>ну вот то есть совсем нет никакой разницы в читабельности обоих вариантов?

O>У меня на прошлой работе как то контора купила старпатчик у которых в проекте были пятиэтажные нэймспейсы, такая себе либа-хрущевка. Вероятно те стартаперы со временем пробрались в С++ комитет.

Так заняты уже std::less, std::greater и std::equal. И имеют совсем другую семантику. Для компактности записи полно всяких средств: алиасы классов и пространств имен, а также using declarations (просто using std::strong_ordering). От того, что ты напишешь дополнительное объявление, твой код никак не проиграет, а только выиграет. Делая такие объявления, ты чётче очерчиваешь границы между "что" и "как".

Я уже молчу о том, что этот оператор вообще должен реализоваться в одну строчку при нормальном дизайне:

auto Foo::operator <=>(const Foo &other) const { return name <=> other.name; }
Re[3]: про многословность
Здравствуйте, ononim, Вы писали:

O>·>А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.

O>
O>std::strong_ordering Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O>    }
O>    return std::strong_ordering::equal;
O>}
O>


O>
O>std::cmp Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::less : std::greater;
O>    }
O>    return std::equal;
O>}
O>


O>ну вот то есть совсем нет никакой разницы в читабельности обоих вариантов?

O>У меня на прошлой работе как то контора купила старпатчик у которых в проекте были пятиэтажные нэймспейсы, такая себе либа-хрущевка. Вероятно те стартаперы со временем пробрались в С++ комитет.

Так заняты уже std::less, std::greater и std::equal. И имеют совсем другую семантику. Для компактности записи полно всяких средств: алиасы типов и пространств имен, а также using declarations (просто using std::strong_ordering). От того, что ты напишешь дополнительное объявление, твой код никак не проиграет, а только выиграет. Делая такие объявления, ты чётче очерчиваешь границы между "что" и "как".

Я уже молчу о том, что этот оператор вообще должен реализоваться в одну строчку при нормальном дизайне:

auto Foo::operator <=>(const Foo &other) const { return name <=> other.name; }