1. PHP / Говнокод #26462

    0

    1. 1
    Именно поэтому я за "РНР".

    Запостил: gostinho, 03 Марта 2020

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

    • А я за "MySQL"
      Ответить
      • гавно
        Ответить
      • Тебе наверное подойдёт вакансия "Пикабу":
        https://pikabu.ru/page/interview/fullstack/img/trucks.png

        Мы ищем full-stack разработчика!

        Привет! Пикабу ищет full-stack разработчика с хорошим опытом работы на нативном php и js.

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

        Мы тебя заинтересовали?) Если так, то переходи на страницу вакансии ;)
        Ответить
        • > нативном php

          Т.е. без этих ваших фреймворков?
          Ответить
          • Именно поэтому
            Ответить
          • да, без орм, без шаблонизатора и прочей чуши
            только
            <b>Ваше имя 
            <?php
            $q = mysql_query("SELECT name from users where id=$id");
            $result mysql_fetch_assoc($q);
            echo $result['name'];
            ?>
            </b>

            только хардкор
            Ответить
        • Кстати, о пикабу
          https://github.com/Blackwave-rt/pikabu/blob/master/pikabu.py

          Кажется что вот так должен выглядеть ад программиста
          Ответить
          • Это парсер пикабу? Как сделать лучше?
            Ответить
          • if params != "":
            if params == "dor":
            return self.dor()
            if params == "rating":
            return self.rating()
            if params == "comments":
            return self.comments()
            if params == "news":
            return self.news()
            if params == "actions":
            return self.actions()
            if params == "awards":
            return self.awards()
            if params == "awards":
            return self.awards()
            if params == "followers":
            return self.followers()
            if params == "messages":
            return self.messages()
            if params == "last_msg":
            return self.last_msg()

            Кокой бедон
            Ответить
        • сейчас бы кассандру через пшп дергать
          Ответить
        • Ye6aHckuu_nemyx
          Ответить
        • > нативный "РНР"
          > нативный "JS"
          > ПиКаБу
          Пиздец, ну и комбо. Ты хочешь, что бы я круглосуточно генерировал собственным пуканом энергию, достаточную для отопления города-милионника?
          Ответить
          • Шар земной, устав вращаться,
            Может вдруг с цепи сорваться
            И ко всем чертям умчаться,
            Превратив живое в тлен.

            Ничему не удивляться,
            Ничему не удивляться
            Никогда не должен
            Истый джентльмен.
            Ответить
            • У меня на ящике (TizenOS) есть такая программа https://ru.spbtv.com/
              Там есть бесплатный канал "ретро".
              24 часа в сутки они крутят примерно три фильма, среди которых:
              * Зеленый фургон
              * Место встречи изменить нельзя
              * Чародеи
              * Д'Артаньян и три мушкетера
              * Трест, который лопнул

              Я эту песню наизусть выучил.

              Вот, полюбуйся
              https://ru.spbtv.com/channels/retro
              Ответить
              • Подвластны магу день и ночь
                И даже ход планет
                И всемогущ ты, чародей,
                И в то же время нет

                Ты можешь свет во тьме зажечь
                И гору разрубить,
                Только сердцу не прикажешь,
                Только сердцу не прикажешь,
                Человеческому сердцу
                Не прикажешь полюбить.
                Ответить
              • Довольно миленькое ретро,
                А это был двадцатый год...
                Ответить
                • Давай теперь про порапорапора

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

                    Загуглил. Довольно интересный связанный список.
                    Ответить
          • Вроде там программировать надо, а не пердеть.
            Ответить
            • >Вроде там программировать надо, а не пердеть.

              Разные задачи требуют разных решений
              Ответить
      • Почему если "PHP", то "MySQL"?
        Ответить
    • гавно
      Ответить
    • такой гет просрали
      Ответить
    • я за
      https://medium.com/@MStrehovsky/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04
      Ответить
      • Какой скилл )))
        Ответить
      • > medium.com
        > байтоебство
        > до-диез с гигабайтным рантаймом
        > self-contained
        Держите кащенита!
        Ответить
      • заебись. CLR пока единственная платформа, на которой можно нормально кроссплатформенные утилитки писать.
        Ответить
        • В «Гитхаб» заглядывал? «Add support for DOS». Этот маньяк прикрутил к программе рантайм и загрузчик другого маньяка ( https://github.com/Baron-von-Riedesel/Dos64-stub ), чтобы игру можно было запустить из голого DOS: загрузчик переводит процессор в «длинный» 64-битный защищённый режим и устанавливает DPMI — переходники между программой защищённого режима и функциями DOS.

          Программа, скомпилированная для CLR, к которой прикручен автономный рантайм, который запускается из 64-битного режима из-под DOS.

          Вполне можно использовать для эмбеддопердолинга.
          Ответить
          • сбылась мечта спольски
            https://www.joelonsoftware.com/2004/01/28/please-sir-may-i-have-a-linker/
            Ответить
            • >> All told, for each computer I needed to run this little .NET application on, I had to download something like 70 or 80 MB (good thing we have a fast net connection) and reboot three or four times.

              Какой багор )))
              Ответить
              • ну тперь уже слава богу дотнет сам устанавливается на все винды через автообновление, правда и весит он в 11 раз больше
                Ответить
            • Из заметки Стреховского: «IL Linker is a tool that shipped with .NET Core 3.0 — the tool removes unused code from your app by scanning the entire program and removing assemblies that are unreferenced. To use it with the project, pass a PublishTrimmed property to publish. Like so: dotnet publish -r win-x64 -c Release /p:PublishTrimmed=true».

              Вышел .Net Framework 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.6, 4.7, потом ещё несколько версий .Net Core и только тогда появился линкер.
              Ответить
        • JVM тоже, хотя CLR безусловно лучше JVMа.
          За одни только struct/value type можно ставить памятник при жизни
          Ответить
          • jvm пока еле-еле умеет в self-contained через native image, в то время как дотнет ведет себя как порядочный гражданин
            Ответить
            • да, clr умеет даже ngen, в целом жаба сосет у clr, я не спорю.
              Но я к тому, что если забить на размер, то jvm тоже весьма кроссплатформенен (даже более чем net, попробуй запусти дотнет под солярку на спарке)
              Ответить
              • это да

                но type erasure это ёбаный блядь антипод «За одни только struct/value type можно ставить памятник при жизни»
                Ответить
                • ты пра жабьи генерики?
                  Да, это один из многих поводов выкинуть жабу на помойку.

                  Отсос работает не только по линии типобезопасности (удачи с реализацией Either c List<String> и List<Integer>), но и по перформансу.

                  Инстанциация генериков в C# работает умно: Petuh<String> под капотом родит тип с ссылкой, а Petuh<int> -- с примитивом (валуе тайпом)
                  В жабе все генерики всегда будут иметь Object (и врапперы для примитивов) , что сильно ебошит перформанс и память.

                  Когда жабоёбы-питушки рассказывают мне, что шаблоны С++ не нужны, и генерики в рантайме не нужены, и что они все задачи решат с помощью жабьих генериков, я всегда смеюсь, и любусь их копипастой или unsafe кастами
                  Ответить
                  • > (удачи с реализацией Either c List<String> и List<Integer>)

                    Моя самая большая претензия ко всей этой хуйне - это не то, что можно кастануть что угодно к чему угодно, а то, что я не могу объявить метод roosterize(List<Integer>) и roosterize(List<String>).
                    Какого хуя я со стороны написания кода должен думать про ограничения рантайма?
                    Ответить
                    • да, перегрузки тоже не будут работать:)

                      Ты можешь написаь

                      rooster(int[])
                      и
                      rooster(String[])

                      но преобразование листа в массив жабе тоже выглядит, как идиотизм

                      foo.toArray(new String[]) //не безопасно
                      Ответить
                  • > копипастой

                    Всего лишь 8 раз (object и все примитивы) написать реализацию какого-нибудь generic контейнера...
                    Ответить
                    • самое смешное в интернете - это защитники го, которые не понимают или делают вид, что не понимают, в чем здесь проблема
                      Ответить
                      • У них поди не 8 раз как в джаве, а вообще под каждый тип?
                        Ответить
                        • Да, но проблемы нет, вы просто не понимаете всю прекрасную простоту языка
                          Ответить
                      • В го просто всё, что можно было прибить гвоздями к полу, прибили. Какие могут быть дженерики в языке, в котором есть стандартный официальный форматтер кода, который пиздячит не покладая рук при каждой компиляции?
                        Ответить
                        • В вижуал барсике форматтер фигачил прямо во время редактирования, как только строчку допишешь.
                          Ответить
                          • В Кубасике так же было.
                            Ответить
                          • Ну вообще смарт инденты есть даже в vim, и во всех IDE тоже есть.
                            Просто в VB он прыгал хуй знает куда, и я часто не понимал, что я и где пишу.

                            В TC и BP не было форматтера (хотя смарт индент и там был вроде), именно потому я за
                            Ответить
                            • > я часто не понимал, что я и где пишу.
                              - именно поэтому я за :D
                              Ответить
                    • >Всего лишь 8 раз
                      да вообще не проблема. В Java обычно чем больше кода -- тем лучше
                      Ответить
                      • Именно поэтому я за паттерн «Машина Голдберга».
                        Ответить
                        • Нет, «Машина Голдберга» это не совсем копипаст.
                          «Машина Голдберга» это когда у тебя есть семь несложных классов, четыре интерфейса и три XMLки для настройки этого дела, и эта система позволяет довольно гибко считать файл с диска и отправить его по почте.
                          Ответить
                          • …и всё это — запакованный в «Docker» + «k8s» микросервис для чтения конфига программы.
                            Ответить
    • я принял решение больше не троллиться
      Ответить
    • https://dev.to/joanllenas/decoding-json-with-typescript-1jjc

      джаваскриптеры переизобрели свою же (!) JSON Schema
      Ответить
      • Сначала веб-долбоёбы обоссали xml/soap/wsdl, где прокси-классы генерировались тулзой, гарантируя типобезопасность, и даже доки в коде, потом мумили 10 лет, и изобрели схему.

        Каждое следующее поколение программистов ходит по кругу.
        Если бы не сраные милениалы, мы бы уже давно на Марсе жили
        Ответить
        • Это вина не только миллениалов, а и тех, кто не смог в их светлые головы вложить, что необязательно всё переделывать с нуля.
          Весь этот снобизм Ъ-программистов, которые "а я же блядь ещё ENIAC застал и перфокартами жопу подтирал", со счетов сбрасывать не стоит.
          Ответить
          • Миллениалы просто не знают, как правильно, и заново открывают колесо.
            Ответить
          • > необязательно всё переделывать с нуля
            Если не переделывать с нуля, питушня обрастает говном и поддержкой обратной питушиности со старым говном.
            Ответить
            • > обратной питушиности

              Её же один хер добавляют в итоге...
              Ответить
    • А я за TCL.
      В TCL можно привязать вызов proc к обращению к любой переменной
      proc fixWorld {var foo bar} { uplevel 1 "set $var TCL" }
      trace variable bestLanguage rw fixWorld
      
      
      set bestLanguage PHP
      puts "The best language is $bestLanguage"
      # The best language is TCL

      Пояснение тут требует разве что процедура uplevel 1, которая позвляет залезть на один уровень выше по стеку вызовов (некоторый аналог nonlocal в питоне).

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

      В каком еще языке так можно сделать?
      Ответить
      • продолжаем течь от TCL

        В TCL можно легко обойтись без ифоф и свичей
        proc add {} {
           #...
        }
        
        set commands {add remove get print}
        set command {}
        while {[lsearch $commands $command] < 0} {
          puts "$commands :"
          gets stdin command
        }
        $command


        Если пользователь введет "add", то выполнится соответствующая процедура. Никакого копипаста, чистая мысль
        Ответить
        • > $command

          это ж пшп какой-то
          Ответить
          • Это шелл скорее. Только в шелле, awk и ТСЛ доллар имеет смысл(так как через него работает интерполяция). В перле он для похожести и для sigil, а в пхп он потому, что PHP делали тупые обезьяны, которые тупо копировали знакомые им конструкции не понимая смысла. Ну то-есть поступали ровно так, как и следует поступать обезьянам
            Ответить
            • Именно поэтому я за «PHP».
              Ответить
            • Зато пельменную можно назвать как угодно. Непонятно только почему начинать с цифры не разрешили.

              И ещё ссылко символическое.
              Ответить
              • А в «PHP» пельменные и константы могут быть названы любыми символами:
                <?php
                ${'^_^'} = 'Именно поэтому я за «PHP»';
                echo ${'^_^'};


                С функциями, правда, хуже.

                Именно поэтому я за «PHP»:
                https://ideone.com/Y9k7sx
                Ответить
        • И что? В "PHP" коллбек это тоже строка с именем функци.

          В остальных языках можно и просто табличку хуйнуть.
          Ответить
          • Здравствуйте, меня зовут Объектив Степанович Си, приятно познакомиться!
            Ответить
            • Да, у Объективного Си можно дернуть метод (заслать мессагу) по имени. Вероятно, и в смаллтоке можно.

              С некоторым выебоном можно во многих скриптушках
              Ответить
            • Здравствуйте, Объектив Степанович Си.
              Посасите.
              Ответить
          • Я не знаю PHP.

            Ну хуйни мне без копипасты названия в C, или в Java.

            Зы: в скрптовых языках можно, кстати, это правда
            Ответить
            • Не пизди, знаешь.
              Ответить
              • пруф?
                Ответить
              • Это слишком серьезное обвинение, чтобы предъявлять его бездоказательно. За такие вещи раньше вызывали на дуэль, да и в наши дни я могу подать на тебя в суд с требованием о защите моей чести и моего достоинства.
                Ответить
                • Пхп только питухи анскильные не знают.
                  Ответить
                  • Парочку незнающих пхп тебе
                    https://en.wikipedia.org/wiki/Donald_Knuth#/media/File:KnuthAtOpenContentAlliance.jpg
                    https://en.wikipedia.org/wiki/Edsger_W._Dijkstra#/media/File:Edsger_Wybe_Dijkstra.jpg
                    Ответить
            • #define CMD(name) {#name, &name}

              Command commands[]= {CMD(add), CMD(remove)};
              Ответить
              • годно. Такую же хуйню на std::map, и вообще будет заебись
                Ответить
          • В «PHP» строка является функцией:
            https://ideone.com/ylQoFp

            <?php
            
            $f = 'htmlspecialchars';
            var_dump($f('<b>Imenno poetomu ya za "PHP".</b>'));
            Ответить
            • А также массив из объекта и строки:
              https://ideone.com/jvgJAy

              <?php
              
              class Pituh {
                  public function kukareku() {
                      echo "cock";
                  }
              }
              
              $f = [new Pituh, "kukareku"];
              $f();
              Ответить
              • Можно ещё статические методы звать массивом из двух строк:
                https://ideone.com/gqBuhE

                <?php
                     
                    class Pituh {
                        public static function kukareku() {
                            echo "cock";
                        }
                    }
                     
                    $f = ["Pituh", "kukareku"];
                    $f();
                Ответить
                • Я за руби. Как идеологическая наследница маленького разговора она имеет метод "public_send(string)" ровно для этово

                  irb(main):029:0> languages = %w(tcl perl lua ruby)
                  => ["tcl", "perl", "lua", "ruby"]
                  irb(main):030:0> command = gets.chop
                  length
                  => "length"
                  irb(main):031:0> languages.public_send(command)
                  => 4
                  Ответить
                  • languages = %w(tcl perl lua ruby)

                    Запахло перловкой.
                    Ответить
                    • да, корни именно оттудова. Зато не надо писать кавычки и запятые.

                      А есть язык, где никогда не надо писать ни кавычки, ни запятые. И вы все знаете этот язык (во всяком случае уже дня два как):)
                      Ответить
                  • В «PHP» можно принять сообщение с произвольным названием, переопределив у объекта метод __call: https://www.php.net/manual/ru/language.oop5.overloading.php#object.cal l

                    Диспетчер для приёма сообщения — чем не маленький разговор?
                    Ответить
                    • Да и в питоне можно, и фоллбек для неизвестных методов можно сделать. И в руби можно. И в груви. И в луа. И в ObjC.

                      Нельзя только там, где функции диспатчатся статически.
                      Ответить
                      • Надо придумать что-нибудь с ковырянием в VMT и в RTTI.
                        Ответить
                        • для крестушков?

                          У жабоёбов и шарпеев есть рефлексия для этово, но она конечно пиздец томрозит.
                          Ответить
                    • Реальный пример:
                      <?php
                           
                              class Pituh {
                                  public function __callStatic($method, $args) {
                                      echo "Called $method with: " . implode(', ', $args);
                                  }
                              }
                           
                              $f = ["Pituh", "kud-kudah"];
                              $f("koko", "kukareku");


                      https://ideone.com/yYHRlq
                      Ответить
                      • в бидоне тоже так можно, Вообще пример на том же тисиэле в бидоне выглядит куда более менее говёно
                        import sys
                        
                        
                        class Spam:
                            def ham(self):
                                print('svinosobaka')
                        
                            def chicken(self):
                                print('petuh')
                        
                        
                        spam = Spam()
                        commands = {method for method in dir(spam) if callable(getattr(spam, method)) and not method.startswith('_')}
                        command_names = ', '.join(commands)
                        
                        while True:
                            print(f"{command_names} or quit : ", end='')
                            command = sys.stdin.readline().strip()
                            if command == 'quit':
                                break
                            if command in commands:
                                getattr(spam, command)()
                            else:
                                print('No such command')
                        Ответить
                      • Красивее всего сделано у руби, там наследние смолллтока наиболее сильно выражено:
                        class Foo
                        	def do_all
                        		'petuz'
                        	end
                        
                        	def method_missing(method, *args, &block)
                        		"There is no #{method}, dude"
                        	end
                        end
                        
                        foo = Foo.new
                        
                        puts foo.do_all #petuz
                        puts foo.sorok_tysach_abizjan #There is no me...
                        
                        puts foo.send 'do_all' #petuz


                        По идее я должен покзать тоже самое и для обжси (там вызов метода тоже суть send под капотом), но под рукой нет ябля
                        Ответить
                        • будем честны, у луа соснули все
                          local obj = {
                          	foo = function() return "foo" end,
                          	bar = function() return "bar" end
                          }
                          
                          while true do
                          	for k,_ in pairs(obj) do
                          		io.write(k.." ")	
                          	end
                          	local command = io.read("*line")
                          	if command == "quit" then 
                          		break
                          	end
                          	local fun = obj[command]
                          	if not fun then
                          		print("No such command")
                          	else
                          		print(fun())
                          	end
                          end
                          Ответить
                          • кто-то мог и у перла соснуть
                            #!/usr/bin/perl -w
                            use strict;
                            use v5.22;
                            
                            my %obj = (
                            	'foo' => sub {'foo'},
                            	'bar' => sub {2 + 2}
                            );
                            
                            say join ', ', keys %obj;
                            while (<>) {
                            	chomp;
                            	my $command = $_;
                            	last if ($command eq 'quit');
                            	if (exists $obj{$_}) {
                            		say  $obj{$_}();
                            	} else {
                            		say "No such command";
                            	}
                            }
                            Ответить
    • Именно поэтому я за ванильный JAVASCRIPT
      Ответить
      • s/ванильный/анальный/

        fixed
        Ответить
      • насколько ж блядь были душными эти шутки про "я пишу на фреймворке vanilla js"
        прямо хуевый эталон на стыке доменного и напыщенного юморов
        как хорошо, что эти времена закончились
        Ответить
    • Давайте обсирать и течь от API.

      Какие апишки вы считаете полным говном, а какие охуенными?
      Ответить
      • Язык или фреймворк важны, или можно про что угодно?
        Ответить
        • Что угодно
          Ответить
          • Имхо, все обосрались с работой с датами.
            Java: https://stackoverflow.com/questions/1969442/whats-wrong-with-java-date-time-api
            (забавно, что попытались починить через Calendar и снова обосрались)
            [quote]
            Ah, the Java Date class. Perhaps one of the best examples of how not to do something in any language, anywhere. Where do I begin?
            [/quote]

            Питон:
            [quote]
            Dealing with aware datetime objects isn’t always intuitive. For instance, the tzinfo argument of the standard datetime constructor doesn’t work reliably for time zones with DST. Using UTC is generally safe; if you’re using other time zones, you should review the pytz documentation carefully.
            [/quote]
            https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/

            Ну и конечно Cocoa, раз уж мы с тобой говорим. Процитирую нсхипстера
            [quote]
            It’s unfortunate that the Foundation type representing time is named Date. Colloquially, one typically distinguishes “dates” from “times” by saying that the former has to do with calendar days and the latter has more to do with the time of day. But Date is entirely orthogonal from calendars, and contrary to its name represents an absolute point in time.

            Why NSDate and not NSTime? Our guess is that the originators of this API wanted to match its counterpart in java.util.date when eof targeted both Java and Objective-C. (лолшто??)

            Another source of confusion for Date is that, despite representing an absolute point in time, it’s defined by a time interval since a reference date
            [/quote]
            https://nshipster.com/timeinterval-date-dateinterval/
            Ответить
            • EOF эта та херота же, из которой выросла CoreData.

              Удивительно встретить статью на нсхипстере, которая не лижет анус ябблу.

              Да, с датами проблема, но nobody cares. Везде пишут свои эффективные замены реализациям из стандартных библиотек. В Racket'е, например, если я не путаю, стандартом для дат фактически является Gregor
              Ответить
              • В жабе эффективные программисты заменяют дату на long. Это такое signed (в жабе всё signed) воcьмибайтное число, и хранят в нем кол-во секунд с 1 Января 1970 UTC
                Ответить
                • Молодцы, эти жители плоской Земли!
                  Ответить
                • Какое время они хранят: монотонное, координированное, некоординированное, солнечное, земное динамическое, эфемеридное?
                  Ответить
                  • Время по Москве:) как выражаются питонисты -- наивное время
                    Ответить
      • Неплохая апишка модуль requests у питона

        data = {"a": 1, "b": 2}
        requests.post("http://mock.kite.com/submitform", data)


        Сравним с жабоё
        CloseableHttpClient client = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost("http://www.example.com");
         
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("a", "1"));
            params.add(new BasicNameValuePair("b", "2"));
            httpPost.setEntity(new UrlEncodedFormEntity(params));
         
            CloseableHttpResponse response = client.execute(httpPost);


        А с NSURLSession даже и сравнивать не буду (правда, у меня сведения 2015 года)
        Ответить
        • В жабе нет нормальной инициализации, что ли? Вот то же самое на жабоклоне «C#»:
          using var client = new HttpClient(); //но вообще лучше использовать всегда один и тот же инстанс вместо того, чтобы диспозить и пересоздавать
          var content = new Dictionary<string, string> {{"a", "1"}, {"b", "2"}};
          var response = await client.PostAsync("http://www.example.com", new FormUrlEncodedContent(content));
          Ответить
          • нет, в джаве нету инициализаторов ни у чего, кроме массивов. И вывода типа тоже нету.

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

            C# много удобрее джавы, чего уж тут говорить...

            ps: представь себе джависта, которому году в 2008-м показали груви, где можно вот так собрать мапу (это как твой дикт)
            def map = ["name": "petuh", "iq": 1]

            Кажется, у него должен был бы случиться оргазм
            Ответить
            • есть double brace initialization. но да, она идет вкупе со всем говном типа анонимного класса.
              Ответить
            • Груви и джаву яву я практически не знаю, но вот котлин как-то немного потрогал, и он мне зашел прямо весьма (писать на нем я, конечно, не буду). Это же как допиленный сисярпик, плюс еще смарт-касты, дата классы, годные наллаблы для референс-тайпов, паттерн-матчинг...
              Ответить
              • Да, котлин очень хорошо, особенно по сранвнению с обычной джавой.
                Ответить
            • >представь себе джависта, которому году в 2008-м показали груви, где можно вот так собрать мапу (это как твой дикт)

              Да знали жависты в 2009 про груви. Только он тупил страшно, как питон.

              >def map = ["name": "petuh", "iq": 1]
              У всех хелперы были на вараргах.

              А в 2010 гуава появилась.
              ImmutableMap.of("name", "petuh", "iq", 1)
              Ответить
              • >гуава
                написали же сверхзу, что у гуавы есть некоторое подобие инициализаторов, но они конечно не такие удобные, как в тех языках, где они часть синтаксиса
                Ответить
            • >нет, в джаве нету инициализаторов ни у чего, кроме массивов.
              >И вывода типа тоже нету.
              ЛОЛШТО?
              var x = Map.of("name", "petuh", "iq", 1);
              System.out.println(x);

              https://ideone.com/6KSStc
              Ну серьезно, не позорились бы своей анскильностью.
              Ответить
              • в какой версии появилось то? в 11-й?
                Ответить
              • Всё таки инициализатор это конструкция языка, например

                {"foo":12}
                или
                {foo=12}

                а функция с вараргом это костыль
                Ответить
              • _место_для_шутки_про_шаблоны

                Main.java:12: error: no suitable method found for of(String,String,String)
                		var x=Map.of("name", "petuh", "iq");
                		         ^
                    method Map.<K#1,V#1>of() is not applicable
                      (cannot infer type-variable(s) K#1,V#1
                        (actual and formal argument lists differ in length))
                    method Map.<K#2,V#2>of(K#2,V#2) is not applicable
                      (cannot infer type-variable(s) K#2,V#2
                        (actual and formal argument lists differ in length))
                    method Map.<K#3,V#3>of(K#3,V#3,K#3,V#3) is not applicable
                      (cannot infer type-variable(s) K#3,V#3
                        (actual and formal argument lists differ in length))
                    method Map.<K#4,V#4>of(K#4,V#4,K#4,V#4,K#4,V#4) is not applicable
                      (cannot infer type-variable(s) K#4,V#4
                        (actual and formal argument lists differ in length))
                    method Map.<K#5,V#5>of(K#5,V#5,K#5,V#5,K#5,V#5,K#5,V#5) is not applicable
                      (cannot infer type-variable(s) K#5,V#5
                        (actual and formal argument lists differ in length))
                    method Map.<K#6,V#6>of(K#6,V#6,K#6,V#6,K#6,V#6,K#6,V#6,K#6,V#6) is not applicable
                      (cannot infer type-variable(s) K#6,V#6
                        (actual and formal argument lists differ in length))
                    method Map.
                Ответить
          • C#
            >var content = new Dictionary<string, string> {{"a", "1"}, {"b", "2"}};
            А что в шарпик автовывод типов до сих пор не завезли?

            Java
            >var x = Map.of("a", "1", "b", "2");
            Ответить
            • >var x = Map.of("a", "1", "b", "2");
              лолшто, это какая джава? 11-я?
              Ответить
            • > Map.of
              > автовывод типов
              Ты вот сейчас серьезно? Я на жабе ни строчки не написал за всю жизнь, но Map.of сейчас посмотрел в доках (https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#of--). Это же просто лол. Наебашена куча методов для разного количества элементов, при этом максимальное количество — 10. Ява такая ява. Я тебе такое же и на до-диезе могу сделать:
              Метод
              Dictionary<K, V> Mapof<K, V>(K k1, V v1, K k2, V v2) => new Dictionary<K, V> {{k1, v1}, {k2, v2}};

              Использование
              var map = Mapof("a", 1, "b", 2);

              Но нахуя, если есть и так нормальная инициализация?
              Ответить
              • >Но нахуя, если есть и так нормальная инициализация?

                Пока анскилябры завозят в язык тонны синтаксическего сахарка, люди всё делают средствами языка.

                >Наебашена куча методов для разного количества элементов
                Это оптимизация для небольших мап. Для больших есть варарг.

                >Dictionary<K, V> Mapof<K, V>(K k1, V v1, K k2, V v2) => new Dictionary<K, V> {{k1, v1}, {k2, v2}};

                Ещё с 7ой части ява умеет выводить типы на конструкторах. Называется diamond: new HashMap<>()
                А на методах, так и вовсе с 5ой
                Ответить
                • >. Для больших есть варарг.
                  что будет, если я передам туда нечетное число аргов?

                  оптимизации и в дотнете есть, см сигнатуру Console.Write, чтобы не плодить массивы для варарга там есть методы (String), (String, String) итд

                  Итого:
                  * вывод типов есть, и тут я должен попросить прощения у джавы
                  * инициалзаторов все равно нет, так что кал
                  Ответить
              • Блядь, почему в большинстве языков со статической питузацией такой пиздец со словарями? То автовывод проёбывается, то нормального списка инициализации нет, то ещё какая-то хуйня, причём большинство попыток починить ситуацию происходят только лет через двадцать после создания языка.

                То ли дело «Python»:
                d = {
                    'a': 1,
                    'b': 2
                }
                Ответить
                • Именно поэтому я за «PHP».
                  Ответить
                • потому что в языках не было встроенного типа для словаря
                  Ответить
            • в котлине красивше
              val map = mapOf("petuh" to "ko", "iq" to 12)
              println(map.keys)
              Ответить
              • В «Delphi» и в «FPC» можно создавать на лету одномерные полиморфные массивы, но только при вызове функции:
                {$MODE DELPHI}
                procedure KOKO(petuhi: array of const);
                var
                  petuh: TVarRec;
                begin
                  for petuh in petuhi do
                    begin
                      case petuh.VType of
                      vtInteger: Writeln('Целый петух: ', petuh.VInteger);
                      vtExtended: Writeln('Плавающий петух: ', petuh.VExtended^);
                      vtAnsiString: Writeln('Петух в стрингах: ', AnsiString(petuh.VAnsiString));
                      else
                        Writeln('Петух типа ', petuh.VType);
                      end;
                    end;
                end;
                 
                begin
                  KOKO(['petuh', 12])
                end.


                https://ideone.com/ZDm5TT

                Двумерные массивы таким путём не создашь.
                Ответить
              • Можно ещё так:
                {$MODE DELPHI}
                procedure KOKO(petuhi: array of Variant);
                var
                  i: integer;
                  key, value: Variant;
                begin
                  i := Low(petuhi);
                  
                  while(i < High(petuhi)) do
                    begin
                      key := petuhi[i];
                      value := petuhi[i + 1];
                      Writeln('Ключ = ', key, ', значение = ', value);
                      Inc(i, 2)
                    end;
                end;
                
                begin
                  KOKO(['petuh', 'Петя', 'iq', 12])
                end.


                https://ideone.com/uWZCf5
                Ответить
        • У NSURLSession удобные dataTask'и и всякое такое.
          Ответить
        • >CloseableHttpClient client = HttpClients.createDefault()
          Какой анскилл )))

          Это же не ява, а third-party питушня. А именно древняя апачевская либа.

          https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/CloseableHttpClient.html
          Ответить
          • А где же красивое яварешение?
            Ответить
            • В гугле забанили?

              HttpClient.newHttpClient().send(
                   HttpRequest.newBuilder()
                             .uri(URI.create("http://www.example.com"))
                             .headers("name", "petuh", "iq", 1)
                             .POST(BodyPublishers.ofString("koko"))
                             .build();
              );

              https://docs.oracle.com/javase/10/docs/api/jdk/incubator/http/HttpRequest.html
              Ответить
              • не сильно-то лучше, особенно в сравнении с requests
                Ответить
                • В реальном коде это говно будет выглядеть примерно одинаково:
                  response = requests.post(
                      'http://www.example.com',
                       data={'name': 'pythuh'},
                       headers={'Accept': 'application/json'},
                       auth=HTTPBasicAuth('koko', ...)
                  )

                  Если форматировать нормально, а не в 1 строку
                  Там и заголовки, и авторизация, и таймауты.
                  Ответить
      • Как-то я думал: как сделать хороший API, в котором удобно ориентироваться, и понял:

        Во-первых не любой код надо делать API: сделать API во много раз сложнее, чем просто написать код. Так что десять раз подумайте: а нужно ли делать API.

        Во-вторых каждый API должен иметь страницу, на которой должно быть:в
        * Название API, и опсиание решаемых им задач
        * Опсиание используемых им концепций (человекочитаемое введение)
        * Примеры использования
        * Референс по сущностям
        * В случае сложных апи -- туториал
        * Ссылки на другие API, которые нужно изучить прежде, чем браться за этот (бывает так, что один апи зависит от другого).

        Если у вас будет каталог таких апи -- то вы будете очень крутыми. К сожалению, большинство кодовых баз таких апи не имеют
        Ответить
        • Проблема в том, что построению API не учат на профильных специальностях в вузах. А это ничуть не менее важно, чем какие-нибудь численные методы.
          Ответить

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