1. Java / Говнокод #8142

    +77

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    public static void main(final String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          JFrame.setDefaultLookAndFeelDecorated(false);
          JDialog.setDefaultLookAndFeelDecorated(false);
        } finally {
          new ImageMaps().start();
        }
      }

    НАКОНЕЦ запускаю десктоп-приложение.
    Не знаю как вам, а по мне - выглядит весьма странно.

    Запостил: Lure Of Chaos, 10 Октября 2011

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

    • Это писал инопланетянин?
      Ответить
    • Глядя на этот код, я понимаю, почему крестоблядям не хватает отступа в два пробела, хотя дельфинам двух достаточно.

      Поясняю мысль: фигурная скобочка перед словом "финалли" слишком незаметна, из-за этого весь код воспринимается, как один болк кода.
      Ответить
      • Тарас, ты тоже двухпробельный?
        Ответить
      • Линус требует восемь пробелов, иначе после третьей бутылки шнапса он перестаёт распознавать блоки
        Ответить
      • #define begin {
        #define end }
        Ответить
      • > слишком незаметна
        может, у тебя шрифт слишком мелкий? такое не заметить...
        к тому же, само finally не может быть незаметно
        Ответить
      • ема... тарас к "крестоблядским" языкам оказывается относит все языки которые имеют си подобный синтаксис (js,c#,java,perl...)
        Ответить
      • Паскалевы два пробела уёбищны, учитывая что в языке нет резко выделяемых из текста фигурных скобок, и весь код -- один большой трудночитаемый уёбищный сгусток букв.

        Я много языков повидал, но си-подобный синтакс куда читаемее ебаной паскалевой каши.

        Вот всё-таки ой незря-незря си-подобные языки (и синтаксис) намного популярнее дельфей.
        Ответить
        • кажется появился ярко выраженный анти-тарас
          Ответить
          • скорее Captain Common Sense
            Ответить
          • весовые категории совпадают?
            Ответить
            • вспомнилось:
              - Так ты меня на 200 грамм тяжелее.
              - Это еще почему?
              - Так я на тебя хуй положил!
              Ответить
        • Популярность — дело случая. И всегда относительна.

          Такие детали синтаксиса не имеют значения.
          Ответить
        • > резко выделяемых из текста фигурных скобок

          ЛОЛ

          > и весь код -- один большой трудночитаемый уёбищный сгусток букв

          Не читай код в блокноте. Включи подсветку синтаксиса и не мучайся. И тогда поймёшь, что фигурные скобочки - невидимое говно.
          Ответить
          • >Включи подсветку синтаксиса и не мучайся

            да хоть с подсветкой, хоть с цирком с клоунами, лесенка вида:

            begin
              begin
                 begin
                 end;
              end;
            end;


            в любом случае остаётка нечитаемым полотном синих или чёрных, или ещё каких букв
            Ответить
            • Ясно, ты не умеешь читать.
              Ответить
              • >Ясно, ты не умеешь читать.
                удивительно, что ты умеешь читать, не будучи способным видеть скобки и много прочих символов
                Ответить
      • Вообще паскалевый стайл -- привет из 70'ых, тогда так уёбищно почти весь код писали (до того, как поняли, что писать в спагетти-стиле -- плохо). Ты бы ещё тут фортран хвалил.
        Ответить
        • А причём тут спагетти-стиль?
          Слив?
          Ответить
          • Лесенкообразный код (см. выше) -- чистой воды спагетти-стиль. Я не говорил спагетти-код, я сказал спагетти-стиль. Сливали, сливают и будут сливать только дельфятники, понуро ссучившись по углам.

            В си-подобном синтаксисе чётко выделимы блоки (разной степени чёткости, в зависимости от ident-стайл, см. Allman style, например -- там для полуслепых людей, как ты, специально выделяют отдельную строку под скобу), в том время как в паскале -- это всегда пахнущая несвежими 70-ыми лесенка то в одну, то в другую сторону, без каких-либо чётко выделимых блоков.
            Ответить
            • Парень, перестань пахнуть
              {
                  {
                      {
                      }
                  }
              }
              Ответить
              • Куда читаемее объективно -- большой отступ, графически отлично от букв, составляющих тело блока.

                Представь, что в русском языке вместо точек, запятых и прочих знаков пунктуации так и стали писать -- "точка", "запятая" и т. д. Это и есть твой любимый синтаксис а ля паскаль. Или можно пойти ещё дальше, и вместо скобок ( и ) писать в паскале "скобка правая" и "скобка левая", а ведь сука же так читаемо, если подстветку в любимой РАД поставить!

                Не фанбойничай, а принимай данность объективно.
                Ответить
                • Нихера не читаемее. Большой отступ - это вынужденная мера, без него читается ещё хуже. Скобочки тонкие, на расстоянии более полуметра их вообще не видно и блоки не различаются.
                  Русский язык пишется на бумаге, на которой нет подсветки синтаксиса.
                  Так что кончай крестушить.
                  Ответить
                  • >Большой отступ - это вынужденная мера
                    Ага, т.е. если бы не "вынужденные меры", то идеальный стиль написания кода -- это вообще не делать отступов?
                    Больше отступ -- больше блок выделяется от прочих. Оспаривать это глубо. В паскале же ни того, ни другого не наблюдается. Принуждают писать полотна в лаба-стайл.

                    >Скобочки тонкие, на расстоянии более полуметра их вообще не видно
                    Что-то ты лукавишь -- фигурные скобки в С/С++ ты целенаправленно перестаёшь различать на расстоянии десяти метров, а обычные скобки внутри expressions в паскале -- за глаза. По-моему, это психологическое.

                    >Так что кончай крестушить.
                    Утю-тю.
                    Ответить
                    • > Ага, т.е. если бы не "вынужденные меры", то идеальный стиль написания кода -- это вообще не делать отступов?

                      Нет, с чего ты взял.

                      > Больше отступ -- больше блок выделяется от прочих. Оспаривать это глубо.

                      А я с этим и не спорю. Просто завсимость "выделяемость/отступ" у Паскаля более крутая, поэтому для ТОЙ ЖЕ читаемости паскалистам хватает МЕНЬШЕГО отступа. Теперь дошло?

                      > В паскале же ни того, ни другого не наблюдается.

                      Чего не наблюдается? Больших отступов? А они там и не нужны. Зато код в ширину не расползается. Были бы нужны - все бы применяли, в чём проблемы.
                      Это всё равно, что ругать иномарки за тишину в салоне, мотивируя это тем, что чем больше скорость - тем больше шум, а значит, иномарки медленнее ездят и говно.

                      > а обычные скобки внутри expressions в паскале -- за глаза

                      Их я тоже различаю с трудом. Но быстро различать блоки важнее, чем быстро различать скобки в выражениях. Да, выражения я разглядываю долго, иногда дроблю на несколько.
                      Ответить
                      • >для ТОЙ ЖЕ читаемости паскалистам хватает МЕНЬШЕГО отступа
                        Паскалисты просто навсего используют стандартный стиль, придуманный Виртом в 70'ым в горячечном бреду, без какой-либо задней мысли. Они бы рады были бы и вовсе без идентации писать, как тру-говнокодеры.

                        Не придумывай. Паскаль создавался как учебный язык, и до сих он используется в основном "индивидуалистами", у Паскаля нет большая опыта ревью кода десятками человек/работы в команде и т.п. Паскаль это "написал кучу лесенок и полотна в лаба-style -- и похуй", в то время как в C/C++ большое кодо-ревью, и стили, выработанные там, как раз заточены под командную работу, то бишь читаемость тоже. А Паскаль в большинстве случаев -- WriteOnly-код.
                        Ответить
                        • > Паскалисты просто навсего используют стандартный стиль, придуманный Виртом в 70'ым в горячечном бреду, без какой-либо задней мысли

                          Нет, они используют то, что им удобно.

                          > Они бы рады были бы и вовсе без идентации писать, как тру-говнокодеры.

                          Говори за себя

                          > Не придумывай. Паскаль создавался как учебный язык, и до сих он используется в основном "индивидуалистами", у Паскаля нет большая опыта ревью кода десятками человек/работы в команде и т.п. Паскаль это "написал кучу лесенок и полотка в лаба-style -- и похуй", в то время как в C/C++ большое кодо-ревью, и стили, выработанные там, как раз заточены на командную работу, то бишь читаемость тоже.

                          Это кукареканье не имеет отношения к разговору о читаемости кода.
                          Ели хочешь кодо-ревью и стили - пиши на Аде, там это зарегламентировано по полной. Но ты же не знаешь про такие языки, потому что ты тупой молодой крестушок, который вчера узнал про С++ и которому сосед Вася сказал что Паскаль типа сакс, потому что все кулхацкеры так говорят.

                          > А Паскаль в большинстве случаев -- WriteOnly-код.

                          Крестушок слился, понятно.
                          Ответить
                          • >Нет, они используют то, что им удобно.
                            Хуй там, в С/С++ -- туевы кучи стилей, потому как сколько людей -- столько вкусов/мнений, в то время как в Дельфи -- один стиль, только потому что так дедушка завещал и так написано в "стань кулхацкеров на Дельфи за 14 дней". Вот именно в С/С++ -- используют то, что им удобно. А в дельфи -- бездумное копирование. Препроцессор в С/C++ позволяет заменить скобки на BEGIN/END, но ни один здравомыслящий человек так не делает, ибо уродливо и неудобно.

                            >Это кукареканье не имеет отношения к разговору о читаемости кода.
                            Имеет очень даже прямое, потому что весь смысл "читаемости кода" -- это кодо-ревью другими людьми, работа в команде и т.д. В Дельфи типичный нищий студент в шапке-петушке насрал кучу кода-полотна в лаба-style, и похуй. Никто его код читать не будет. Своё говно не пахнет -- свой код читаем. Поэтому в Дельфи понятие читаемости нулевое, нет никакого опыта. В C/C++ это всё отточено и поставлено на конвейер. Это, так сказать, типилогически сходно эволюционному процессу естественного отбора.

                            >ты тупой молодой крестушок
                            >который вчера узнал про С++ и которому сосед Вася сказал что Паскаль типа сакс
                            Вот не это ли кукарекание с переходом на личности за недостаточком чего сказать?

                            >Крестушок слился, понятно.
                            Сказать-то по существу нечего, да? Окромя пары исключений, которые подтверждают правило, большинство софта на Дельфи пишется одним человеком, которому своё говно вполне читаемо.
                            Ответить
                            • > в то время как в Дельфи -- один стиль,

                              Хуюшки.

                              > Имеет очень даже прямое, потому что весь смысл "читаемости кода" -- это кодо-ревью другими людьми, работа в команде и т.д.

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

                              > Вот не это ли кукарекание с переходом на личности за недостаточком чего сказать?
                              Сказать-то по существу нечего, да?

                              Ты ни_хе_ра не ответил по существу. Гуляй.
                              Ответить
                  • >на расстоянии более полуметра их вообще не видно и блоки не различаются
                    Лукавишь ты, у меня зрение плохое, и без очков на расстоянии в полметра я, согласен, не вижу этих скобочек вообще, но как и не вижу остальных букв. Если ты не видишь скобочки -- значит ты не видишь и остального, третьего не дано. Плюс ты обязан иметь очень плохое зрение или очень-преочень плохой монитор (что вполне возможно, учитывая что типичный пользователь Дельфи -- нищий студент в шапке-петушке, нарывший РАД на файлопомойке). Вообще такую претензию про исчезающие скобочки первый раз слышу. Что-то ещё в последнее время не исчезало у тебя, может быть вдруг?
                    Ответить
                    • Купи монитор побольше. Скобочки хуже видны, чем буквы, с этим глупо спорить.
                      Ответить
                      • Стоит ли говорить, что у каждого человека еще и свое восприятие xDDDD
                        Ответить
                        • Подожди, пока что он доставляет. Такой наивный...
                          Ответить
                          • Конечно, есть полуслепые мазохисты вроде тебя, но я говорю за большинство. Есть много разных дисциплин, которые изучают удобство пользования, и они вполне себе объективны, т.к. испытаны на большем числе людей. В принципе люди воспринимают всё одинаково, т.к. одинаково устроены, за исключением особо запущенных случаев связанных с какими-то психо-сексуальными травмами детства.

                            Из этого треда я только понял, что паскалевый синтаксис -- blindness-proof, но я не слепой, так что для меня это не преимущество.
                            Ответить
                            • > Есть много разных дисциплин, которые изучают удобство пользования, и они вполне себе объективны, т.к. испытаны на большем числе людей.

                              Да, ГосДеп США проводил в начале 80х что-то подобное в рамках не одного синтаксиса, а многих. Даже новый язык ввёл. Паскалоидный.

                              > Из этого треда я только понял, что паскалевый синтаксис -- blindness-proof

                              поставь себе 5й шрифт в редакторе, и будет тебе счастью - ведь 13й - для слепых
                              Ответить
                      • Тарас, дело тут не в различаемости, а чисто психологически, скобочки похожи друг на друга и потому при "беглом" прочтении не теряются. А ключевые слова бегин-енд, во-первых, не похожи (в одном слове 5 букв, в другом 3, прямо посылать на них можно), а во-вторых, больше усилий приходится на распознавание мозгом.
                        в результате, текст на бейсике\паскале\дельфи читать более утомительно, нежели в большинстве других языков.

                        и вообще, на мой взгляд, чем в языке меньше бессмысленных ключевых слов (те же бегин-енд, ехтендс и др.), тем лучше. впрочем, нужно знать меру,одни скобочки-уголочки-собачки читать нифига непонятно.
                        Ответить
                        • Всё это множество букв опровергается тем фактом, что большинство иллюстраций алгоритмов сделаны на Паскале. Вольный синтаксис псевдокода внезапно тоже напоминает Паскаль в большинстве случаев.
                          Ответить
                          • и это лично меня очень раздражает.
                            Ответить
                          • а блок-схемы вообще в виде геометрических фигур нарисованны.
                            это сделано для дебилов того, чтобы любой мог can into алгоритм, а не из соображений простоты и читабельности.

                            pascal-like алгоритмы - как текст наиболее приближенный к английскому языку.

                            ибо человека незнакомого с C-like синтаксисом поначалу смущает обилие значков и символов.

                            >и это лично меня очень раздражает.
                            меня тоже. сделано, повторюсь, для того чтобы читать их могло любое быдло.
                            Ответить
                          • >Всё это множество букв опровергается тем фактом, что большинство иллюстраций алгоритмов сделаны на Паскале
                            Здесь причина не в читаемости, а в наглядности для новичков. Скобки cryptic.
                            Псевдокод расчитан на небольшие примерчики в пару строк.
                            Попробуй таким способом пописать нормальное большое приложение.

                            Плюс, как я уже говорил, это просто дань традиции, когда многие языки (потомки Алгола) были похожей хуйнёй, и код был такой же нечитаемый (лет двести назад).
                            Ответить
                      • >Купи монитор побольше
                        чтобы я не видел скобочек, установив шрифт в 8, а потом жаловался, что С++ - отстой? нет, спасибо, я не сам себе злой буратина. Мне и 19-и дюймов хватает.
                        Ответить
                        • Нет, чтобы ты меньше напрягался при чтении кода. А то такую херню пишешь.
                          Ответить
                  • >Русский язык пишется на бумаге, на которой нет подсветки синтаксиса
                    подсветка синтаксиса таких больших слов малость отвлекает от самой логики (которая блеклая); особенно если их дохуя
                    Ответить
                    • фигурные скобочки малость отвлекают от самой логики (которая блеклая); особенно если их дохуя

                      Ну, дальше что? Куча общих фраз, куча левого пиздежа на общие темы. А по сути я всё сказал - то, что сишники _вынуждены_ делать отступ в 4 пробела и переносить фигурную скобочку на новую строку, показывает "читаемость" их синтаксиса.
                      Ответить
                      • > _вынуждены_ делать отступ в 4 пробела и переносить фигурную скобочку на новую строку
                        я делаю 2 пробела и скобку НЕ переношу на новую строку :-Р
                        Ответить
                        • ага, и идеально ровная стенка из

                          JDialog...
                          finally
                          new ImageMaps().start();
                          Ответить
                      • можно подумать, begin и end; обычно занимают не целую строку...
                        Ответить
                        • begin чаще не переносят. Фигурную скобочку же чаще рекомендуют переносить.
                          Ответить
                          • керниганская ересь
                            Ответить
                          • >begin чаще не переносят.
                            K&R-стиль для паскаля
                            Ответить
                            • Да. В Паскале он очень в тему, так как при беглом взгляде ЖИРНОЕ слово end в паре с ЖИРНЫМ словом if или while отлично выделяют блок кода. А бегин где-то там в конце строки с if и while. Он там как бы и не нужен и поэтому его быстро упразднили, сохранив только в борландовских диалектах.
                              Ответить
                          • В K&R (aka 1TBS) переносят для функций, но не переносят для обычных блоков. Стилей расставления скобок пипец сколько, но Ъ-сишники проповедуют в основном всё-же K&R. В промышленности чаще используют Allman, там все скобки на отдельной строке.
                            Ответить
                    • Подсветка синтаксиса таких больших слов много отвлекает от самой логики (которая блеклая); особенно если их дохуя.
                      Ответить
        • Одна из лучших программ в истории ПО - TeX - была написана на переносимом диалекте паскаля с помощью Literate Programming. Тут Тарас прав: между спагетти и Pascal нет корреляции.
          Ответить
          • Исключение подтверждает правило: мы можем назвать только с десяток хороших софтин на паскалях/дельфях (о которых дельфисты-апологеты трещат на каждом шагу), в то время как на C/C++ -- их туевы хучи, и в представлении они просто не нуждаются. Это скорее мастерство отдельных индивидов, временно больных раком дельфи, чем какая-то серьёзность и достойность этой опухолевого недо-языка.
            Ответить
            • Кнут признаётся, что его любимый язык программирования - cweb (c + literate programming toolkit).
              Ответить
    • Один из эпичных фэйлов Java - слишком много исключений сделано checked. Также эпичен убогий по-умолчанию интерфейс Swing.
      Ответить
      • >Также эпичен убогий по-умолчанию интерфейс Swing.
        согласен, да и вообще многое что есть в жабе по дефолту, крайне неудобоюзабельно.
        даты, например.

        но свинг - это вообще кал. у него даже сырцы - золотая говножила.
        взять тот же JFrame
        protected String paramString() {
                String defaultCloseOperationString;
                if (defaultCloseOperation == HIDE_ON_CLOSE) {
                    defaultCloseOperationString = "HIDE_ON_CLOSE";
                } else if (defaultCloseOperation == DISPOSE_ON_CLOSE) {
                    defaultCloseOperationString = "DISPOSE_ON_CLOSE";
                } else if (defaultCloseOperation == DO_NOTHING_ON_CLOSE) {
                    defaultCloseOperationString = "DO_NOTHING_ON_CLOSE";
                } else if (defaultCloseOperation == 3) {
                    defaultCloseOperationString = "EXIT_ON_CLOSE";
                } else defaultCloseOperationString = "";
        	String rootPaneString = (rootPane != null ?
        				 rootPane.toString() : "");
        	String rootPaneCheckingEnabledString = (rootPaneCheckingEnabled ?
        						"true" : "false");
        
        	return super.paramString() +
        	",defaultCloseOperation=" + defaultCloseOperationString +
        	",rootPane=" + rootPaneString +
        	",rootPaneCheckingEnabled=" + rootPaneCheckingEnabledString;
            }
        Ответить
        • почти не замечаю криминала - разве что тройка. остальное, учитывая постепенное развитие явы - логично
          Ответить
          • а String rootPaneCheckingEnabledString = (rootPaneCheckingEnabled ? "true" : "false");
            Ответить
            • терпимо, учитывая, что нам надо именно в нижнем регистре
              Ответить
              • ага. терпимо. именна переменных, бульщит, копипаст.
                JDialog
                protected String paramString() {
                        String defaultCloseOperationString;
                        if (defaultCloseOperation == HIDE_ON_CLOSE) {
                            defaultCloseOperationString = "HIDE_ON_CLOSE";
                        } else if (defaultCloseOperation == DISPOSE_ON_CLOSE) {
                            defaultCloseOperationString = "DISPOSE_ON_CLOSE";
                        } else if (defaultCloseOperation == DO_NOTHING_ON_CLOSE) {
                            defaultCloseOperationString = "DO_NOTHING_ON_CLOSE";
                        } else defaultCloseOperationString = "";
                	String rootPaneString = (rootPane != null ?
                				 rootPane.toString() : "");
                	String rootPaneCheckingEnabledString = (rootPaneCheckingEnabled ?
                						"true" : "false");
                
                	return super.paramString() +
                	",defaultCloseOperation=" + defaultCloseOperationString +
                	",rootPane=" + rootPaneString +
                	",rootPaneCheckingEnabled=" + rootPaneCheckingEnabledString;
                    }

                это из первого попавшегося.
                Ответить
            • Учитывая, что Boolean.toString(boolean b) появилось только в 1.4?
              Ответить
              • А в какой яве у Objecta нестатический toString() появился?

                public String toString() {
                return value ? "true" : "false";
                }
                ну это я к тому что можно писать и так
                "rootPaneCheckingEnabled=" + new Boolean(rootPaneCheckingEnabled)

                кстати это ответ и Люре.
                >учитывая, что нам надо именно в нижнем регистре
                >именно в нижнем регистре
                Ответить
              • еще есть String.valueOf(boolean b)
                да вариантов куча.
                Ответить
                • Да, это единственный вариант, который может быть лучше.
                  Ответить
        • paramString() вообще служит для отладочных целей. А как ещё его можно написать?
          Ответить
          • Map?
            Ответить
            • Где?
              Ответить
              • paramString - гнилая идея. С такой-то реализацией.
                paramMap явно красивей.
                Ответить
                • paramString используется, чтобы вывести в System.err, логи и т.п. Что вы будете делать с paramMap?
                  Ответить
                  • Собрать Map в String с разделителями не составляет труда.
                    Ответить
                    • Т.е. создать Hashtable для того, чтобы собрать его в String и выбросить, — красивая идея?

                      И после этого ещё упрекаете в неиспользовании String.valueOf.
                      Ответить
                      • А что плохого в Hashtable?
                        Тут вообще стоило задуматься не о куче переменных с длинющими именами, а о Mape с параметрами компонента, доступными по ключу.
                        Ответить
                        • Зачем? Какая с этого польза? Для отладки нужна строка.
                          Ответить
                          • Хранить настройки в одном мапе вместо
                            >кучи переменных с длинющими именами
                            Ответить
                            • Зачем? Только некоторые из этих параметров задаются программистом, многие рассчитываются. Толку сохранять абсолютные координаты в плавающем дизайне?

                              И есть сериализация.
                              Ответить
                              • Почему тогда AbstractAction хранит параметры именно в виде хэш-таблицы?
                                Ответить
                                • Какая связь?

                                  AbstractAction хранит параметры в хэш-таблице потому, что такой интерфейс Action. Потому, что его предполагалось расширять. Потому, что хэш-таблица — одна из подходящих реализаций этого интерфейса.
                                  Ответить
                              • Вот-вот.
                                И не забывайте про SwingUtilities.appContextGet
                                который
                                return sun.awt.AppContext.getAppContext().get(k ey);
                                Ответить
                            • не, ну если требуются манипуляции, тогда да, нужно хранить в мапе и т.д.
                              а тут тупо вывести в toString(), причем быстро и ненакладно, не окупается вводить лишний временный объект
                              Ответить
                • По-моему, в paramString() нет ничего особо криминального.
                  Ответить
          • StringBuffer?
            Ответить
            • Лучше StringBuilder. И (сюрприз!) конкатенация строк как раз компилируется в создание StringBuilder, несколько append и toString.
              Ответить
              • Главное что append - всеядный. booleanы кушает, например

                >конкатенация строк как раз компилируется в создание StringBuilder
                пруфы есть?
                Ответить
                • The Java language provides special support for the string concatenation operator ( + ), and for conversion of other objects to strings. String concatenation is implemented through the StringBuilder(or StringBuffer) class and its append method. String conversions are implemented through the method toString, defined by Object and inherited by all classes in Java. For additional information on string concatenation and conversion, see Gosling, Joy, and Steele, The Java Language Specification.
                  Ответить
                  • Хм. Оно-то вроде и так.
                    Но получается этот твик уже где-то внутри JVM, потому что при разоборке jadом скомпиленной конкатенации мы видим конкатенацию. А не appendы.
                    Ответить
                    • Да ну? А мне javap показывает создание StringBuilder и вызовы append. Чем вы смотрите, какой опкод у конкатенации?
                      Ответить
                      • jad конкатенацию разбирает как конкатенацию.
                        ЧЯДНТ?
                        Ответить
                    • Нет, это реально подставляется компилятором.
                      Ответить
      • начать javaсрач? [Y/N]
        
        Ответить
      • Это из тех недостатков, которые мешают плохим танцорам программистам.
        Ответить
        • > которые мешают ленивым программистам
          fixed
          а ещё меня бесят public конструкторы иммутабельных классов типа Integer, Boolean, String, ...
          Ответить
          • Use valueOf, в чем проблема? Просто что они есть?
            Ответить
            • Проблема не в том, что они есть, а в том, что они public. И по моему опыту 80% людей используют именно конструкторы, а не valueOf.
              Ответить
              • наверное, те же люди, которые гуляют и по другим javaграблям
                это не такая уж тайна для более-менее квалифицированных java-разработчиков
                Ответить
                • Похоже в жаве граблей побольше, чем в С++ будет? (:
                  Ответить
                  • "Говорить, что Java проще чем C++ это как утверждать, что К2 ниже, чем Эверест."
                    — Ларри О'Браен (редактор журналов Computer Language и Software Development).
                    Ответить
              • Хорошо быть умным задним умом.
                Ответить
              • а что за грабля в жаве, если не использовать в данном случае это valueof?
                Ответить
                • создание лишнего объекта => частая сборка мусора => фрагментация памяти => падение производительности + падение производительности в связи с созданием нового объекта.
                  в случае же valueof используется копия существующих объектов, поскольку в данном случае это обертки над числами, которые иммутабельны
                  Ответить
                  • Ну, не всегда используется копия. Integer обычно кэширует 256 значений, Boolean, разумеется, кэширует оба значения.
                    Ответить
                    • ну это на "усмотрение" системы
                      Ответить
                      • Что на усмотрение системы? Integer кэширует значения от -128 до 127.
                        Ответить
                        • Инфа 100%?
                          Ответить
                          • Если использовать Integer.valueOf(int) - 100%
                            А вот за автобоксинг утверждать не буду.
                            Ответить
                            • Цитату из официальной документации или спецификации можно?
                              Ответить
                              • /**
                                     * Returns a <tt>Integer</tt> instance representing the specified
                                     * <tt>int</tt> value.
                                     * If a new <tt>Integer</tt> instance is not required, this method
                                     * should generally be used in preference to the constructor
                                     * {@link #Integer(int)}, as this method is likely to yield
                                     * significantly better space and time performance by caching
                                     * frequently requested values.
                                     *
                                     * @param  i an <code>int</code> value.
                                     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
                                     * @since  1.5
                                     */
                                    public static Integer valueOf(int i) {
                                	final int offset = 128;
                                	if (i >= -128 && i <= 127) { // must cache 
                                	    return IntegerCache.cache[i + offset];
                                	}
                                        return new Integer(i);
                                    }
                                Ответить
                                • Где здесь в документации?

                                  Про детали реализации и Lure Of Chaos говорил.
                                  Ответить
                            • Ну, на самом деле, разных виртуальных машин много. То, что в OpenJDK именно такой range, это и так понятно. Насколько я помню, в спецификации указаны только гарантированные границы, точные зависят от реализации.
                              Ответить
                              • да, забыл уточнить, что это реализация от Sun
                                Ответить
                              • Что именно говорится о гарантированных границах?
                                Ответить
                                • "If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2."
                                  http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.7
                                  Ответить
                                  • опередил =)
                                    Ответить
                                  • Спасибо (здесь, правда, ничего не говорится о Integer.valueOf).

                                    Я бы кешировал от -128 до 255.
                                    Ответить
                                    • or an int or short number between -128 and 127
                                      Ответить
                                      • @gegMORO4 имеет в виду, что в этом разделе явно не указано, что боксинг осуществляется посредством Integer.valueOf.
                                        Ответить
                                        • согласен, невнимательно прочитал. Про Integer.valueOf ничего =)
                                          Ответить
    • ну и срач вы тут развели )
      Ответить

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