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

О чем вы тут пишете? В цикле или 0 или 1 итерация.
Так же можете померять время итерации "a"+"b"
То есть к чему цикл в 100000 итераций? Попытка перевести тему в другую сторону - так опять же я дал самый правильный ответ, что для достижения максимальной скорости выполнения нужно писать на ассемблере - и это никто пока не смог опровергнуть.

Корону тут натягивают как раз все кому не лень, посмотрите свои ответы.

Первый цикл ~52 секунды
Второй цикл ~ 4 милисекунды

Второй не сжирает, там нечему сжирать.
А вот первый сжирает овердохера с горочкой и если находиться в полной тишине, то можно услышать как скрипит GC

Ага, она не такая уж медленная, она п***ец какая медленная.

Как раз таки наоборот - сделает конфетку.

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

Кто вам сказал про такой бред? Ни один хороший Java программист вам такого никогда не скажет.


Нужно

Нужно

Нужно

И да... getCommand(), если вы сами говорите может в процессе изменятся, то ведь пи***ц может начать твориться, код может в таких случаях либо не выполняться так как надо, либо вообще не выполнятся. Так что надо объявить её обязательно в начале.
Неправильный ответ ни для 0 ни для 1 итерации цикла, измерять нужно то что есть в задаче 1 поста, а не в выдуманном примере, который хочется измерять - там вообще-то все очевидно было еще до него.
getCommand() задается 1 раз при создании объекта.
Насчет добавить StringBuilder Для 0 итераций очень сильно ускорит и сделает конфетку?
Да и вообще у вас ответы противоречат - нельзя выбрать или быстрее или экономнее.
Самый экономный вариант памяти, который при создании объекта занимает минимальное кол-во памяти, другой вариант - это если переписать без конкатенций строк - этот вариант будет самый быстрый, быстрее чем любые StringBuilder. Это очевидно, странно что реальную оптимизацию не никто смог сделать - вы же писали столько слов .... и даже не смогли найти что оптимизировать ....
Почему никто не смог ничего придумать, кроме глупого цикла на 100000 итераций вместо 0-1 реальной итерации - померяйте что будет быстрее при 0-1 итерации предложенного примера - вы узнаете реальный ответ.


В итоге, WoWan-SM и gattsu, доказали то что я писал пару постов назад.
Так что, дорогой visor, Вы не только пишите не оптимизированный, и не читаемый код, но еще и как человек - немного неадекватны.
Вам сделали 100 прямых замечаний, в Вы ищете миллион отмазок.
Смотрите что бы корона с Вашей головы не упала :) Король Визор123)
Вы опозорились больше всех в этой теме. Вместо того что бы признать свои ошибки - всякую чушь несёте.
Удачи Вам!
Доказали что при 0-1 итерации что? Я что-то не вижу доказательств.
Признать ошибку, что вы меряете то что и так очевидно? Я признаю, что я вижу очевидные ответы и их называю.
Чушь - это придумывать какие-то фантазийные сценарии - код в 1 посту где там 100000 итераций?

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

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


Я все сказал, удачи Вам в поддержке Вашего проекта.
Вы написали пример, который не отражает предметную область вопроса, о чем может быть обсуждение - это же очевидно. Удачи в фантазийном мире оптимизаций.
 

В scala, как я понимаю, все иначе?
Scala синтаксически мощнее язык. Но все же та же jvm.
Оптимизация дурное дело, просто как оптимизировать места которые ты не контролируешь, в этом и тупик.
Java(jvm) - как ракета с радиусом поражения. Стоит задача убить человека, Вам придется стрелять ракетой, убьете его, рядом стоящих, еще ближайшие строения в радиусе поражения, уничтожите. Хотя надо просто по тихому убрать.

Самая быстра программа возвращает сразу результат.
ПС я не пьющий человек.
 
Получилось, один написал глупую тему, другие не смогли понять, что GenCloud не соображает ничего, потом еще один velafrys написал пример, не отражающий предмет вопроса, а потом все бросились отвечать на неправильный вопрос.
Что уж тут сказать, можете одеть короны.

