1. Java / Говнокод #9997

    +73

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    return suffix == ' ' ? ssize : (
                    si ? ssize + suffix : (
                        suffix == ' ' ? ssize + suffix : (
                            ssize + suffix + "iB"
                        )
                    )
            );

    Ведь всего-то навсего
    if (suffix == ' ') return ssize;
    if (si) return ssize + suffix;
    return ssize + suffix + "iB";

    Запостил: Doctoror, 20 Апреля 2012

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

    • Что за iB?
      Ответить
      • Suffix может быть K, M, G.
        Если по стандартам СИ:
        К - Килобайт = 1000 байт
        M - Мегабайт = 1000000 байт
        G - Гигабайт = 1000000000 байт

        По стандартам МЭК
        KiB - Кибибайт = 1024 байт
        MiB - Мебибайт = 1048576 байт
        GiB - Гибибайт = 1073741824 байт

        boolean si - определяет, выводить ли инфу и считать с приставками СИ, или МЭК
        http://ru.wikipedia.org/wiki/Двоичные_приставки
        Ответить
        • В первом случае "B" тоже должно быть. И результат наверное лучше с помощью stringbuilder генерить.
          Ответить
          • 1) Юниксовские command-line утилиты не добавляют приставку B к байтам когда возвращают размер файла (я делаю по подобию).
            2) StringBuilder тут не поможет сильно. ибо для возвращения результата создается максимум один новый обьект.
            P.S. тоесть StringBuffer, ибо это Java ME.
            Ответить
            • Вы уж определитесь, на что опираетесь: на утилиты или на СИ/МЭК. На счет stringbuilder имелась в виду, в первую очередь, наглядность кода.
              Ответить
        • Если честно, все эти кибы выглядят такими искусственными. А ещё биты от байтов отличать надо. Мрак.
          Не могу понять одного, зачем тебе жужжатьнужны десятичные приставки, если ты не пчелапроизводитель памяти. По-моему, так.
          Ответить
          • Вы че? Никогда не видели ls, например?

            Считаем с десятичными приставками
            $ ls -l --si
            total 95k
            -rw-r--r-- 1 doctor users 1.4k Apr 21 15:26 DaCanvas.class
            -rw-r--r-- 1 doctor users 79k Jun 17 2010 DroidSansMono.ttf
            -rw-r--r-- 1 doctor users 2 Apr 21 16:13 file.txt
            -rw-r--r-- 1 doctor users 1.1k Apr 21 15:26 Main.java

            Считаем с привычными приставками

            $ ls -lh
            total 92K
            -rw-r--r-- 1 doctor users 1.4K Apr 21 15:26 DaCanvas.class
            -rw-r--r-- 1 doctor users 77K Jun 17 2010 DroidSansMono.ttf
            -rw-r--r-- 1 doctor users 2 Apr 21 16:13 file.txt
            -rw-r--r-- 1 doctor users 1007 Apr 21 15:26 Main.java

            Как видите, нормальные приложения позволяют делать и так и сяк, и B к байтам не добавляют (file.txt - 2 bytes).

            Только я заменил, например для кило K на KiB, и k на K, что будет правильтно по стандартам МЭК.
            Ответить
            • Повторюсь. Десятичные приставки не нужны. Я кончил и закурил.
              Ответить
              • [img]http://assets1.wordansassets.com/wordansfiles/images/2012/4/3/135451/135451_340.jpg[/img]
                Ответить
              • мне, пожалуйста, хард на 1 000 000 000 000 байт
                и где это приставки не нужны?
                Ответить
                • > мне, пожалуйста, хард на 1 000 000 000 000 байт
                  мне, пожалуйста, хард на 10^12 байт
                  мне, пожалуйста, хард на 12 порядков байт
                  Ответить
                • Я подразумевал приставки с кратностью "1000", вместо привычных "1024".
                  Ответить
                  • Нету ничего плохого в том, чтобы дать пользователю возможность выбора. Пусть сам решает каким способом ему считать байты.
                    Ответить
                    • И хорошего, собсна. Если исторически сложилось так, что пользуемся футами и ярдами, то за каким лядом переходить на что-то ещё? Если кому-то надо, величину в К завсегда можно умножить на 1024. Проблема высосана из пальца. Может быть, я такой ограниченный человек, но мне за всю мою многолетнюю практику ни разу не были нужны значения по основанию 1000. В конце концов, этот издевательский ключ "--СИ" намекает, что нам за каким-то хреном понадобился результат в стандартных единицах. Что мы будем с ним делать? Умножать на джоули-ленцы?
                      Ответить
                      • я не нахожу другого обьяснения, как неспособность понять иные системы счисления, кроме десятичной....
                        Ответить
                  • вот оно что. тогда да.
                    но подозреваю, что многие по привычке понимают по умолчанию кратность х1000, а не х1024
                    Ответить
                    • По этому по дэфолту 1024, и надо дописать --si для десятичных, предварительно прочитав мануал по использованию.
                      Ответить
    • Мое мнение - за вложенные операторы ? убивать надо. Лучше не придумаешь способа код непонятным сделать.
      Ответить

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