Антипаттерны процедурного программирования

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024

Комментарии • 28

  • @antonsuhov4222
    @antonsuhov4222 2 года назад +5

    1:00 - Unreachable code
    3:43 - Dead code
    5:54 - Switch
    10:25 - Parameters
    19:31 - Accumulate and fire
    22:21 - Micro Optimization
    40:23 - Nested Loops
    50:20 - Long Methods, functions , procedures

  • @TimaGixe
    @TimaGixe Год назад +1

    Дякую за пояснення та наведені приклади.

  • @stephaninabox
    @stephaninabox 5 лет назад +13

    Наконец-то лекция со знакомым материалом, ведь всё это я уже применял :D

  • @ИльяБондаренко-т4е
    @ИльяБондаренко-т4е 11 месяцев назад

    Как же круто на простом примере объяснена важность правильной структуры данных. Спасибо

  • @gennadiymedvedev214
    @gennadiymedvedev214 5 лет назад +14

    , спасибо , Тимур , за профессиональный контент !!!

  • @КонстантинЛазарев-х7м

    Отличная лекция, поможет писать чистый код на JS, рекомендую.

  • @ПётрПетров-д2ч4х
    @ПётрПетров-д2ч4х 5 лет назад +9

    Оптимизация со здравым смыслом от практика (а не от снобистских хипстеров, начитавшихся этих ваших интернетов).

  • @dmitrijponkin
    @dmitrijponkin 5 лет назад +6

    Спасибо!

  • @VladislaV220
    @VladislaV220 3 года назад +2

    спасибо огромное, Тимур!
    Anatoly Kobzisty, а где коммент с самыми удобными в мире тайм кодами....((

  • @TimurSevimli
    @TimurSevimli Год назад +2

    Спасибо огромное за лекцию, было очень полезно! Можете ли поделиться лабораторками для практики декомпозиции или если уже поделились то подсказать где можно их найти🙏

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад +2

      Возможно подойдут такие экзаменационные задания github.com/HowProgrammingWorks/Exams

    • @TimurSevimli
      @TimurSevimli Год назад

      @@TimurShemsedinov Спасибо большое! 🤓

  • @ЕвгенийМедведев-ц3х
    @ЕвгенийМедведев-ц3х 3 года назад +1

    В примере с цветами вы упомянули что поиск по массиву с помощью indexOf быстрее, нежели обращение к объекту по ключу. Вы не оговорились?

    • @ЕвгенийМедведев-ц3х
      @ЕвгенийМедведев-ц3х 3 года назад

      Ведь забрать по ключу значение из объекта - моментально. А indexOf, все равно, внутри перебирает и сравнивает каждое значение. indexOf - O(n) , hash O(1). Если я не прав - поправьте, пожалуйста)

  • @DimitarRad
    @DimitarRad 2 года назад +1

    like and comment as usual ;)

  • @dromix_ai
    @dromix_ai 2 года назад

    ruclips.net/video/cTv7V22mkwE/видео.html Если не ошибаюсь, то Map это не хеш таблица, т.к в качестве ключа может хранить объекты, и если попытаемся перезаписать значение по ключу, то это добавит вторую запись, но не перезапишет предыдущее значение, по-скольку, ссылки разные, тем не менее, Map более оптимизирован, чем обычная коллекция.

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +2

      Спецификация не говорит, как Map должен работать внутри и описывает только внешний интерфейс tc39.es/ecma262/#sec-map-objects но все вменяемые движки используют хештаблицы для этого

  • @QwDragon
    @QwDragon 2 года назад +2

    8:46 - почему быстрее? Наоборот же словарь должен быть быстрее. Да и красивее, по-моему.
    16:09 - new Date посеял.

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +3

      Нет, маленький массив с однотипными элементами и без дырок работает гораздо быстрее Map и тем более Object

    • @QwDragon
      @QwDragon 2 года назад

      @@TimurShemsedinov хм.. проверил. При таком размере массива разница минимальна, хотя массив немного выигрывает.
      Вот результаты замера:
      x => arr.indexOf(x): 3298.822021484375 ms
      x => obj[x]: 3495.64501953125 ms
      x => map.get(x): 3351.541015625 ms
      350028119 350028119 350028119
      И сам код:
      const arr = ['black', 'red', 'green', 'yellow', 'blue', 'margenta', 'cyan', 'white']
      const obj = Object.create(null); for (let q=0; q [x, i]))
      const data = Array.from({ length: 100000000 }, () => arr[Math.random() * arr.length | 0])
      function check(f) {
      const hint = f + ""
      let res = 0
      console.time(hint)
      for (const x of data) {
      res += f(x)
      }
      console.timeEnd(hint)
      return res
      }
      const x = check(x => arr.indexOf(x))
      const y = check(x => obj[x])
      const z = check(x => map.get(x))
      console.log(x, y, z)

    • @QwDragon
      @QwDragon 2 года назад

      @@TimurShemsedinov блин, что-то ютьюб комментарий удаляет. Если в функции с indexOf прибавить 1, то производительность значительно падает - этот вариант проигрывает остальным на 20-25%.

    • @ДенисОсипов-у5ь
      @ДенисОсипов-у5ь 2 года назад +3

      @Timur Shemsedinov Это только если не прибавлять единицу к индексу (вместо этого добавить null в начало массива, например). Тогда и правда вариант с массивом получается быстрее (мистика:)): 100 миллионов вызовов у меня заняли 60 мс для массива против 90 мс для объекта и мэпа. Но + 1 всё портит и замедляет работу раз в 25-30, из-за чего вариант с массивом, как он представлен в примере, сильно проигрывает по скорости оставшимся двум.
      А Map и Object в этом примере работают одинаково быстро. Если не ошибаюсь, в какой-то из лекций вы говорили, что простой объект может работать в режиме хэш-таблицы. Наверное, это как раз тот случай.

    • @QwDragon
      @QwDragon 2 года назад

      @@ДенисОсипов-у5ь С режимом хэш-таблицы всё не так просто, но можно попробовать его спровоцировать удалением и добавлением свойства. Как у тебя получилось 20-50 раз когда у меня 20-25%? Можешь код показать?

  • @GagikHarutyunyan_dev
    @GagikHarutyunyan_dev 4 года назад +2

    Здравствуйте. В Redux(reduser) используют такой антипатерн switch case. Приходит тип и если он совпадает с кейсом, то возвращает то что внутри(в основном функции).
    В реакте на больших проектах в файле редюсера могут быть 1000 строк одного switch и реально от этого тошнит. Но все пользуются этим.
    Что скажете по этому поводу? Спасибо

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +7

      Вместо этого нужно использовать коллекции, это и читаемо и быстрее

    • @denisoleksyuk5346
      @denisoleksyuk5346 3 года назад

      Обычно советуют дробить редюсеры что бы такого не было. В редаксе можно использовать мидлваре комбайнРедюсер

  • @vugpgu
    @vugpgu Год назад

    Кант из Кенинсберга! Я с приятием смотрю Ваши лекции о программировании, но мне претит Ваша коммунистическая пропаганда!

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 года назад

    Спасибо!