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

Примеры кода: github.com/HowProgrammingWork...
Структура курса: github.com/HowProgrammingWork...

Пікірлер: 28

  • @antonsuhov4222
    @antonsuhov4222 Жыл бұрын

    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

  • @stephaninabox
    @stephaninabox4 жыл бұрын

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

  • @gennadiymedvedev214
    @gennadiymedvedev2144 жыл бұрын

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

  • @TimaGixe
    @TimaGixe Жыл бұрын

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

  • @user-no7sl1yk3f
    @user-no7sl1yk3f7 ай бұрын

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

  • @user-um3ps3gq9t
    @user-um3ps3gq9t4 жыл бұрын

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

  • @user-ky8dr1hu5e
    @user-ky8dr1hu5e4 жыл бұрын

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

  • @dmitrijponkin
    @dmitrijponkin4 жыл бұрын

    Спасибо!

  • @VladislaV220
    @VladislaV2203 жыл бұрын

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

  • @DimitarRad
    @DimitarRad2 жыл бұрын

    like and comment as usual ;)

  • @TimurSevimli
    @TimurSevimli Жыл бұрын

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

  • @TimurShemsedinov

    @TimurShemsedinov

    Жыл бұрын

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

  • @TimurSevimli

    @TimurSevimli

    Жыл бұрын

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

  • @user-jb1kn4bt6k
    @user-jb1kn4bt6k2 жыл бұрын

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

  • @user-jb1kn4bt6k

    @user-jb1kn4bt6k

    2 жыл бұрын

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

  • @dromix_ai
    @dromix_ai2 жыл бұрын

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

  • @TimurShemsedinov

    @TimurShemsedinov

    2 жыл бұрын

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

  • @QwDragon
    @QwDragon2 жыл бұрын

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

  • @TimurShemsedinov

    @TimurShemsedinov

    2 жыл бұрын

    Нет, маленький массив с однотипными элементами и без дырок работает гораздо быстрее 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%.

  • @user-zd5yk4by6j

    @user-zd5yk4by6j

    2 жыл бұрын

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

  • @QwDragon

    @QwDragon

    2 жыл бұрын

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

  • @GagikHarutyunyan_dev
    @GagikHarutyunyan_dev4 жыл бұрын

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

  • @TimurShemsedinov

    @TimurShemsedinov

    4 жыл бұрын

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

  • @denisoleksyuk5346

    @denisoleksyuk5346

    3 жыл бұрын

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

  • @vugpgu
    @vugpgu Жыл бұрын

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

  • @Antonio-fm1sq
    @Antonio-fm1sq2 жыл бұрын

    Спасибо!

Келесі