САМЫЙ УЖАСНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ. Или нет?

Поділитися
Вставка
  • Опубліковано 26 кві 2024
  • Телеграм - t.me/johenews
    Телеграм с покупками - t.me/aliexpressgeeks
    Канал с клавиатурами - t.me/ergosplits
  • Наука та технологія

КОМЕНТАРІ • 95

  • @youtubeuser4684
    @youtubeuser4684 Місяць тому +23

    Это лучшая реклама, которую я видел! 🎉 Просто пушка

  • @user-jp2zc3lo9o
    @user-jp2zc3lo9o Місяць тому +6

    Если нужно объяснять, почему шутка смешная, то шутка не удалась. Если 28 минут нужно объснять логику работы примитивных выражений ЯП из одного мемеса, то явно есть где то проблема. Никто не сомневается в том, что JS работает ровно так, как описано в документации к JS. Факт в том, что его синтаксис больше контринтуитивен, нежели чем-то полезен, и при разработке новых ЯП таких "нюансов" явно следует сторониться

    • @alurma
      @alurma 20 днів тому

      Синтаксис ещё более-менее, а вот семантика местами адская.

  • @chokayes7830
    @chokayes7830 Місяць тому +11

    "скриншоты курсов, только от более умных людей" )) Стандарт IEEE 754 для арифметики чисел с плавающей запятой или точкой? ))) никто не отменял.

  • @denhax
    @denhax Місяць тому +7

    не осуждайте блогера за рекламу, кому сейчас легко живется....

  • @sermoz2362
    @sermoz2362 Місяць тому +3

    Вывод: Учите ассемблер проблем не будет, а остальное от Лукавого.

  • @post_post_meta_meta
    @post_post_meta_meta Місяць тому +2

    несправедливо мало подписчиков у такого качественного контента

  • @user-yf3ec9ml1j
    @user-yf3ec9ml1j Місяць тому +7

    Про вим оч смешно конечно

  • @dimaacustic
    @dimaacustic Місяць тому +1

    Конечно, без явного указания типа для 0.3 код будет не корректен, скорее всего.
    (0.3).toFloat, например, для Scala3 работает верно.

  • @kirill7494
    @kirill7494 Місяць тому +4

    ох уж этот автокомплит

  • @alurma
    @alurma Місяць тому

    В некоторых языках (Lua, Haskell) отдельный оператор («..», например) для конкатенации, чтобы проблем с 90 + '1' не было

    • @vadimgoncharov7466
      @vadimgoncharov7466 Місяць тому

      А в Perl кроме "." для конкатенации и тип определяется операцией, ">" сравнит как числа, "gt" как строки, вот динамическая типизация, сделанная правильно.

  • @mcblack2010
    @mcblack2010 Місяць тому

    Оффтоп. Веселая у тебя оправа! Смотрится стильно! :) Видео тоже классное! После ассемблера ничего не кажется странным, в основном всё объяснимо. Типы данных - абстракция для людей, машинам они не нужны особо.

  • @user-le7cf1qk8l
    @user-le7cf1qk8l Місяць тому +3

    typeof null === «object» - признанная ошибка

  • @linuxforbeginners5121
    @linuxforbeginners5121 Місяць тому +1

    У всех языков программирования есть косяки и их решения. Причина всего этого, что есть недочёты это недочёты любой аппаратной системы. Каламбур не правда ли?
    По этой причине невозможно создать идеальный язык программировани так как всегда приходиться чем-то жертвовать.
    Тяжело спорить что хуже а что лучше так как каждая задача решается лучше (иногда просто быстрее) на чём-то одном, ну и так далее. По этой причине создано так много всякого рода языков программирования.

  • @proletarian
    @proletarian Місяць тому

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

  • @yexela
    @yexela Місяць тому +2

    Как страшно жить

  • @alurma
    @alurma Місяць тому +2

    «0.(9)» и «1» это два способа записать одно и то же число

    • @johenews21
      @johenews21  Місяць тому

      Конечно же нет. 0.(9) не равно 1

    • @alurma
      @alurma Місяць тому +1

      В русской и английской версиях википедии есть статьи про «0.(9)». Там приводятся доказательства того, что 0.(9) это другая запись для числа 1.
      Предлагаю вам ознакомиться :)

    • @johenews21
      @johenews21  Місяць тому +1

      Ознакомился. Вы действительно правы.

  • @user-dn6te8fi2q
    @user-dn6te8fi2q Місяць тому +1

    Реклама зачетная!😂😂

  • @user-ih7gr6rg5d
    @user-ih7gr6rg5d Місяць тому

    с рекламы орнулось нормально)) собрание скриншотов...))

  • @zeroanyway
    @zeroanyway Місяць тому +1

    Смысл столько времени тратить на плавающую точку и вообще про работу флоатов? Это очевидно как бы.
    Вот неявное преобразование типов как раз таки зло. попробуй поскладывать Bool в haskell, или неявно прийти из 999999999999 к BigInt в java,которое почему-то на единицу больше, что вообще не норма ни в каком виде.
    Ну или сравнивать несравнимое(0 и [], например), нормальные языки с четкой семантикой не должны позволять такое делать.

    • @alurma
      @alurma 20 днів тому

      Не думаю, что IEEE 754 очевидно.

  • @terpiIa
    @terpiIa Місяць тому +3

    В python None является типом NoneType, а не float

    • @johenews21
      @johenews21  Місяць тому +2

      Ты такой внимательный

    • @johenews21
      @johenews21  Місяць тому +9

      То, что речь не про None, а про NaN

    • @lizenox
      @lizenox Місяць тому

      @@johenews21 В python есть NaN?)

    • @johenews21
      @johenews21  Місяць тому

      есть

    • @lizenox
      @lizenox Місяць тому

      @@johenews21 Действительно, не знал :о

  • @AKhristenko
    @AKhristenko Місяць тому +3

    Это к с++ то никаких претензий? Смешная шутка.
    js считают ужасным языком зе на их арифметкиу с флоатами, которая такая-же как у других языков
    а за динамический this, с которым легко написать код который упадет в рантайме
    за единый оператор конкатенации и сложения, который приводит к тому что 10+'1' становится '101', что опять же при отсутствии проверки типов приводит к ошибкам(а в других языках, даже с приведением типов обычно делают 2 разных оператора и таких проблем просто нет)
    за одновременно существующие undefined и null
    за очень куцую стандартную библиотеку
    за node_modules, огромных размеров, и длительное развертывание/сборку
    за несколько систем модульности, бандлеров

    • @johenews21
      @johenews21  Місяць тому

      Подожди, но this вообще можно не использовать, если он тебе не нравится, ну либо следить за контекстом
      единый оператор конкатенации это вроде тоже не проблема, ты ж должен следить за типами, ну или использовать typescript
      Не понял в чем проблема с undefined и null
      Раздутый node_modules это вообще не про js, а про реализацию npm
      Про несколько синтаксисов систем модулей я соглашусь, но тут же не в языке дело, а в том, что нода ушла в CommonJS. Язык ведь не несет ответственности за то, что кто-то может придти со своим видением.

    • @AKhristenko
      @AKhristenko Місяць тому +4

      @@johenews21"следить на контекстом", "следить за типами", когда в других языках это не нужно. т.е. просто на пустом месте появляетс больше мест, где можно ошибится, при этом не получая от этого никакого профита.
      Про npm, рассматривать язык без экоситстемы тож как-то неправильно, т.к. ты его в отрыве использовать и не будешь.
      Вообще основаня проблема - язык был рожден довольно быстро, с довольно сомнительными решениями, т.к. из задач было просто добавить совсем чуть-чуть интерактивности. А потом, т.к. только он релизован во всех браузерах стал безальтернативным и на нем начали писать сложные приложения.

    • @johenews21
      @johenews21  Місяць тому

      "следить на контекстом", "следить за типами", когда в других языках это не нужно. Ну по факту и в других языках точно так же следишь за типами, только тебе их надо всегда самому определять. И даже если ты их определяешь, то тебе все равно нужно с ними париться. Например в том же го, ты не можешь сложить два числа с разными типами, тебе надо сначала свести их к одному. Так что в любых языках ты будешь с этим париться.
      Про npm, рассматривать язык без экоситстемы тож как-то неправильно. Правильно. JS существовал до npm десяток лет. Да и сейчас есть куча библиотек на js и ты их можешь юзать без npm. Ну и опять же, ну ок, у тебя дохуя всего в node_modules. Ну и что? У нас что какая-то серьезная проблема с памятью, что мы не можем позволить себе захламить там все?

    • @AKhristenko
      @AKhristenko Місяць тому +1

      @@johenews21 Ладно, приведу пару реальных примеров на счет "следить за типами".
      Предположим мы написали скрипт, кторый делает какие-то расчеты и результат выводит пользователю.
      И где-то внутри у нас есть конструкция c = (a + b) * 3, с дальнейшим выводом c. a и b числа.
      После этого нам понадобилось чуть отрефакторить, например вместо константы в качестве b брать значение из файла/инпута.
      И мы сделали ошибку и забыли преобразовать эту строку в число. Как в итоге поведут себя программы:
      1) на языке со статической проверкой типов - мы получаем ошибку компиляции, исправляем, получаем рабочую программу
      2) на языке с динамиечской проверкой типов но без приведения типов - мы получаем ошибку в рантайме, исправляем, получаем рабочую программу
      3) на языке с динамической проверкой типов но разными операторами для сложения и контатенации - происходит сложение, мы получем рабочую программу с корректным реузльататом сразу.
      4) в JS - мы получаем РАБОЧУЮ программу которая выдает НЕКОРРЕКТРЫЙ результат.
      Т.е. конкретно в этом случае получается что в других языках мы можем особо не смотреть за типами, т.к. расхождение типов нам будет неважно, либо язык нам про это расхождение скажет(ко время компиляции или в рантайме)
      И только в js нам самим приходится сидеть и очень внимательно думать, как наши доработки/рефакторинг могут выстрелить.
      В итоге, имея один оператор для сложения/конкатенации мы получаем кучу головняка при этом не получая каких-то дополнительных профитов.
      Точно так-же с умножением где-то вместо числа получили строку от пользователя. 10 * '1,3' превратилось NaN и соответственно все остальные выражения, которые это использовали тоже стали NaN.
      И сиди ищи, где-же это выстрелило. Когда в других языках будет ошибка в месте, где проходит умножение на строку.

    • @johenews21
      @johenews21  Місяць тому +1

      Есть такой термин "Garbage in - garbage out"
      Как вы уже сказали, если вы подадите мусор на вход, то в любом языке у вас будут какого-либо рода проблемы
      Кстати, для решения таких во тпроблем программисты и пишут юнит тесты

  • @alurma
    @alurma Місяць тому

    В некоторых языках (Python) «арифметические» операторы над не численными типами кидают ошибку, а не выдают чепуху

    • @johenews21
      @johenews21  Місяць тому

      ну так и js не выдает чепухи

    • @alurma
      @alurma Місяць тому +1

      Ваша мысль понятна. Я не думаю, что любое поведение языка является оправданным, даже если язык себя ведёт каким-то образом в соответствии со спецификацией. Я думаю, что динамические языки, которые по умолчанию кидают ошибки при попытке сложить объекты (Lua, Python), в данном случае более интуитивны для пользователей. Из этого не следует, что те языки лучше. Я комментирую конкретную особенность

    • @AKhristenko
      @AKhristenko Місяць тому

      @@johenews21 (1+'10')*2 в питоне приведет к ошибке, в lua привете к результату 22, в js приведет к результату 220.

  • @user-jv5kq1xm4x
    @user-jv5kq1xm4x Місяць тому +1

    Крутая футболка!!!

  • @proletarian
    @proletarian Місяць тому

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

  • @doomer949
    @doomer949 Місяць тому +2

    Мемы это мемы, воспринимать их серьезно это странно. Тк js сейчас в тренде по этому и мемов много про него. Раньше про php такое было, питон вообще питухоном называют и тд

    • @alurma
      @alurma Місяць тому

      Нет, любой мем можно подвергать критике, это нормально

  • @WaldemarB-wj1nq
    @WaldemarB-wj1nq Місяць тому +1

    0.1 + 0.2 ==0.3 ради прикола проверил в Python, консоль выдала false.

  • @user-yb7tp8om2l
    @user-yb7tp8om2l 21 день тому

    какие же топовые очки

  • @4T0O
    @4T0O Місяць тому +5

    16:30 - Нет, в математике это так не работает, 0,(3) это эквивалент 1/3, и при его умножении на 3 мы получим один. Да, можно записать 0,(9), но лучше не надо, принято просто один, потому что 0,(9)=1. Это доказанный математический факт, ничего ни к чему не стремится. Математика НЕ работает так, как ты описал, в ней НЕ получается каких-то несостыковок в настолько базовых вещах, и именно поэтому никого это не смущает

    • @princessmary5556
      @princessmary5556 Місяць тому +1

      Да, именно так. В математике 1/3 - это абсолютно точное значение.

    • @hsqlk
      @hsqlk Місяць тому +2

      Это доказанный факт только для определенных аксиом о вещественных чисел. Изменив одну аксиому - измениться все

  • @valeriy_konstantinovich
    @valeriy_konstantinovich Місяць тому

    Так и не раскрыл тему, почему 0,1+0,2 не равно 0,3. Может кто-нибудь объяснит?

    • @princessmary5556
      @princessmary5556 Місяць тому

      Машины не умеют хранить десятичные дроби с абсолютной точностью. Например: математическое 1/3 - невозможно записать в виде конечной десятичной дроби. Дробные числа хранятся с некоторой погрешностью, и при манипуляциях с несколькими такими дробными числами, эта погрешность может расти.
      Следующий код на языке с++ наглядно показывает погрешности при сложении 0.1 + 0.2
      #include
      #include
      int main()
      {
      std::cout

    • @user-jp2zc3lo9o
      @user-jp2zc3lo9o Місяць тому

      Потому что в цифровом мире числа храняться в памяти в 2-ичной системе счисления, в которой эти дробные числа имеют бесконечную запись. И есть 2 пути: либо использовать значительно больше памяти под каждое число (чтобы из набора битов можно было обратно восстановить исходное значение, см. типы Decimal), либо округлить (тогда исходное значение восстановить без погрешности не получиться, но выгрываем в скорости/объеме памяти)

    • @valeriy_konstantinovich
      @valeriy_konstantinovich Місяць тому

      @@user-jp2zc3lo9o о, спасибо за разъяснение. Я правда ничего не понял, но я теперь знаю, что этому фокусу есть разумное объяснение, выходящее за грани моего понимания)

    • @alurma
      @alurma 20 днів тому

      Потому что в IEEE 754 так сказано, грубо говоря

    • @valeriy_konstantinovich
      @valeriy_konstantinovich 19 днів тому +1

      @@alurma Грубо говоря, надо в школе вместо математики изучать IEEE754)))

  • @ArtJarocki
    @ArtJarocki Місяць тому +1

    Дим, просто else в питоне.

  • @alex146
    @alex146 Місяць тому +2

    "Минус всегда вычитание, js умный и все знает..." Ну, это в js не бывает операции противоположной конкатенации, а, например, в груви можно из строки вычесть подстроку при помощи "-". А в js просто беда с типами, не понимаю, зачем пытаться это оправдать

    • @johenews21
      @johenews21  Місяць тому +2

      Так в чем заключается беда?

    • @0x255
      @0x255 Місяць тому +2

      предполагаю, что речь про неявное приведение типов. правила языка нужно знать - на этом всё)

  • @alurma
    @alurma Місяць тому

    Мне больше всего нравится мем 'ba' + + 'a'

  • @dgvgfg
    @dgvgfg Місяць тому

    смеятся в том что это смешно для человека не знакомого с языками программирования
    это как будто нарушает принцип последовательности. И да 0.5+0.1 == true, а 0.1+0.2 == false говорит о том, а если мы возьмём другие значения тру у нас будет или false? Это нельзя точно сказать.

    • @johenews21
      @johenews21  Місяць тому +1

      Три раза прочитал этот комментарий и ничего не понял. Вам надо идти в политику.

  • @skynowa2626
    @skynowa2626 Місяць тому

    В С/С++ так float-ы не сравниваются

    • @johenews21
      @johenews21  Місяць тому

      покажи как сравниваются

    • @skynowa2626
      @skynowa2626 Місяць тому

      @@johenews21
      #include
      #include
      bool compare_floats(float a, float b, float epsilon)
      {
      return fabs(a - b) < epsilon;
      }
      int main()
      {
      float num1 = 0.1;
      float num2 = 0.2;
      float sum = num1 + num2;
      float tolerance = 0.0001; // Define your tolerance level here
      if (compare_floats(sum, 0.3, tolerance)) {
      printf("true
      ");
      } else {
      printf("false
      ");
      }
      return 0;
      }

    • @skynowa2626
      @skynowa2626 Місяць тому

      + еще в С library есть стандартные функции специально для сравнения флоатов

    • @johenews21
      @johenews21  Місяць тому

      Это вообще не сравненеие, если что.
      Сравнение - процесс количественного или качественного сопоставления разных свойств (сходств, отличий, преимуществ и недостатков) двух (и более) объектов.
      То, что написано у тебя сравнением точно не является.
      Ты тут вводишь какую-то переменную с отклонением и почему-то задаешь ей значение в одну десятитысячную.
      Это бред, дружище

    • @princessmary5556
      @princessmary5556 Місяць тому

      @@johenews21 Сами вы бредите. А человек выше привел вам пример сравнения дробных чисел в языке с++. Подобный код вы можете увидеть в фреймворке Google test, и ли например, в библиотеке nlohmann.
      // код взят из библиотеки nlohmann
      template
      inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept
      {
      return std::abs(a - b)

  • @diz1295
    @diz1295 Місяць тому

    скатился джохе, уже ролики ради рекламы делает

  • @etalko
    @etalko Місяць тому +7

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

    • @sueta714
      @sueta714 Місяць тому +4

      🤡

    • @johenews21
      @johenews21  Місяць тому +7

      о, футболка работает

    • @SDXqq
      @SDXqq Місяць тому +3

      А минусы будут?

    • @noname-kc7iv
      @noname-kc7iv Місяць тому +3

      О нет, только не отписывайся! Что же автору без тебя делать?

    • @ihtoshy677
      @ihtoshy677 Місяць тому

      @@johenews21 Ты конь педальный. Работают HIMARS, ATACMS, дроны "Лютий".