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

0

  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 DrCodeMonkey, (Updated )

Комментарии (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*, передающийся по указателю.
          Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8