1. C++ / Говнокод #17600

    +60

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    const QStringList numbers = QString::fromUtf8("Ноль|" \
                                                                                         "Один|" \
                                                                                         "Два|" \
                                                                                         "Три|" \
                                                                                         "Четыре|" \
                                                                                         "Пять|" \
                                                                                         "Шесть|" \
                                                                                         "Семь|" \
                                                                                         "Восемь|" \
                                                                                         "Девять" \
                                                                                        ).split('|');

    Запостил: absolut, 08 Февраля 2015

    Комментарии (24) RSS

    • ълядь, выравнивание съехало.
      Ответить
    • :Tabularize /\
      Ответить
    • Если не считать переносов бэкслешем, то норм. Иначе пришлось бы писать
      const QStringList numbers = QStringList()
      	<< QString::fromUtf8("Один")
      	<< QString::fromUtf8("Два")
      	<< QString::fromUtf8("Три")
      и так далее.
      Ответить
      • А может стоит закопать ветку 4.x и вообще не писать этот QString::fromUtf8()? В 5.x конструктор делает как раз QString::fromUtf8() а не QString::fromAscii().
        Ответить
        • 5 ломает либы.
          Ответить
        • Ну, можно. Кроме тех проектов и систем, где кроме четверки нет ничего.
          Можно еще в четверке поставить кодек ютф-8 для систрингов и не париться.
          Ответить
          • > поставить кодек ютф-8 для систрингов и не париться
            А я всегда так и делал. И удивился, когда на пятёрке проект начал ломаться от этой строки.
            Ответить
    • Улучшаем
      const QStringList numbers = QString::fromUtf8("Ноль\\" \
                                                    "Один\\" \
                                                    "Два\\" \
                                                    "Три\\" \
                                                    "Четыре\\" \
                                                    "Пять\\" \
                                                    "Шесть\\" \
                                                    "Семь\\" \
                                                    "Восемь\\" \
                                                    "Девять" \
                                                    ).split('\');
      Ответить
      • "НольОдинДваТриЧетыреПятьШестьСемьВосемь Девять"
        и разбить регекспом по согласным буквам. В Qt же есть регекспы? И они работают для utf8?
        Ответить
        • Это же будет ещё длиннее и непонятнее.
          Ответить
          • Ну, на руби будет http://ideone.com/g2VD6F
            "НольОдинДваТриЧетыреПятьШестьСемьВо семь Девять".split /(?=[А-Я])/
            Если в qT нет split по регекспу, то длиннее, а если есть - короче.
            Ответить
      • Можно было только убрать завершающие "\" (это же C++), а разделители ("|") оставить.
        Ответить
      • QString operator "" _fu8(const char *str, size_t size) {
        Q_UNUSED(size);
        return QString::fromUtf8(str);
        }

        const QStringList numbers = {
        "Ноль"_fu8,
        "Один"_fu8,
        "Два"_fu8,
        "Три"_fu8,
        "Четыре"_fu8,
        "Пять"_fu8,
        "Шесть"_fu8,
        "Семь"_fu8,
        "Восемь"_fu8,
        "Девять"_fu8};

        Улучшать, так по иксзибитовски, на полную катушку. А вообще, можно сделать чтобы QString автоматом из utf8 читал, и не париться с пользовательским литералом
        Ответить
        • > "Ноль"_fu8,
          Так правильней:
          u8"Ноль"_fu8
          Ответить
        • А тут operator "" _fu8 constexpr нельзя сделать?
          Ответить
          • Можно, но только если у возвращаемого типа будет constexpr конструктор. А у QString и std::string его, емнип, нет. Да и деструктор нетривиален.
            Ответить
    • Почему \ в конце слова?
      Ответить

    Добавить комментарий