Си диез / Говнокод #25311 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
class PituhFazer{
    private Dictionary<string, ObservableCollection<SgnilPitushokViewModel>> Ghildren { get; } = new Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>();

    // почему жаба может так а шарп нет?
    private Dictionary<string, ObservableCollection<SgnilPitushokViewModel>> Ghildren { get; } = new Dictionary();
}

Почему в питушарпе до сих пор нету выведения типов из под конструктора?
меня заебало уже писать эти багры

Запостил: Lorip1971 Lorip1971, (Updated )

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

  • при чем, до недавних пор, в default тоже надо было весь этот багор писать, если хочешь параметр поумолчанию. наслаждайтесь:
    public void RunPituh(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>> children = default(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>>)) {
    
    }

    щас благо можно написать проще
    public void RunPituh(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>> children = default) {
    
    }


    но естественно хуй тебе за щеку, мой питушок. ведь ты сидишь на легаси куче говно, которую еще мамонты клали на asp.net webforms и питух-студіо 2010, где о не то что о С#7, о С#5 даже и не слышали, так шо кушай говнеца.
    Ответить
    • >питух-студіо 2010,
      ну так и джава в 2010 тоже не могла new Dictionary<>() -- это в семерко завезли
      Ответить
      • пиздец. ты тред вообще читал? я не спрашивал, схуляи в 2010м не было. я спрашивал, какого хуя до сих пор нету?
        а про 2010 я говорю, что тебе связывают руки, и даже если что-то появится, то ты будешь сосать хуй, вместо каши гарбузовой, ибо твой прожект - легаси гавно, в котором ретаргет никому и сниться не может.
        Ответить
          • садют тебя на легаси говно. которое сапортится уже 14 год. ты не имеешь права взять сделать ретаргет на новый фреймворк, ты обречен жрать говно пока не спрыгнешь из галеры/проекта. ты понимаешь это? тебе никто не позволит.
            ебаная вижуал студео не в состоянии (блять, это вообще смешно, жду когда продукты жыдбрейнс будут де факто для любого кодинга. мелкомягкие уже заебали), нормально открыть проекты старых студий. она что-то конвертирует, но в итоге тебе срет 100500 ошибок которые надо сидеть и руками править. а ты добавь к этому что проекта на 100+ тыс. строк кода. никакой человек не будет в здавом уме такого делать, лишь для того, чтобы написать Dictionary<string, Pituh> pituhi = default; вместо Dictionary<string, Pituh> pituhi = default(Dictionary<string, Pituh>);
            хуле не ясно?
            Ответить
              • Вероятно не шарпик, а студия.

                Если ты попробуешь в VS 2017 открыть проект/солюшен на С++ из студии 6.0 то отсосешь боли и говна по самые корки
                Ответить
                • вот по этому я за "vim" и "Makefile".

                  Я могу открыть проект, который не менялся с 1996 и всё будет работаьть
                  Ответить
                • Х.з., ладно в крестах там куча опций конпелятора да линкера. Но в шарпике то что вообще в проектах есть помимо списка файлов да ссылок на проекты с зависимостями? Что там вообще конвертировать?
                  Ответить
                  • В полном дотнете есть сраный "MSBuild", а в продовом коде обычно на него завязан миллион логики. Выглядит как говно, работает как говно и ломается каждую новую студию. На мсбилде кстати работает расовая дотнетная кодогенерация (TT шаблоны).

                    В ".NET Core" это всех заебало, и они, пока делали его первую версию, поменяли с десяток разных проектных систем, но в итоге вернулись назад к "MSBuild"
                    Но в отличие от полновесного дотнета, там они запихали под ковер хуеву тучу легаси говна, и проектная система стала намного проще и портируемее
                    По итогу ".NET Core" сейчас собирается чем угодно и где угодно и даже под прыщами, однако кровавый тырпрайз далеко не весь даже начинает думать о переходе на него
                    Ответить
                  • не в шарпике дело, в xmlе для сохранения конфига

                    ты в .sln и .cproj файлы зогляни
                    Ответить
                    • Т.е. для шарпика там такие же портянки хуйни, как и для крестов!?
                      Ответить
                      • От этой хуйни стараются уходить (выше писал), а кто-то еще юзает более другие билдсистемы, отличные от "MSBuild" ("Cake" или "Nuke", например, там вообще правила сборки прямо на C# пишутся)
                        Ответить
                        • Поэтому я за билдсистему, которая занимает одну строчку:
                          gcc -std=c11 -O3 -Wall $(find -name '*.c' -printf "%p ") -o main
                          Ответить
                          • говно это, а не билд система.
                            Она не собирает маны, не умеет инсталлировать программу, не учитывает ключи, не умеет дособирать измененные модули

                            Вот билдсистема:
                            $ cat Makefile
                            PROG=	foo
                            MAN=	foo.8
                            
                            .include <bsd.prog.mk>


                            Она все это делает и занимает 3 строки
                            Ответить

                          • На шарпе так тоже можно

                            csc $(find -name '*.cs' -printf "%p ") -out:app.exe -target:exe -optimize
                            Ответить
                      • Ттам всегда портянки, даже для Business Analyst проектов (таблицы для SQL, OLAP кубы итд)
                        где студия -- там треш
                        Ответить
                        • SQL таблицы то там нахуя? Им лень было отдельный файл завести?
                          Ответить
                          • Я имел ввиду тип проекта -- SQL project.

                            В нем хранится схема (структура базы) и информация о подключении к ms-sql.

                            Кстати, это очень удобно, потому что они умеют генерить diff (миграционные скрипты), и валидировать тоже умеют:

                            То-есть я храню в VCS схему базы. Вот я хочу добавить колонку и пишу в .sql файл новую колонку, студия проверяет что он корректный, сравнивает таблицу с таблицей в СУБД и выдает мне diff, который я выполняю на сервере.

                            Я не уверен что DataGrip так может
                            Ответить
              • это скорее убогость вижуал студио. до недавних пор, годной C# IDE, по сути то и не было. студия становится ИДЕ только после того, как на нее поставить решарпер.
                сейчас жыдбрейнс клепают уже ИДЕ под все. даже под твои любимые плюсцы (да, да, зацени CLion), для шарпа - Rider. он правда еще в бэте, но он уже лучше студии в разы. (по сути та же студия с решарпером). в общем, он то уже по-людски могет в проекты разных версий.
                Ответить
                • А еще бывает Resharper++
                  Он делает нормальную IDE из VS для плюсов. Правда, я не понял как ему сказать что у меня чистые си а не плюсы, и он стал мне предлагать там auto использовать
                  Ответить
                • > зацени CLion

                  Тормозное дерьмище на жабе, выжирающее дохера оперативки, да к тому же еще платное (по подписке) и проприетарное? Нет, спасибо. Если мне будет нужна тормозная говноиде на жабе для Си (на говноплюсах не пишу) - я возьму какой-нибудь эклипс (бесплатно при том).
                  Ответить
                  • да тормозное. но не дермище, отнюдь. и речь шла о замене нотпада с подсветкой, который майкрософт называет IDE, на нормальную среду разработки, которая помогает разработчику. вижуал студио тоже платная, но при том, что она стоит почти в два раза дороже, она может на порядок меньше чем райдер.
                    да и кто нахуй в здравом уме будет платить за ИДЕ, скачал кряки и ебашь. а если ты работаешь на галере, так и тебя вопрос цены вообще ебать не должен, галера все купит (наверное).

                    на счет проприетарности. я не шарю в этом, обьясни, почему это плохо?
                    Ответить
                    • > вижуал студио тоже платная
                      Редакция «Community» бесплатная уже года полтора. Причём по лицензии физики могут ебошить в ней любые приложения, в том числе и на продажу.
                      Ответить
                      • как бы для физиков больше и не надо. но мы жэ с вами в ынтырпрайзе. мне, например, приходилось сапортить говно мамонта, в котором тесты неписаны с участием ms fakes. так уот, без вижуал студио ынтырпрайз ты хуй запустишь эти тесты. т.к. fakes идет как часть ынтырпрайз пакета оной.

                        в жыдбрейс же, ты получаешь все и сразу. к слову, для жабы (увы, пока только для жабы) тоже есть есть комюнити версия intellij idea.

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

                        можно еще долго кукарекать по поводу хуевости студии и хуйовости райдера. но я лично для себя решил, сравнивать студию (даже ынтырпрайс) с райдером - гиблое дело. в райдере просто хуева куча тулзов для рефакторинга и удобных встроеных утилит, даже не смотря на то, что он все еще в бэте. я очень сильно к ним привык (еще со времен когда я был на жаба EE и ведроиде). их либо нету, либо они хромают на обе ноги. так что я все равно выберу райдер ибо оно того стоит. имхо.
                        Ответить
                      • >>полтора
                        лол
                        The Community edition was announced on 12 November 2014.

                        А Express был вообще черте когда, он он был для одного ЯП и на него не ставился R#, а без R# проще уж в Notepad++ писать
                        Ответить
                        • На «Экспресс» вообще не ставились никакие «vsix».

                          «Экспресс» для «C++» ещё был без «ATL» («ATL» приходилось откуда-нибудь пиратить, чтобы скококонпелировать серьёзные программы).
                          Ответить
                          • >>не ставились никакие «vsix».
                            Даже VsVim? ужас!

                            зы: у меня когда-то были спираченные диски с MSDN и Visual Studio 6.0, и там всё работало. Летала на WIn98, кстати. А VS 2017 мне кажется что грузится 4 минуты даже на бормадновом coffe lake с 32 гг памяти и ssd
                            Ответить
                    • И сколько же (и в чем конкретно?) я получу дополнительного удобства от использования Clion, если пишу я на Си, и всякие фичи, касаемые плюсов (всякие там автодополнения из неймспейсов с темплейтами) мне нахрен не нужны?

                      Я пока вижу, что в своём Clion они в основном затачивают всякую херню конкретно для плюсоебов, со всякими новыми говностандартов, а для сишников и так уже всё давно сделано в каком-нибудь Eclipse CDT, и Clion в этом отношении НИЧЕГО ОХУЕННОГО предоставить не может. Или я не прав?
                      Ответить
                      • на сях ты получишь довольно много инспекций, рефакторинг вроде rename, умный комплишен итд

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

                          Вообще, посмотри внимательно на этот коммит
                          https://github.com/radare/radare2/pull/6085/files?utf8=%E2%9C%93&diff=split#diff-7f6f82199b572cdbe767aa7a1ba9b436L380

                          и попробуй сказать, какой IDE всю эту херню можно автоматизировать? Внимательно так посмотри на кучу однотипных изменений. Знаешь как я это делал? Я написал говноскрипт которому скармливал исходник и он мне выплюнул обратно исходник с нужными заменами (потом еще пришлось некоторые места руками подправить, но то фигня). НИКАКАЯ СРАНАЯ IDE это делать не умеет. А если и умеет, то разве что через написание говноскрипта, но говноскрипт я и без IDE напишу
                          Ответить
                            • > да. Скачай и проверь.
                              Нет, я смотрел их рекламные видео, и нихрена полезного и охренительного для себя не увидел.

                              > https://www.jetbrains.com/help/idea/structural-search-and-replace.html
                              Ну так это и есть написание таких недоскриптов-регекспов. И у этого подхода есть достаточно очевидные ограничения, например что если мне надо не просто что-то заматчить, а провести какие-нибудь операции? Ну скажем, есть у меня куча кода вида
                              #define CRAP1 0xff
                              #define CRAP2 0xcc
                              #define CRAP3 0x33
                              
                              и надо это переделать в:
                              
                              #define CRAP1 0b11111111
                              #define CRAP2 0b11001100
                              #define CRAP3 0b00110011

                              Этот structural-search-and-replace мне поможет?
                              Ответить
                              • >Нет, я смотрел их рекламные видео
                                ;)))ну-ну

                                >Ну так это и есть написание таких недоскриптов-регекспов
                                Ты даже не осилил прочитать первые три строчки ссылки.

                                В структурном поиске ты работаешь с результатами парсинга, а регулярками ты парсишь сам.

                                Ладно, я не собирался вступать в религиозный спор.

                                Это всё равно что прийти на linux.org.ru, и рассказывать там про PowerShell.
                                Ответить
                                • > В структурном поиске ты работаешь с результатами парсинга, а регулярками ты парсишь сам.

                                  Один хрен это всё неуниверсальное говно, которое скриптами можно решать намного лучше, чем какими-то ограниченными говнофичами IDE.
                                  Ответить
                            • Кстати что там в Clion с профилированием, построением всяких там графиков красивых?
                              https://wiki.eclipse.org/Linux_Tools_Project/News/NewIn30#LTTng_CPU_Usage_View https://wiki.eclipse.org/images/f/fb/TimeAlignment_sash_scaled.png
                              что-нибудь такое есть?

                              https://blog.jetbrains.com/clion/2018/10/clion-2018-3-eap-profiler-multiline-todo/ что-то вроде делают, но как-то не впечатляет. Думаю, они там слишком заняты поддержкой всякой С++20 фигни и всяких автокомплитов
                              Ответить
                              • > но как-то не впечатляет
                                Конечно не впечатляет, ведь это коммерческий софт, написанный на джаве.

                                Если бы это был GNU софт под лицензией GPL написанный на Plain C, ты бы был в восторге
                                Ответить
                                • Тут GNU или не GNU совершенно ни при чем, в опенсорсном Eclipse это сделано лучше
                                  Ответить
                          • Это не программирование, это вышивание деревянными ложками какое-то
                            Ответить
                    • > на счет проприетарности. я не шарю в этом, обьясни, почему это плохо?

                      Это плохо уже хотя бы по той простой причине, что я не могу саму IDE под себя пропатчить (изменить некое дефолтное поведение, заложенное разработчиками, которое лично мне не нравится, и которое не может быть переконфигурировано никакими настройками, а может быть только исправлено через изменение кода IDE) или пофиксить какие-то баги самостоятельно, не дожидаясь момента, когда это соизволят сделать разрабы IDE, которые заняты в основном допиливанием поддержки автодополнений шаблонов через констэкспры в классах, которые мне нахрен не нужны.
                      Ответить
                      • сырцы intellij idea community есть, но конечно clionа нет
                        Ответить
                      • может я просто ебаная c# макака, но мне в жизни ни разу еще не понадобилось менять исходники IDE. да мне не хватает жутко функций у вижуал студио, но у IDE от жыдбрейнс есть ооочень много настроек и ооочень много плагинов, сказать что она сильно дохуя настраивается - не сказать ни чего. на худой крайняк можно всегда свой написать, у меня банально есть ВСЕ нужное мне, и я даже не представляю что еще ты хочешь менять в исходниках IDE.
                        Ответить
                    • > вижуал студио тоже платная, но при том, что она стоит почти в два раза дороже, она может на порядок меньше чем райдер.

                      Для вижуал студии хотя бы есть вариант купить лицензию один раз, а не платить ежемесячно или ежегодно. Но вообще эти ваши тормозные говноиде просто нахер не нужны, можно в швабодном емаксе обмазаться плагинами с CEDET. Или вообще в виме. Меня эти IDE бесят
                      Ответить
                      • вижуал студио тоже платная есть бесплатная
                        Ответить
                  • обожаю нытье про "жабатормозит"
                    Ответить
                      • у меня ничего не тормозит, кстати. Возможно, проблема не в жабе
                        Ответить
                        • Возможно. Однако, у меня почти ничего не тормозит, кроме «Eclipse». Может быть, я просто не умею с ним пердолиться.
                          Ответить
                          • Что ты в нем открываешь? Ты блядь pycharm попробуй, потом про тормоза расскажешь. Тормозит у него, блядь.
                            Ответить
            • Я не понимаю почему ты на меня агришься. Я что ли тебя на легаси гавно сдаю?

              Я понял твою проблему. Кстати, у JB есть Rider: это IDE для .NET, но перейти на нее со студии в старом проекте примерно нереально, я понимаю
              Ответить
              • я агрюсь, потому что я тебе говорю про гандоны, а ты мне - про зонтик.
                Ответить
  • действительно ацтой

    почему вывод типов (var) там не работает?

    зы в жабе
    new Dictionary<>(); а не new Dictionary();
    Ответить
    • да, сорян. давно уже на жабе не кодил. один хрен, это короче, чем вся та простыня.
      Ответить
  • Забыли меня наверное уже, уебки

    В C#8 обещали такую хуйню
    Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPit uh> gay = new();
    Ответить
    • Я тебя помню. Это же тебе зубы багром выбили? Ты ещё потом пьяный в канаве лежал и орал.
      Ответить
    • а чем это отличется от
      var gay = new Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPituh>();
      Ответить
      • Тем, что твой вариант не канает в инициализации полей, свойств и прочей хуеты
        Ответить
        • а, это типа для

          class Petux{
           Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPituh> gay = new()
          }


          А зачем так сложно сделали?
          Почему нельзя было сделать единообразно?

          Вот в кокококотлине синтаксис одинаков
          val petux = ArrayList<Petuh>()
          
          class Petux {
            val petux = ArrayList<Petuh>()
          }
          //но можно и в обратную сторону
          petux: List<Petuh> = ArrayList() //хотя просто () всё же нельзя
          Ответить
          • Ну, в "C#" уже сто лет есть синтаксис new с разными скобочками

            var a = new { pituh = 123; }; // анонимный класс
            var b = new[] { 1, 2, 3 }; // автовывод типа элемента массива
            std::vector<std::map<int, std::string>>::const_iterator c = new(); // новомодная хуета
            Ответить
            • >C#
              >std::vector<std::map<int, std::string>>::const_iterator c = new(); // новомодная хуета

              C##?
              Ответить
            • Кстати, оператор new не нужен. Обезьяны-повторюшки его скопировали из плюсов
              Ответить
              • Кроме new есть еще stackalloc
                int *a = stackalloc int[228];

                С классами не канает
                Ответить
                • обоже, это unsafe?
                  что тут a? указатель на reference type в стеке?
                  Ответить
                  • Ну это не совсем reference type
                    Это массив, настоящие рефтайпы на стеке не разместить
                    И массив из рефтайпов - тоже
                    На стеке можно разместить структуры, не содержащие внутри рефтайпов (и массивов тоже, причем уже из чего угодно), и массивы из них
                    VLA - поддерживается
                    Ответить
                    • а, то-есть на стеке реально лежит 228 интов а "a" на них указывает?
                      но если я обычный массив создаю то он создается на куче, верно?


                      блин, эти жабы и сишарпы и обжси сушат мой мозг.

                      Вот когда я пишу на сишечке я всегда четко понимаю где куча, где стек, где указатель, где сами данные.

                      А в этих управляемых япах нахуивертили
                      Ответить
                      • > а, то-есть на стеке реально лежит 228 интов а "a" на них указывает?
                        > но если я обычный массив создаю то он создается на куче, верно?
                        Да

                        > Вот когда я пишу на сишечке я всегда четко понимаю где куча, где стек, где указатель, где сами данные.
                        А тут чего не понятного? Классы и массивы - в куче, структы - на стеке (инт тоже структ)
                        Разве что с боксингом можно иногда охуеть, но это очень редко
                        От структов можно кстати тоже указатель взять, даже stackalloc писать не надо
                        public struct Pituh { public int x; }
                        
                        var a = new Pituh();
                        var b = (int*) &a;
                        *b = 228;
                        Console.WriteLine(a.x);
                        Ответить
                        • Да, я помню что валуе тайпы на стеке а классы на куче.

                          Но просто в си (не в плюсах!) я всегда понимаю по типу переменной что это: указатель или данные.

                          А в том же C# все выглядит одинаково.
                          Petux p; //что это? указатель на питуха или сам питух?
                          // А зависит от того, является ли питух валуе тайпом


                          Честнее сделано в Objc, там хотябы есть звездочка
                          GKPetux *petooh = [[GKPetuh alloc] init];
                          // видно что питух живет на куче
                          // кто-то может подумать что можно создать питуха на стеке без alloc и без звездочки
                          // но это не работает


                          Самый ужас в том что у структур можно вызвать ``new`` , но это просто вызов конструктора, и вовсе не говорит о том что структуру положат в кучу, верно?
                          Ответить
                          • > вовсе не говорит о том что структуру положат в кучу, верно?
                            Да

                            Ну и алсо структуры в дотнете не так часто употребимы, чтобы беспокоиться об одинаковости
                            Ответить
                            • А если я хочу передать два параметра в метод, то я не должен юзать структуру чтобы не срать в кучу?

                              или это за меня JIT порешает?
                              Ответить
                              • > А если я хочу передать два параметра в метод
                                Делаешь два параметра у метода (???)
                                > не должен юзать структуру чтобы не срать в кучу
                                Структуры не аллоцируются в куче
                                Ответить
                                • ну блин, у меня есть пользователь с логином и ID.
                                  и 44 метода которые его получают

                                  разумеется, я хочу структуру с двумя полями

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

                                      даже блох писал про джаву что лучше все поля сделать final
                                      Ответить
                                      • Лет 15 назад мне пришлось кастрировать нескококолько приложений J2ME, чтобы они запустились на «Нокле» (на «Сименсе» они запускались, а вот с «Ноклой» были проблемы). Как ни странно, помогло добавление атрибута «final» к нескокококольким полям. Это почему-то уменьшило размер и требования к куче.
                                        Ответить
                                    • О, слушай, а меня найти можешь? А то я потерялся, и не знаю где я. Если найдёшь отведи меня по этому адресу: г. Верхнезалупинск ул. Пенина д. 0.217 кв. ⅓√2, у меня такая обоссаная дверь с чиркашами, я тебя со мной там буду ждать, если не найдёшь иди на местную помойку там спросишь у Сёмёна Петровича, он должен знать.
                                      Ответить
                                      • Он заблудится в саду, я сама его найду
                                        Ответить
  • В Java у дженериков type erasure, поэтому Dictionary и Dictionary<K, V> это по сути один и тот же тип. Параметризированные аргументы K и V это сахар времени компиляции и не более.

    Однако в C# такого нет; Dictionary и Dictionary<K, V> могут быть два совершенно разных типа (такое различение присутствует в базовой библиотеке, например IEnumerator и IEnumerator<T>; в рантайме это два типа IEnumerator и IEnumerator`1)

    Поэтому было бы неправильно делать так, как в Java (конструируем тип одного типа и приравниваем к переменной другого типа). Вообще подход в Java странный, можно было бы вместо это ввести var и покрыть куда большее число случаев, чем с этим странным синтаксисом HashMap<>
    Ответить
    • Джависты решили сохранить обратную совместимость, а .NETчики -- нет.
      В итоге дженерики в C# есть в рантайме.

      Забавно что они умеют инстанциироваться в разные классы (как шаблоны в С++), позволяя например иметь настоящий int в Dictionary<int, int>.
      В Java так нельзя.
      Ответить
      • Обратная совместимость-то на месте. Старый же код без проблем работает в новом рантайме. Тут скорее проблема в том, что происходит дублирование кода, т.к. есть два неймспейса: System.Collections (старые коллекции) и System.Collections.Generic (новые коллекции). Но это совсем небольшая цена для всех тех плюшек, которые вводят reified generics: производительность, адекватная поддержка в рефлексии, отсутствие хаков, если хочешь сделать new T[] и т.д.

        Всё равно синтаксис HashMap<> - странное решение. Его явно ввели, чтобы уменьшить копипаст при перечислении параметров, типа:

        было:
        HashMap<String, String> map = new HashMap<String, String>();

        стало:
        HashMap<String, String> map = new HashMap<>();


        Но ведь если бы был введён var, то покрылся бы и следующий случай, который до сих пор приходилось в Java копипастить:

        ObjectBuilderAdapterFactory objectBuilderAdapterFactory = new ObjectBuilderAdapterFactory();


        Похоже, что Oracle одумались и в Java 10 есть-таки var: https://dzone.com/articles/finally-java-10-has-var-to-declare-local-variables

        Не в первый раз замечаю, что история развития Java такая, что сначала пытаются сделать как-то по-странному, а затем в конце концов делают как в C#. Напр., изначально в Java авторы не хотели вводить подобие делегатов как в C#, потому что, дескать, анонимные классы и так хороши; а тут нате лямбды через какое-то время ввели. В итоге язык становится зачастую сложнее C#, хотя хотели наоборот: или приходится пилить странные хаки (чтобы сделать простейшее new T, например), или в языке существует двойственность синтаксиса, т.к. синтаксис версия "по-странному" и есть новый синтаксис "по-нормальному".
        Ответить
        • Код с генериками не работает в .NET 1.0 и 1.1.

          Про var согласен: вывод типов надо было сделать еще 15 лет назад, но в Java принято считать что программисты слишком глупы для такого.
          Ответить
          • Ну это уже не обратная совместимость (что новый фреймворк старые проги умеет), а прямая (что новые проги работают на старом).
            Ответить
          • >Код с генериками не работает в .NET 1.0 и 1.1.
            А зачем вообще лочиться в какую-то старую версию и не апгрейдить её? Как будто сами себе придумали проблему, сами и решили...
            Ответить
            • рискну предположить что на момент завоза генериков в Java на ней уже было миллион строк энтерпрайзкода стоимостью миллиард долларов

              в .net было проще
              Ответить
              • Так эти миллионы строк кода на новых версиях JVM что, не работали? Почему новая версия JVM не может быть надмножеством старой JVM+новые фичи?
                Страх появления новых багов в новых JVM?
                Ответить
                • > страх
                  Ага, энтерпрайз же. У них и операционки по 10 лет только security фиксы получают.
                  Ответить
        • Вся философия джавы строится на изымании из языка полезного функционала потому что он "сложный". Джава это такой С++ для умственно неплоноценных.
          Ответить
          • Потому что энтерпрайзу нужно писать предсказуемую прикладнуху. А не открывать(!) новые возможности хитровыебанных языковых конструкций и ходить по минному полю из UBов.
            Ответить
            • Как-то в C# нету УБ, и в кокотлине нет, а писать полотны тупого бойлерплейта там нужно куда реже
              Ответить
          • >Вся философия джавы строится на изымании из языка полезного функционала потому что он "сложный"

            Но в конечном счёте, из-за переупрощения рантайма, пользоваться Джавой получается сложнее, чем в C#. Пример с new T[], T.class и т.д. в дженериках я приводил (нужно изголяться с рефлексией). В C# It Just Works (tm). Примитивные типы выбиваются из объектной иерархии и являются странным исключением (в C# valuetype - предсказуемая часть языка объектной иерархии), в итоге, например, boxing сделан через костыли со специальными wrapper'ами и т.д. В C# это опять It Just Works. В C# есть unsigned-типы, но никто не заставляет их использовать, поэтому проблем нет. В Java же, если вдруг нужна unsigned-логика, нужно изголяться пилить костыли. Простыни с checked-исключениями и т.д. и т.п.

            Хотели как лучше, а получилось как всегда.
            Ответить
  • asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8