Scala синтаксически мощнее язык. Но все же та же jvm.
Оптимизация дурное дело, просто как оптимизировать места которые ты не контролируешь, в этом и тупик.
Java(jvm) - как ракета с радиусом поражения. Стоит задача убить человека, Вам придется стрелять ракетой, убьете его, рядом стоящих, еще ближайшие строения в радиусе поражения, уничтожите. Хотя надо просто по тихому убрать.

Самая быстра программа возвращает сразу результат.
ПС я не пьющий человек.
Ты вроде не глупый, мог бы пояснить народу, что они вообще не о том говорят, что если нужно оптимизировать класс - нужно не StringBuilder добавить, а убрать конкатенции строк, насколько это возможно.
 
Получилось, один написал глупую тему, другие не смогли понять, что GenCloud не соображает ничего, потом еще один velafrys написал пример, не отражающий предмет вопроса, а потом все бросились отвечать на неправильный вопрос.
Что уж тут сказать, можете одеть короны.
Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.
 
Код:
package actor;

public class TextBuilder {
    class Entry {
        String value;
       
        Entry next;
       
        Entry(String value) {
            this.value = value;
            this.next = null;
        }
    }
   
    int size = 0;
   
    Entry head;
   
    Entry tail;
   
    public TextBuilder() { }
   
    public TextBuilder append(Object value) {
        return append(value.toString());
    }
   
    public TextBuilder append(String value) {
        size += value.length();
        if(head == null)
            head = tail = new Entry(value);
        else
            tail = (tail.next = new Entry(value));
        return this;
    }
   
    public String toString() {
        char[] chars = new char[size];
        int offset = 0;
        for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
            for(int i = 0 ; i < target.value.length() ; i++)   
                chars[offset + i] = target.value.charAt(i);
        return new String(chars);
    }
   
    public static void main(String...arsg) {
        TextBuilder text = new TextBuilder();
        for(int i = 0 ; i < 100000 ; i++)
            text.append(i);
        text.toString();
    }
}

Код:
    protected void showMainPage(L2PcInstance player)
    {
        //NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

        TextBuilder reply = new TextBuilder();
        reply
            .append("<html><title>")
            .append(getName())
            .append("</title><body>")
            .append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ")
            .append(getName())
            .append(" ]</font></td>")
            .append("<td><button value=\"Back\" action=\"bypass -h ")
            .append("admin_events")
            .append("\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>")
            .append("</tr></table>")
            .append("<br><center>Engine instances</center>")
            .append("<table width=\"292\">");
     
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply.
                append("<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>");
       
        reply
            .append("</table>")
            .append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>")
            .append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ")
            .append(getCommand())
            .append("_create $name")
            .append("\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>")
            .append("</table>")
            .append("</body></html>");
       
        adminReply.setHtml(replyMSG.toString());
        player.sendPacket(adminReply);
        // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
        player.sendPacket(ActionFailed.STATIC_PACKET);
    }
 
Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.
Дегенерат, не нужно делать вывод за других людей. Если ты не понимаешь элементарных вещей - то не значить что все вокруг такие же или глупее тебя.

Код:
package actor;

public class TextBuilder {
    class Entry {
        String value;
    
        Entry next;
    
        Entry(String value) {
            this.value = value;
            this.next = null;
        }
    }

    int size = 0;

    Entry head;

    Entry tail;

    public TextBuilder() { }

    public TextBuilder append(Object value) {
        return append(value.toString());
    }

    public TextBuilder append(String value) {
        size += value.length();
        if(head == null)
            head = tail = new Entry(value);
        else
            tail = (tail.next = new Entry(value));
        return this;
    }

    public String toString() {
        char[] chars = new char[size];
        int offset = 0;
        for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
            for(int i = 0 ; i < target.value.length() ; i++)
                chars[offset + i] = target.value.charAt(i);
        return new String(chars);
    }

    public static void main(String...arsg) {
        TextBuilder text = new TextBuilder();
        for(int i = 0 ; i < 100000 ; i++)
            text.append(i);
        text.toString();
    }
}

