Кресты / Говнокод #12970 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
bool[] Inmask;
....
        private void discreteOIForm_Load(object sender, EventArgs e)
        {
            if (icpI_measure.Connect() && icpO_measure.Connect())
            {
                Inmask = new bool[1];
                Inmask[Convert.ToInt32(0)] = true;
            }
        }

Новоприбывший сотрудник откладывает вот такое. Это он сделал после совета использовать маски. Вы когда-нибудь видели массив из одного элемента? Я тоже нет.

Запостил: phys-tech phys-tech, (Updated )

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

  • Это конечно же C#, уважаемые. Привык, что на плюсах пишем.
    Ответить
    • Хорошо, а то я уже спросить хотел, где же здесь С++, уважаемый.
      Ответить
  • > Вы когда-нибудь видели массив из одного элемента
    Да, видел, в жабьем коде, в котором автор (видимо сишник) хотел передать инт по ссылке 😉
    void some(int[] a, /* еще параметры */) {
        a[0] = a[0] + 42;
    }
    
    int[] a = new int[1];
    some(a, /* еще параметры */);
    Ответить
      • >AtomicReference<Integer> уже не айс
        Слишком много накладных расходов. Не для того их изобрели.
        Ответить
        • На самом деле нет.

          Посмотрите в исходник AtomicInteger. Операции get и set там - всего лишь тривиальный геттер и сеттер для volatile int. Если пользоваться только ими, никаких накладных расходов не будет. Вспомогательный объект используется только для нетривиальных операций типа incrementAndGet.
          Ответить
          • Правильно. Но volatile отключает некоторые оптимизации. В целом это конечно некритично, и имеет право на жизнь.
            Но имхо массив предпочтительнее.
            Ответить
          • К тому же разница в краткости:
            int[] a= {42};
            AtomicInteger a1=new AtomicInteger(42);
            Ответить
      • Ну в том контексте где это юзалось - ну совсем не айс. Причем что массив, что референс. Там парсили двоичный файл примерно вот таким способом:
        // один пример
        int[] off = new int[1];
        off[0] = 0;
        name = Utils.strd(buf, off);
        data = new byte[buf.length - off[0]];
        System.arraycopy(buf, off[0], data, 0, data.length);
        
        // другой пример
        z = Utils.int16d(buf, 0);
        subz = Utils.int16d(buf, 2);
        id = Utils.ub(buf[4]);
        И вот вместо этих strd, прочей ереси в Utils, и магических смещений стоило бы запилить класс, в котором были бы инкапсулированы массив и офсет, и были бы адекватные методы для чтения байтов, слов и строк...
        Ответить
    • >в жабьем коде, в котором автор (видимо сишник) хотел передать инт по ссылке 😉
      Будто что-то плохое. Часто использую при возврате из замыканий, анонимных классов. int не сойдет, потому что final, а массив - самый раз.
      Ответить
  • "Вы когда-нибудь видели массив из одного элемента?"

    в древние времена, массив из одного элемента, как параметр функции, в жабе был почти официальный способ как эмулировать указатель на указатель. не в курсе как оно там сейчас, но во времена JDK 1.0 я это реально видел.
    Ответить
    • >как оно там сейчас
      И поныне часто так пишут. Правда нынче часто удобнее завести женерик-методы для построения ссылки, пары, тройки.

      Но раньше так и было:
      массив из одного элемента - ссылка.
      из двух объектов - пара.
      И выше. Кортежи-кортежики. Только кастинг вручную.
      Возврат из методов нескольких значений, передача в анонимные классы.
      Ответить
    • Ссылок ксати дохера всяких: Soft, Weak, ThreadLocal, Atomic.
      И без статических билдеров не очень удобно с этим хозяйством управляться.
      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8