Да простит меня великий Visor....Не удержалсо

Я чет не понимаю, если не за хрен кусить так ник нафиг курочить
 

В моем классе соединять все строки в 1 переменную StringBuilder - это вообще как тогда проверять что-то?
Что именно проверять, если в этом цикле нет проверок?
Сплошное склеивание строк.
 
Код:
for (L2EventGroupEngineInstance event: _eventInstances.values()) {
replyMSG.append("<tr><td><font color=\"LEVEL\">" + event.getName() + "</font></td>" + "<td><button value=\"Show\" action=\"bypass -h " + getCommand() + "_show " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Edit\" action=\"bypass -h " + getCommand() + "_edit " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h " + getCommand() + "_del " + event.getName() + " $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
}
Вот этот цикл.
Вообще-то GenCloud не об этом писал, но этот вариант тоже неплох.

Рассматривает 1 строку
replyMSG.append("<tr><td><font color=\"LEVEL\">" + event.getName() + "</font></td>" + "<td><button value=\"Show\" action=\"bypass -h " + getCommand() + "_show " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Edit\" action=\"bypass -h " + getCommand() + "_edit " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h " + getCommand() + "_del " + event.getName() + " $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
есть высокая вероятность что оптимизатор не будет делать пример, когда каждое объединение будет выполняться с созданием нового StringBulder, было бы глупо так делать, а разработчики java судя по всему не так глупы. Это все может быть как раз переведено в код с 1 классом StringBuilder и append.
Это рассуждения конечно, но и решать сразу что оптимизатор пойдет по медленному пути не правильно.
 
В случае с использованием "+" внутри .append() (как у Вас и сделано) код превратится вот в это :
Код:
replyMSG.append(new StringBuilder("<tr><td><font color=\"LEVEL\">").append(event.getName()).append("</font></td>").append("<td><button value=\"Show\" action=\"bypass -h ").append(getCommand()).append("_show ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Edit\" action=\"bypass -h ").append(getCommand()).append("_edit ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Delete\" action=\"bypass -h ").append(getCommand()).append("_del ").append(event.getName()).append(" $name").append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>").toString());

Т.е. каждую итерацию цикла будет создаваться новый экземпляр StringBuilder.
Зачем это, если Вы уже используете TextBuilder, и можете использовать .append(), вместо использования "+" ?
 
Что именно проверять, если в этом цикле нет проверок?
Сплошное склеивание строк.
Да, именно и нужно "склеивание 2 строк" в верхнем блоке с проверками, а в нижнем передано на решение оптимизитора java.

Твои абстрактные рассуждения не помогут решить задачи, выполняемые классом.

Итак даю подсказку. Класс - общий класс иерархии групп-эвентов, содержит в себе решения общие для всех наследуемых его классах. Кол-во эвентов на момент разработки неизвестно, есть вероятность что их будет более 2х, может и 1, пока планируется один.
Ничего необычного в общем-то.

Вторая подсказка - методы данного класса используются только на момент настройки эвентов. Настройка эвентов происходит редко.
Вопрос - нужно ли оптимизацию скорости выполнения без конкатенций в проверках выносить ключевым?
Вопрос - нужно ли оптимизация строки генерирования странички html выносить ключевым?
Вопрос - нужно ли поставить ключевым вопрос ООП и экономии памяти из-за крайне редкого использования?

В случае с использованием "+" внутри .append() (как у Вас и сделано) код превратится вот в это :
Код:
replyMSG.append(new StringBuilder("<tr><td><font color=\"LEVEL\">").append(event.getName()).append("</font></td>").append("<td><button value=\"Show\" action=\"bypass -h ").append(getCommand()).append("_show ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Edit\" action=\"bypass -h ").append(getCommand()).append("_edit ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Delete\" action=\"bypass -h ").append(getCommand()).append("_del ").append(event.getName()).append(" $name").append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>").toString());

Т.е. каждую итерацию цикла будет создаваться новый экземпляр StringBuilder.
Зачем это, если Вы уже используете TextBuilder, и можете использовать .append(), вместо использования "+" ?
Можно было бы городить велосипед для 2-3 циклов с 1 экземпляром билдера, но для пары-тройки итераций код будет излишним, а вопрос скорости работы не решит. То есть создание 1 или 2 билдеров - это скажем так "оптимизация" весьма не очень полезная, выигрыш может и будет несколько наносекунд, но я считаю, что лаконичность кода в данном случае лучше.

А назвать этот конкретный цикл прямо говнокодом - это уже ни в какие ворота.
 
Последнее редактирование:
А назвать этот конкретный цикл прямо говнокодом - это уже ни в какие ворота.
А если бы здесь было 9000 ивентов, то можно?

Суть в том, что условности рода "предполагается, количество ивентов не превысит 2-3" не дают права писать подобные конструкции.
Естественно, это Ваш проект, и Вам решать, как Вам удобнее работать и какие условности соблюдать.
Вот только этот код каким-то образом стал публичным, следовательно он подчиняется правилам общего использования.
Настоятельно прошу не пропускать мои сообщения через призму токсичного первого поста GenCloud.
 
Мало того, когда 1 итерация цикла, получается что явное объявления билдера перед циклом выглядит громоздко и может претендовать на звание "говнокод".
Или ты (имеется ввиду velafrys) прямо сразу исключаешь такое граничное условие?

Дорогой - это мой проект, мои клиенты и мои потребности - за 8 лет я знаю что и сколько примерно будет. Не будет никаких 9000 эвентов. Их даже много придумать сложно, то есть предметная область в данном случае прогнозируема.


Я в данном случае выступаю и заказчиком.
То что код попал в шару - это же не конец света, но это не значить что какой-то выродок может вполне оптимальный для задач класс кидать и кричать - "это говнокод".
Чтобы рассуждать о говнокоде - мало видеть код, еще полезно проверить граничные условия, возможно что код и не требует излишних оптимизаций.
Если бы оптимизация была нужна, я бы это делал сразу.
 
Последнее редактирование:
Тогда зачем доказывать, что в плане эффективности и производительности разницы нет? Ещё и о ассемблере речь.
 
Тогда зачем доказывать, что в плане эффективности и производительности разницы нет? Ещё и о ассемблере речь.
Если речь идет об астрактной работе со строками и их объединением в памяти то реализация на ассемблере с большой вероятностью будет работать быстрее реализации на java.

Но в данном то конкретном случае мы имеем условия, близкие к граничным, когда цикл выполнится 1 раз, и может когда-нибудь 2 раза. Соответственно ответ уже будет другой, скорее всего что будет одинаково для 1 раза.

Итог - говнокод в коде не найден для имеющихся условий, или еще хочешь обсудить какой-то участок?
 
Речь идет не о java vs assembler, а о StringBuilder vs "+" in StringBuilder.
 
Да жди пока рак на горе свиснет, дискаса не будет с хохло выродками.
Выродок, ты как бы не выкручивался - факт твоей тупизны доказан и очевиден.

Администрация, прошу обратить внимание на оскорбление по национальному признаку.

Речь идет не о java vs assembler, а о StringBuilder vs "+" in StringBuilder.
Ты решил придумать границы, но в данном случае я расширил границы. То есть при максимальной оптимизации лучше взять именно ассемблер. И только потом можно работать с частными случаями, а в частных случаях при 1 итерации лучший вариант, который короче пишется, скорость то одинаковая.

То есть из частных случаев я выбрал наиболее оптимальный вариант.
А цикл там нужен на случай, если эвентов будет более одного, для корректной работы модели.
 
Последнее редактирование:
А Вы способны реализовать оптимизацию в этом классе на ассемблере?
 
А Вы способны реализовать оптимизацию в этом классе на ассемблере?
Если вопрос теоретический - могу ли я реализовать сборку html ответа на ассемблере в данном классе - думаю что смог бы, но в данном случае отвечу что "нет".

И вообще, что за игры в презумпцию виновности? Почему кто-то должен что-то опровергать и доказывать?
Я просто привожу факт: склеивание строк исключительно с помощью StringBuilder лучше, нежели с использованием "+".
В ответ же слышу рассказы о том, что GenCloud плохой(скорее всего может оно и так, но я не за этим сюда пришел), из контекста все вырвали, да вообще не знаем этот класс нужен. Да вот только все это не важно.

Плохой участок кода в классе делает класс плохим.
В ответ на это слышу рассказы о том, что вырвали неиспользуемый класс.
Ну раз так, то пока он использовался там было все нормально, а как перестал использоваться - конкатенаций настрочили, да?
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.

Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.

Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?

Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
 
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.

Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.

Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?

Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
upload_2016-2-6_3-13-31.png
 
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.

Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.

Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?

Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
я конечно не на что не претендую, но по первому пункту, мне показалось что человек явно дал понят что отношения у него ко всем одинаковое
 
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.

Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.

Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?

Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".

Не нужно судить по себе или по GenCloud, я не знаю по кому ещё.
Если уж речь идет про "обгадить", то целей таких не преследую. Мне кажется не очень-то похоже, что я в каких-то отношениях с GenCloud, будь то дружеские или партнерские, я же ноунейм, хех.
Старайтесь хладнокровно относиться ко всему, работа - есть работа, личные отношения - есть личные отношения. Вы рьяно начали защищать свой подход сломя голову, а я просто периодически захожу на этот форум, в режиме only-read, т.к. он выглядит приятнее, чем ЗГ. Когда-то в сентябре мне кинули ссылку на тред, а тут стало интересно, чего это профессионалы как дети уже 3 с лишним месяца обсуждают.

Кому я должен доказывать? Вам? А Вы беспристрастны и объективны? - Нет
Потому что речь идет о Вашем коде, ошибок своих признавать Вы не умеете, хоть частично, пытаетесь навязать свои вкусы и подход (я на тему того, что конкатенация для Вас выглядит удобнее, нежели .append). Вам достаточно было ответить топик стартеру в подобном тоне и роде, и в этом случае тема была бы страниц на 6 меньше :
Мало того, когда 1 итерация цикла, получается что явное объявления билдера перед циклом выглядит громоздко и может претендовать на звание "говнокод".
Или ты (имеется ввиду velafrys) прямо сразу исключаешь такое граничное условие?

Дорогой - это мой проект, мои клиенты и мои потребности - за 8 лет я знаю что и сколько примерно будет. Не будет никаких 9000 эвентов. Их даже много придумать сложно, то есть предметная область в данном случае прогнозируема.

Я в данном случае выступаю и заказчиком.
То что код попал в шару - это же не конец света, но это не значить что какой-то выродок может вполне оптимальный для задач класс кидать и кричать - "это говнокод".
Чтобы рассуждать о говнокоде - мало видеть код, еще полезно проверить граничные условия, возможно что код и не требует излишних оптимизаций.
Если бы оптимизация была нужна, я бы это делал сразу.

Я все сказал, удачи Вам в поддержке Вашего проекта.
 
Я не хочу показать, чью сторону я принимаю и принимаю ли я вообще в этом споре, сказать сложно, но раз уж такое дело, то вот Вам задачка.
Есть два куска кода :
Код:
String s = "";
for(int i = 0; i < 100000; i++) {
    s += i;
}
Код:
StringBuilder sb = new StringBuilder("");
for(int i = 0; i < 100000; i++) {
    sb.append(i);
}

Какой из участков выполнится быстрее? И как время выполнение кода, если количество итераций в цикле увеличится в обоих случаях? Ведь это условная величина.
Не имеет значения, как Вы получите ответ - прогоните этот код, или из своего опыта сможете сказать, важно чтобы Вы поняли, зачем я задаю такой вопрос.
Первый цикл ~52 секунды
Второй цикл ~ 4 милисекунды
2 вариант быстрей. Но при увеличении итерации сжирает больше ОЗУ
Второй не сжирает, там нечему сжирать.
А вот первый сжирает овердохера с горочкой и если находиться в полной тишине, то можно услышать как скрипит GC
конкатенция строк не такая уж и медленная процедура сама по себе.
Ага, она не такая уж медленная, она п***ец какая медленная.
Добавление StringBulder сделает из кода говнокод в этом конкретном случае. И абсолютно ничего не решит. Это достаточно очевидный факт. Я так понимаю, что ты этого не понимаешь.
Как раз таки наоборот - сделает конфетку.
выигрыш может и будет несколько наносекунд,
Не может, пару десятков или сотен мс.
Мало того, когда 1 итерация цикла, получается что явное объявления билдера перед циклом выглядит громоздко и может претендовать на звание "говнокод".
Кто вам сказал про такой бред? Ни один хороший Java программист вам такого никогда не скажет.
Код:
for (L2EventGroupEngineInstance event: _eventInstances.values()) {
replyMSG.append("<tr><td><font color=\"LEVEL\">" + event.getName() + "</font></td>" + "<td><button value=\"Show\" action=\"bypass -h " + getCommand() + "_show " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Edit\" action=\"bypass -h " + getCommand() + "_edit " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h " + getCommand() + "_del " + event.getName() + " $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
}
Вот этот цикл.
Вопрос - нужно ли оптимизацию скорости выполнения без конкатенций в проверках выносить ключевым?
Нужно
Вопрос - нужно ли оптимизация строки генерирования странички html выносить ключевым?
Нужно
Вопрос - нужно ли поставить ключевым вопрос ООП и экономии памяти из-за крайне редкого использования?
Нужно

И да... getCommand(), если вы сами говорите может в процессе изменятся, то ведь пи***ц может начать твориться, код может в таких случаях либо не выполняться так как надо, либо вообще не выполнятся. Так что надо объявить её обязательно в начале.
 
Код:
        String a = "a";
        String b = "b";
        System.out.println((a + b));

Код:
        0 ldc 16;                 /* "a" */
        2 astore_1;               /* a */
        /* L7 */
        3 ldc 18;                 /* "b" */
        5 astore_2;               /* b */
        /* L8 */
        6 getstatic 20;           /* java.lang.System.out */
        9 new 26;
        12 dup;
        13 aload_1;               /* a */
        14 invokestatic 28;       /* java.lang.String java.lang.String.valueOf(java.lang.Object b) */
        17 invokespecial 34;      /* java.lang.StringBuilder(java.lang.String a) */
        20 aload_2;               /* b */
        21 invokevirtual 37;      /* java.lang.StringBuilder append(java.lang.String b) */
        24 invokevirtual 41;      /* java.lang.String toString() */
        27 invokevirtual 45;      /* void println(java.lang.String b) */

как показывает опыт, java и оптимизация вещи не совместимые. Легче плюнуть и пойти бухать
 
  • Мне нравится
Реакции: WoWan-SM и kick

    kick

    Баллов: 36
    За сообщение

    WoWan-SM

    Баллов: 5
    За сообщение
В итоге, WoWan-SM и gattsu, доказали то что я писал пару постов назад.
Так что, дорогой visor, Вы не только пишите не оптимизированный, и не читаемый код, но еще и как человек - немного неадекватны.
Вам сделали 100 прямых замечаний, в Вы ищете миллион отмазок.
Смотрите что бы корона с Вашей головы не упала :) Король Визор123)
Вы опозорились больше всех в этой теме. Вместо того что бы признать свои ошибки - всякую чушь несёте.
Удачи Вам!
 
Назад
Сверху Снизу