Код:
    protected void showMainPage(L2PcInstance player)
    {
        //NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

        TextBuilder reply = new TextBuilder();
        reply
            .append("<html><title>")
            .append(getName())
            .append("</title><body>")
            .append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ")
            .append(getName())
            .append(" ]</font></td>")
            .append("<td><button value=\"Back\" action=\"bypass -h ")
            .append("admin_events")
            .append("\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>")
            .append("</tr></table>")
            .append("<br><center>Engine instances</center>")
            .append("<table width=\"292\">");
  
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply.
                append("<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>");
    
        reply
            .append("</table>")
            .append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>")
            .append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ")
            .append(getCommand())
            .append("_create $name")
            .append("\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>")
            .append("</table>")
            .append("</body></html>");
    
        adminReply.setHtml(replyMSG.toString());
        player.sendPacket(adminReply);
        // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
        player.sendPacket(ActionFailed.STATIC_PACKET);
    }
Неправильный ответ, правильный ответ решить вопрос в частном порядке убрав общее решение, это позволит переложить время выполнения на время клонирования решения в частных имплементациях.

То есть, чтобы было понятно: этот класс перестанет существовать, и время его выполнения при любых вариантах будет равен 0.
 
Речь больше идет о Вашем подходе, а не о эффективности решения.

GenCloud ещё тот клоун, конечно, но вы друг друга стоите, господин Visor123, имхо.
 
Неправильный ответ, правильный ответ решить вопрос в частном порядке убрав общее решение, это позволит переложить время выполнения на время клонирования решения в частных имплементациях.

То есть, чтобы было понятно: этот класс перестанет существовать, и время его выполнения при любых вариантах будет равен 0.
.................. :Aty: (спасибо администрации за смайлики)

version 0.1
delete method append(Object);
add new method append(Object...)
Код:
public class TextBuilder {
    class Entry {
        String value;
     
        Entry next;
     
        Entry(String value) {
            this.value = value;
            this.next = null;
        }
    }
 
    int size = 0;
 
    Entry head;
 
    Entry tail;
 
    public TextBuilder() { }
 
    public TextBuilder append(String value) {
        size += value.length();
        if(head == null)
            head = tail = new Entry(value);
        else
            tail = (tail.next = new Entry(value));
        return this;
    }
 
    public TextBuilder append(Object...value) {
        int i = 0;
        if(head == null && value.length > 0) {
            String str = value[0].toString();
            size += str.length();
            head = tail = new Entry(str);
            i++;
        }
        for(; i < value.length ; i++) {
            String str = value[i].toString();
            size += str.length();
            tail = (tail.next = new Entry(str));
        }
        return this;
    }
 
    public String toString() {
        char[] chars = new char[size];
        int offset = 0;
        for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
            for(int i = 0 ; i < target.value.length() ; i++) 
                chars[offset + i] = target.value.charAt(i);
        return new String(chars);
    }
}

Код:
    protected void showMainPage(L2PcInstance player)
    {
        NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
        TextBuilder reply = new TextBuilder();
        reply
            .append(
                "<html><title>",
                getName(),
                "</title><body>",
                "<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ",
                getName(),
                " ]</font></td>",
                "<td><button value=\"Back\" action=\"bypass -h ",
                "admin_events",
                "\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>",
                "</tr></table>",
                "<br><center>Engine instances</center>",
                "<table width=\"292\">"
            );
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply
                .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>"
                );
        reply
            .append(
                "</table>",
                "<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>",
                "<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ",
                getCommand(),
                "_create $name",
                "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>",
                "</table>",
                "</body></html>"
            );
     
        adminReply.setHtml(reply.toString());
        player.sendPacket(adminReply);
        // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
        player.sendPacket(ActionFailed.STATIC_PACKET);
    }
 
Я так понимаю, что вместо того, чтобы немножко подумать все решили, что класс не оптимизирован, потому что содержит конкатенции?

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

