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

    −1

    1. 1
    2. 2
    3. 3
    ID_tables_vec[arg1.get_extra_value()]
         [ID_tables_vec[arg1.get_extra_value()][arg1.get_value()].get_value()]
         .set_name(tmp_str);

    Это один оператор. Из кода интерпретатора модельного языка (задание в универе). Периодически в коде начали возникать подобные вещи, связанные с особенностями таблиц имен. Буду рад, если кто-то предложит эквивалентные, но более читаемые конструкции.

    Запостил: DrCodeMonkey, 07 Мая 2016

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

    • Чисто внешне похоже на типичный код на Objective-C. По крайней мере, читается так же «легко».

      Тут проглядываются два этапа:
      index = ID_tables_vec[arg1.get_extra_value()][arg1.get_value()].get_value();
      ID_tables_vec[arg1.get_extra_value()][index].set_name(tmp_str);
      Или даже так:
      index1 = arg1.get_extra_value();
      index2 = ID_tables_vec[index1][arg1.get_value()].get_value();
      ID_tables_vec[index1][index2].set_name(tmp_str);

      Может быть, настала пора подобрать для задачи более удачное хранилище данных?
      Ответить
      • обжси отлично читается если приноровица

        >>arg1.get_extra_value()
        такого кода не может быть в обжси
        Ответить
        • Ну да... Там будет чё-то типа:
          [first_argument_of_the_operator get_extra_value_of_the_argument]
          Ответить
    • Отлаживаю программы по скринам, рефакторю по одной строчке кода, практикую прикладную телепатию. Недорого. Обращаться по тел. 88005553536.
      Ответить
      • А я ещё как цапля стоять умею. Курлык-курлык!
        Ответить
        • Иди под струю, сука, мойся! Чтобы через пять минут чистый был, или я тебя придушу вот этими руками вот, ты понял, блядь?!
          Ответить
    • Массив массивов с косвенной адресацией на самого себя - что это то новенькое.

      Приложи подорожник

      Ну или хотя бы так напиши

      auto table = ID_tables_vec[arg1.get_extra_value()];
      table[table[arg1.get_value()].get_value()].set_name(tmp_str);


      Так хоть прочитать можно, хотя рука на лице все еще мешает.
      Ответить
      • Мне нравится эта идея: закэшируем не только результат вызова get_extra_value(), но и адрес table. Но C/C++ — это не ECMAScript. Может быть, явно передать указатель?

        auto table = &ID_tables_vec[arg1.get_extra_value()];
        (*table)[(*table)[arg1.get_value()].get_value()].set_name(tmp_str);
        Ответить
        • Я не сильно разбираюсь в плюсах - разве не один фиг? Или массив по значению передается?

          Тут проблема в архитектуре. Нужно код смотреть и перепиливать все нафиг. Не должно быть таких таблиц
          Ответить
          • Никто в плюсах не разбирается настолько, чтобы гарантированно сказать, что в университетском коде ID_tables_vec[что-то] - std::vector<pitux>, передающийся по значению, а не pitux*, передающийся по указателю.
            Ответить
      • Ехал table через value...
        Ответить
    • Запилить нормально религия не позволяет?
      Ответить

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