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

    +75

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    private void executeUiOperation(final UiOperation operation, final Boolean documentReadOnly) {
            boolean readOnly = !edit;
            if (documentReadOnly != null) {
                readOnly |= documentReadOnly;
            }
    //....

    Кручу-верчу запутать хочу...

    Запостил: ingenuus, 20 Июля 2012

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

    • Причем при использовании documentReadOnly передается boolean.
      final boolean viewOnly
      ...
      executeUiOperation(operation, viewOnly);
      Ответить
    • Boolean vs boolean

      Джавапроблемы ;)
      Ответить
      • Однажды в .net p/invoke нарвался на то, что типы bool по умолчанию маршалятся как BOOL из WinAPI, т.е. 4 байта, а нужен был однобайтовый плюсовый bool. Так что не только джавапроблемы.
        Ответить
        • Стоп... в плюсах однобайтовы...

          Убиться, и правда, в GCC и MSVC sizeof(bool) == 1.

          Сколько живу и не знаю...
          Ответить
          • странно, по-моему везде, кроме джавы, бул однобайтен.
            Ответить
            • Однобайтовый медленнее же не?
              Ответить
              • жаба медленее по определению, при чем тут бул?
                Ответить
                • Однобайтовый медленнее из-за архитектуры, при чём тут жаба?
                  Ответить
                  • > Однобайтовый медленнее
                    все зависит от компилятора
                    Ответить
                  • Ну при исполнении оно во многих случаях дооптимизируется до однобитового - флажок в регистре флагов. А в остальных случаях он займет весь регистр, чтобы не проц не нуждался в предыдующих значениях этого регистра, и мог свободнее раскидывать операции.

                    Однобайтовость же при размещении в памяти скажется только положительно - за счет меньшего размера структур с таким булом будет меньше промахов при обращениях к кешу.
                    Ответить
                    • >Однобайтовость же при размещении в памяти скажется только положительно - за счет меньшего размера структур с таким булом будет меньше промахов при обращениях к кешу.

                      #pragma pack 1
                      struct{
                      bool a;
                      int b;

                      В данном случае b соснет. Обращение к нему будет не выравненным и может печально закончится. Так что однобафтовый bull плохо. В любом случае это медленнее.
                      Ответить
                      • Соснет b... но, как не странно, не сам бул...

                        И раз тут применили #pragma pack, то был вполне определенный протокол, в котором было написано 1 байт того-то и 4 байта сего-то. Поэтому все претензии не к однобайтовому булу, а к автору протокола.

                        P.S. Не надоело еще грызть кактусы и реализовывать сериализацию накладыванием структур? Ну я понимаю в embedded это актуально, и, возможно, в движках СУБД где надо быстро сохранять\загружать данные в непереносимом на другие машины формате (но там #pragma pack можно с чистой совестью выкинуть).
                        Ответить
            • Странно, но в бейсиках (QB, VB) от MS (до .NET) - бул если и был, то был двухбайтным.
              Логикой это было никак не объяснить.

              А суть была вот в чем - false=0, а вот true= -1.
              Бейсиковский Byte был unsigned, то есть 0..255. Потому использовался 2-байтный Integer, в который можно было записать -1.
              Вот такое вот говно.
              Ответить

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