Проблема всех умников, которые идут по пути оптимизации в том, что они не считают стоимость выполнения и стоимость своего времени. Так же не смотрят на задачу, а только на конечный вариант.
Простой пример - данный класс имеет общее решение задачи, но наиболее быстрым является частное решение задачи, но тогда в каждом частном решении будет клонирование решения этой общей задачи, но уже в более быстром варианте.
Посчитаем стоимость выполнения класса - класс управляет созданием, отображением странички, сохранением и редактированием движка групп-эвента.
Предположим что 2 метода каждый по 1 вызову займут макс 0,5мс. За полгода добавлять движок эвента может понадобится максимум раза 2, создать + написать имя, сохранить. Это пара операций, и больше отображений. Я считаю, что потеря 100мс выполнения за пол года не критично для сервера.
Класс не содержит рекурсий и блокировок и не может вызвать лаг сервера - значить время его выполнения можно считать чистым.

Теперь мое время - при имплементации задач в виде частных случаев общее решение этого класса будет клонировано на частные решения - что потянет мое время как минимум замены имен в частных строках команд, далее частные решения будут забирать время фокусировки внимания и понимания того, что решение не оптимально с позиции логики решения несколько раз одинаковых задач.

То есть стоимость в 100мс за пол года стоит общего решения задачи и экономит кучу моего времени. Логика решения общих вопросов отделена от частных случаев и оптимизирована для редкого использования и 0-1 итераций.

Вопрос решен.

Речь больше идет о Вашем подходе, а не о эффективности решения.

GenCloud ещё тот клоун, конечно, но вы друг друга стоите, господин Visor123, имхо.
Не нужно меня подсовывать к GenCloud - одно из отличительных свойств в том, что я не вру.

Всегда важно эффективность решения, а не подход.
Подход - это набор инструментов/скилов по сути, а эффективность работы - это результат - людям нужен результат.
Пока вы не поймете таких простых вещей, вы будете задавать неправильные вопросы и иметь неправильные ответы.


.................. :Aty: (спасибо администрации за смайлики)

version 0.1
delete method append(Object);
add new method append(Object...)
Код:
public class TextBuilder {
    class Entry {
        String value;
    
        Entry next;
    
        Entry(String value) {
            this.value = value;
            this.next = null;
        }
    }

    int size = 0;

    Entry head;

    Entry tail;

    public TextBuilder() { }

    public TextBuilder append(String value) {
        size += value.length();
        if(head == null)
            head = tail = new Entry(value);
        else
            tail = (tail.next = new Entry(value));
        return this;
    }

    public TextBuilder append(Object...value) {
        int i = 0;
        if(head == null && value.length > 0) {
            String str = value[0].toString();
            size += str.length();
            head = tail = new Entry(str);
            i++;
        }
        for(; i < value.length ; i++) {
            String str = value[i].toString();
            size += str.length();
            tail = (tail.next = new Entry(str));
        }
        return this;
    }

    public String toString() {
        char[] chars = new char[size];
        int offset = 0;
        for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
            for(int i = 0 ; i < target.value.length() ; i++)
                chars[offset + i] = target.value.charAt(i);
        return new String(chars);
    }
}

Код:
    protected void showMainPage(L2PcInstance player)
    {
        NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
        TextBuilder reply = new TextBuilder();
        reply
            .append(
                "<html><title>",
                getName(),
                "</title><body>",
                "<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ",
                getName(),
                " ]</font></td>",
                "<td><button value=\"Back\" action=\"bypass -h ",
                "admin_events",
                "\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>",
                "</tr></table>",
                "<br><center>Engine instances</center>",
                "<table width=\"292\">"
            );
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply
                .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>"
                );
        reply
            .append(
                "</table>",
                "<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>",
                "<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ",
                getCommand(),
                "_create $name",
                "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>",
                "</table>",
                "</body></html>"
            );
    
        adminReply.setHtml(reply.toString());
        player.sendPacket(adminReply);
        // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
        player.sendPacket(ActionFailed.STATIC_PACKET);
    }
Решение не должно содержать цикла, тогда оно будет максимально быстрым из простых. То есть ты просто не в том уровне ищешь решение.
 
Последнее редактирование:
Жизни меня учить не нужно, хорошо?
Вы моей работы не видели, а я Вашу видел.
 
Жизни меня учить не нужно, хорошо?
Вы моей работы не видели, а я Вашу видел.
Вообще-то можешь узнать у любого заказчика, что ему важно. Для этого я не нужен.
То что ты не считаешь эффективность решения фактором в решении задачи - то это не значит, что я учу тебя жизни - жизнь сама тебя научит.

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

