"PHP" / Говнокод #26462 Ссылка на оригинал

0

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

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

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

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

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

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

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

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

          только хардкор
          Ответить
          • сделать нормальный API на JSON или XML?
            Ответить
        • 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()

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

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

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

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

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

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

            Разные задачи требуют разных решений
            Ответить
        • Привет!

          У нас есть для тебя вакансия -- вести раздел "PHP" на Пикабу
          Ответить
    • > medium.com
      > байтоебство
      > до-диез с гигабайтным рантаймом
      > self-contained
      Держите кащенита!
      Ответить
    • заебись. CLR пока единственная платформа, на которой можно нормально кроссплатформенные утилитки писать.
      Ответить
      • В «Гитхаб» заглядывал? «Add support for DOS». Этот маньяк прикрутил к программе рантайм и загрузчик другого маньяка ( https://github.com/Baron-von-Riedesel/Dos64-stub ), чтобы игру можно было запустить из голого DOS: загрузчик переводит процессор в «длинный» 64-битный защищённый режим и устанавливает DPMI — переходники между программой защищённого режима и функциями DOS.

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

        Вполне можно использовать для эмбеддопердолинга.
        Ответить
          • >> 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 не было форматтера (хотя смарт индент и там был вроде), именно потому я за
                          Ответить
                          • > я часто не понимал, что я и где пишу.
                            - именно поэтому я за 😀
                            Ответить
                    • в го сть уже генерики

                      func foo[T int8 | int64 | float64 | int](a T, b T) T {
                      	return a + b
                      }
                      
                      func main() {
                      	fmt.Println(foo(1, 1))
                      }
                      Ответить
                  • >Всего лишь 8 раз
                    да вообще не проблема. В Java обычно чем больше кода -- тем лучше
                    Ответить
                      • Нет, «Машина Голдберга» это не совсем копипаст.
                        «Машина Голдберга» это когда у тебя есть семь несложных классов, четыре интерфейса и три XMLки для настройки этого дела, и эта система позволяет довольно гибко считать файл с диска и отправить его по почте.
                        Ответить
                        • …и всё это — запакованный в «Docker» + «k8s» микросервис для чтения конфига программы.
                          Ответить
  • я принял решение больше не троллиться
    Ответить
    • Сначала веб-долбоёбы обоссали 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", то выполнится соответствующая процедура. Никакого копипаста, чистая мысль
      Ответить
        • Это шелл скорее. Только в шелле, awk и ТСЛ доллар имеет смысл(так как через него работает интерполяция). В перле он для похожести и для sigil, а в пхп он потому, что PHP делали тупые обезьяны, которые тупо копировали знакомые им конструкции не понимая смысла. Ну то-есть поступали ровно так, как и следует поступать обезьянам
          Ответить
          • Зато пельменную можно назвать как угодно. Непонятно только почему начинать с цифры не разрешили.

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


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

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

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

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

          Зы: в скрптовых языках можно, кстати, это правда
          Ответить
            • Можно ещё статические методы звать массивом из двух строк:
              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
                Ответить
                  • да, корни именно оттудова. Зато не надо писать кавычки и запятые.

                    А есть язык, где никогда не надо писать ни кавычки, ни запятые. И вы все знаете этот язык (во всяком случае уже дня два как):)
                    Ответить
                  • Да и в питоне можно, и фоллбек для неизвестных методов можно сделать. И в руби можно. И в груви. И в луа. И в ObjC.

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

                        У жабоёбов и шарпеев есть рефлексия для этово, но она конечно пиздец томрозит.
                        Ответить
                  • Реальный пример:
                    <?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";
                          	}
                          }
                          Ответить
    • насколько ж блядь были душными эти шутки про "я пишу на фреймворке 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
              }
              Ответить
              • потому что в языках не было встроенного типа для словаря
                Ответить
          • в котлине красивше
            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
              Ответить
            • в го тоже есть литералы
              func main() {
              	languages := map[string]string{
              		"PHP": "kal",
              		"go":  "tozhe kal",
              	}
              	for key, value := range languages {
              		fmt.Printf("%s is %s\n", key, value)
              	}
              }



              Но вообще это все было в перле когда вы еще не родились
              my %hash = ("perl" => "rules");
              for my $lang (keys %hash) {
                  printf "$lang $hash{$lang}\n";
              }
              Ответить
        • А где же красивое яварешение?
          Ответить
            • не сильно-то лучше, особенно в сравнении с requests
              Ответить
              • В реальном коде это говно будет выглядеть примерно одинаково:
                response = requests.post(
                    'http://www.example.com&#039;,
                     data={'name': 'pythuh'},
                     headers={'Accept': 'application/json'},
                     auth=HTTPBasicAuth('koko', ...)
                )

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

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

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

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

                С другой стороны, зная ТОЛЬКО числовые методы можно сидеть в институте и делать непонятную никому хрень с непонятным интерфейсом про которую никто не знает и ничего не поймет при всем желании.

                В программировании есть элемент ремесла, и он тоже важен.
                Леонардо Давинчи не только вдохновление имел, но и знал как краски разводить
                Ответить
                • я сейчас сижу в убере и слушаю 6-часовые споры старперов про апи

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

                      Численные методы, исследования операций, матстат должны открывать возможности круче чем крудошлепа

                      Иначе я расстроюсь
                      Ответить
                      • чот сомневаюсь, что там что-то интересное. 99% всё равно делается по справочнику.

                        но ты в общем можешь освежить знания и попробовать устроиться в какую-нибудь контору, которая занимается разработкой ПО для CFD, потом расскажешь, расстроился или нет
                        Ответить
                        • А в сравочнике оно по-твоему откуда? Там матстат доходящий до intermediate уровня и ряды начального.
                          Ответить
  • можно ли реализоать полимофризм без указателей?
    Ответить
  • Го конечно смешной: ты ничего не должен знать про память, но на самом должен все про нее понимать.

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

    А если таких методов нет, то можно передать как указатель, так и само значение.

    На вопрос "должен ли приемник в методе принимать указатель или значение?" гофер отвечает: "нуу, если семантика у тебя value, то передавай значение, а если нет -- указатель, но это зависит".

    Мутный язык как йогурт
    type dier interface {
    	spreken()
    }
    
    type kat struct {
    }
    
    type hond struct {
    }
    
    func (k kat) spreken() {
    	println("meuw")
    }
    
    func (h hond) spreken() { //если тут написать *hond, то вместо foo(zhuchka) придется писать foo(&zhuchka)
    	println("gav")
    }
    
    func foo(foo dier) {
    	foo.spreken()
    }
    func main() {
    	murka := kat{}
    	zhuchka := hond{}
    	foo(murka)
    	foo(zhuchka)
    }
    Ответить
    • Причем если в C++ есть референсы, и можно просто заказать их в сигнатуре, а клмиент может даже не понимать, что он там передает (по значению або по референсу) то тут так нельзя кроме интерфейсов (в обычной функции что написано -- то и надо передавать)

      и конечно никаких тебе const вообще впринципе: либо экспортируй интерфейс (как в яже) либо все мутабельно. Слава Аллаху хотя бы интерфейс не надо явно реализовывать, бо тупизация структурная, как в typescript. Не надо как в яжа/шарп выстраивать лесенки иерархий
      Ответить

Добавить комментарий для KpunoBblu_nemyx Отменить ответ

Из-за тебя ушел bormand, guest!

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


    8