ПС я тут просто развлекаюсь
 
Вообще-то можешь узнать у любого заказчика, что ему важно. Для этого я не нужен.
То что ты не считаешь эффективность решения фактором в решении задачи - то это не значит, что я учу тебя жизни - жизнь сама тебя научит.

Я тут никого не обманул - я сразу дал правильные ответы, и сейчас после долгих намеков дал готовые решения. Не нужно на меня за это обижаться, потому что ты не был готов к реальной оптимизации, но не в 1 плоскости, а в объеме вопроса с большим кол-вом факторов и с учетом собственно самой задачи.

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

ПС я тут просто развлекаюсь
Так я и не ухожу, в случае частного решения задачи этого класса не будет вообще, а задача будет решена без цикла и без конкатенций в методе с командами.
Но поскольку основная задача значительно больше, то общее решение за 100мс в полугодие оптимально.

Код и так приведен в соответствие, посчитай сколько будет стоимость 0 итераций конкатенций.

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

Для Вас все Ваши ответы - правильные. Таковы правила всех самовлюбленных людей, вне зависимости от их рода деятельности.
Мое правило простое - видишь не инлайновую конкатенацию? Это говнокод.
Почитайте на досуге, кстати, того же Макконнелла, как минимум.
Опять неправильный вопрос и неправильный ответ. Правильное решение зависит не от твоей точки зрения, а от эффективности решения задачи.
То есть можно заглядывать в середину - но когда я говорю что кол-во итераций цикла 0 - то почему-то ты пытаешься говорить что ты там что-то оптимизировал.
При 0 времени выполнения ничего ты не оптимизировал, и с большой вероятностью с 1 итерацией тоже.

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

Я понимаю, что ты не понимаешь что я пишу, и чем отличается частное решение задачи от общего, но простые вещи всегда сложно понять. Проще говоря, код уже оптимизирован до 0-1 итерации. И то что ты не в состоянии этого понять не делает его говнокодом.

Вся проблема в том, что вы себе изначально неправильно сформулировали задачу, и соответственно любой ответ является не оптимальным. Вы даже после стольких страниц не поняли, что в цикле будет 0-1 итерация и не нужно городить велосипед. И что при оптимизации задачи(не кода) не будет ни конкатенций ни цикла. То есть вы даже не поняли - что оптимизация задачи, это не пристраивание еще одного билдера в код, а решение задачи по другому.
Есть книги, где авторы обращают внимание на реальную стоимость выполнения, на стоимость(время) разработки - но так делают не все, и бывает, что студенты такие вещи пропускают.

Вот когда вы напишете кучу частных случаев решения однотипных задач, вы поймете о чем я написал.
Я даже помогу понять, тем кто сможет задать правильные вопросы.
Не нужно меня винить, в том, что вы задали себе неправильные вопросы и получили неправильные ответы.
Факт так и остался в том, что задача решена эффективно и оптимально.
 
Последнее редактирование:
здесь был smeli и отсыпал травки.

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

command.substring(getCommand().length()+5); еще меня особенно умиляет)
Берем строку, режем ее, вычленяем остаток - вуаля, команда!
Вы почитайте лучше вот этот бред, нашелся литературный критик "Но с точки зрения написания" - это он про код так пишет. GenCloud ты с точки зрения буквы смотришь или их жопы? Где твоя точка зрения?
 
Последнее редактирование:
Оффтоп:
Вангую пора вмешаться.
 
Повторюсь - неправильные с Вашей точки зрения.
Что ты несешь - посмотри, что конкретно ты привел в примере - цикл с 100000 итерациями - я у тебя что спросил - где ты нашел в коде цикл где может быть 100000 итераций? Ты что написал - единственный цикл - но там не с моей точки зрения, а объективно 0-1 итераций может быть. То есть фантасты не смогут этого типа эвента значительно больше пары-тройки для л2 придумать.
Объясняю - это не твт или цтф, это интеграторы типа - Турнир.

Какое это только мое мнение? Придумай штук 10 хотя бы.
 
Последнее редактирование:
Назад
Сверху Снизу