8 способов улучшить свой JavaScript код начинающему

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 มิ.ย. 2020
  • Мы продолжаем серию видео как улучшить свой код JavaScript начинающему. В этом видео я покажу 8 способов улучшить свой код JS если вы новичек в программировании. Рассмотрим фрагменты кода с примерами написания как было и как стало. Также покажу решение нескольких задачи на JavaScript. Если вы еще не применяете в своем коде программирования JavaScript стрелочные функции, шаблонные строки, модули, spread оператор, то вам обязательно к просмотру данное видео.

ความคิดเห็น • 64

  • @user-pn2ev2je2l
    @user-pn2ev2je2l 4 ปีที่แล้ว +2

    Благодарю Вас за видео.

  • @vova2966
    @vova2966 4 ปีที่แล้ว +1

    Хороший видос, спасибо

  • @AOne1999
    @AOne1999 4 ปีที่แล้ว +1

    Каждый раз учусь чему то новому у тебя. Спасибо автор🤗

  • @mainsport7851
    @mainsport7851 4 ปีที่แล้ว

    Отличное видео.

  • @user-we2fx9cp3d
    @user-we2fx9cp3d 4 ปีที่แล้ว

    Крутое видео, спасибо! Сделай видео про объекты пожалуйста!

  • @EgorMoscowNeverSleep
    @EgorMoscowNeverSleep 4 ปีที่แล้ว +3

    9:50 Вместо str.split('') лучше использовать Array.from(str) - это позволит избежать проблем с многобайтовыми символами (например - emoji).
    Но даже при использовании Array.from останутся проблемы с другими спецсимволами UTF-8. Нужно это иметь ввиду.

  • @insomniad2317
    @insomniad2317 4 ปีที่แล้ว +1

    Формат огонь

  • @MaksimMelnik
    @MaksimMelnik 4 ปีที่แล้ว +2

    Про #1 нужно было сказать, что у шаблонных строк есть одно важное преимущество - многострочность!!!

  • @vladyslavdidukh8833
    @vladyslavdidukh8833 4 ปีที่แล้ว +1

    Про fill не знал, спасибо

    • @ITime_shorts
      @ITime_shorts 4 ปีที่แล้ว +1

      Смысла от этого не много)
      Даже сложно представить где в реальной жизни тебе пригодиться массив заполненный одинаковыми данными.

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว

      Оууу, на самом деле пригодится. Я бы мог конечно большие примеры делать, но видео было бы не 12 мин, а пол часа 😬😬

    • @vladyslavdidukh8833
      @vladyslavdidukh8833 4 ปีที่แล้ว

      @@ITime_shorts решая code wars, стыкался с такой нуждой

    • @IT-fr5ni
      @IT-fr5ni 4 ปีที่แล้ว

      Массив также можно забить нужным количеством одинаковых данных через цикл for. Если нужны рандомные, то я обычно делаю так:
      let arr = new Array(10)
      for(let i = 0; i < arr.length; i++) {
      let str = `${Math.random}`
      arr[i] = str.split("")[2]
      }
      Числа получаются случайными

  • @EgorMoscowNeverSleep
    @EgorMoscowNeverSleep 4 ปีที่แล้ว +2

    6:06 Ошибка в утверждении "Проще работать с объектами и классами через ключевое слово *this*".
    С объектами конечно проще работать (но не всегда), а вот с классами есть проблема:
    Если объявить метод как стрелочный, то его нельзя будет переопределить в классе-потомке с вызовом этого метода у предка через super.
    Особенно, это поставит в тупик новичка, который бездумно использовал новомодные фичи es6 в иерархии классов и теперь сидит над ошибкой
    `Uncaught TypeError: (intermediate value).method1 is not a function` и не знает, что не так.

  • @eldraco3656
    @eldraco3656 4 ปีที่แล้ว +2

    ТАКОЙ КАЙФ
    Спасибо большое за вдохновение! Это круто

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว +2

      Ооо, спасибо на добром слове

  • @user-eq7fu9sd5z
    @user-eq7fu9sd5z 4 ปีที่แล้ว

    Классное видео, можете сказать как называется ваша тема на VS?

  • @Ireile
    @Ireile 4 ปีที่แล้ว

    Доброго времени суток. Спасибо за видео-урок.
    Может в будущих видео Вы рассмотрите 3-и примера реализации рекурсии в функциях, от простого к сложному?
    А еще видео по массивам объектов, поиск определённого значения свойства объекта. Как пример массив пользователей, каждый пользователь - объект с тремя свойствами { name: Pavel, login: user0, password: 123 }. Если введенные пользователем значения совпадают со значениями свойств login и password - появится alert с приветствием и значением свойства name.

  • @rusicsemenov
    @rusicsemenov 4 ปีที่แล้ว +1

    По let и const, можно заметить, что если это объект или массив то данные можно изменять.

    • @Devnbp1
      @Devnbp1 4 ปีที่แล้ว +1

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

  • @8-Artem-8
    @8-Artem-8 4 ปีที่แล้ว +1

    strrev и забытые ";" - как раз то, что надо новичкам для написания идеально чистого кода =)

    • @vip51000
      @vip51000 4 ปีที่แล้ว +1

      У меня jshint ругается если не ставлю ;

  • @olezhonnv3215
    @olezhonnv3215 4 ปีที่แล้ว

    Зачем cars.length в скобки оборачивать было в последнем примере? Там где рандомный элемент массива выбирался.

  • @imgod113
    @imgod113 4 ปีที่แล้ว

    #5 про какие фигурные скобки идет речь, участок кода, где в данном примере он? Глобальный блок?

  • @inigoloy
    @inigoloy 4 ปีที่แล้ว +3

    Расскажи про связку React, GraphQL, Apollo.

  • @karasala7722
    @karasala7722 4 ปีที่แล้ว +1

    Когда практические уроки по JS?

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว +1

      Так уже есть же

  • @artemmanzhos2681
    @artemmanzhos2681 4 ปีที่แล้ว +2

    Я новичок. Спасибо за видео🖥

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว +1

      👍🏻👍🏻👍🏻

  • @vitiok78
    @vitiok78 4 ปีที่แล้ว

    По const немного не дотянул... Const всего лишь означает, что объект нельзя переназначить. Но если сделать const ar = [1,2]; , то можно будет потом сделать ar[0] = 3; и если в консоли вывести ar, то будет [3, 2]. То же самое и с объектами. Но вот сделать потом ar = "New Value" уже нельзя, т.к. было использовано const

  • @alinakalinovskaya3512
    @alinakalinovskaya3512 4 ปีที่แล้ว

    Можно практический пример, где может понадобится .fill()? А в остальном - что-то в этот раз слишком базовые истины. Новички вроде меня сразу и учат ES6 - стрелочные функции, spread, const, let, тернарные операторы и прочее... а не переучиваются на новый синтаксис.

    • @EgorMoscowNeverSleep
      @EgorMoscowNeverSleep 4 ปีที่แล้ว

      Практический пример: Нужно создать массив Uint32 определённого размера, со значениями 1 во всех ячейках (по-умолчанию, значения 0).
      var uint32_len16 = new Uint32Array(16).fill(1);
      console.log(uint32_len16);
      Если брать простой массив - то другой пример из практики: нужно создать массив строк определённого размера. По-умолчанию, каждый элемент массива - пустая строка.
      var strArr = new Array(20).fill('');
      console.log(strArr);

  • @richmangroup
    @richmangroup 4 ปีที่แล้ว +2

    Хорошее видео! Только не обратные ковычки, это называется апостроф! Спасибо за видео!

  • @frozealex3069
    @frozealex3069 4 ปีที่แล้ว +1

    с тайм-кодами было бы здорово

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว

      Сделайте:)

    • @frozealex3069
      @frozealex3069 4 ปีที่แล้ว

      @@SuprunAlexey извольте, ваш канал

    • @user-zs7op4li5p
      @user-zs7op4li5p 4 ปีที่แล้ว

      @@SuprunAlexey Странный подход программиста, предоставляющего свой продукт.
      Небось и всякие переходы к определениям пишешь сам плагинами для VSCode?
      Или не пользуешься?

  • @ITime_shorts
    @ITime_shorts 4 ปีที่แล้ว +11

    Какой-то урок по ES6 получился, а не то как улучшить код)

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว

      Начинающим идеально подходит, не все понимают суть ES6

    • @olezhonnv3215
      @olezhonnv3215 4 ปีที่แล้ว

      @Igor Sudenko Что плохо! Очень плохо.

  • @user-bm5kp8qe8l
    @user-bm5kp8qe8l 4 ปีที่แล้ว

    На 6 минуте было сказано, что при помощи стрелочных функций можно легко работать с объектами и классами через this.
    Автор видео забыл сказать, про то, что у них по факту нет этого ключевого слова. Для работы с this в стрелочных функциях лучше всего будет присвоить this какой-нибудь переменной.
    Пример:
    const obj = {
    name: 'Robert Martin',
    hi: ['hello', 'hey'],
    sayHi() {
    const self = this // (!)
    this.hi.forEaxh(str => console.log(name + hi)
    }
    }
    Более подробно про стрелочные функции можно прочитать здесь: learn.javascript.ru/arrow-functions

    • @olezhonnv3215
      @olezhonnv3215 4 ปีที่แล้ว

      В стрелочной функции this берется из контекста ее объявления.
      Если она была объявлена внутри метода объекта, то this в ней будет указывать на тот объект.

  • @LikeOnFilm
    @LikeOnFilm 4 ปีที่แล้ว

    есть еще более изящный способ сократить блок IF, это оператор &&. Я через него делаю даже замену ELSE. И все в одну строку!
    let test = 2;
    let result = !!test && (test === 2) && !console.log('is ok!'); // проверяем test и что он равен 2, если все верно, то выводим сообщение
    console.log(result); // выводим результат выполнения предыдущей строки - КРУТЬ! правда?

    • @user-zn5ky3fw5h
      @user-zn5ky3fw5h 4 ปีที่แล้ว

      Не хочу показаться токсичным говном, но блок if, как по мне изящней выглядит

    • @LikeOnFilm
      @LikeOnFilm 4 ปีที่แล้ว

      @@user-zn5ky3fw5h в основном да, согласен. Однако, мой пример (заменим лог на рандом):
      let result = !!test && (test === 2) && Math.random(); // если test существует и равен 2, то в result запишем рандомное число от 0 до 1, иначе запишем false
      с IF будет выглядеть вот так:
      let result; // чтобы переменная присвоила значения внутри блока, ее надо объявить вне этого блока
      if (test && test === 2) { // проверяем что test существует и равен двум
      result = Math.random(); // запоминаем результат работы в result
      } else {
      result = false; // test не объявлен, или он не равен двум
      };
      Полагаю, из данного примера видно, на сколько код стал избыточным при использовании IF. Бывают задачи в которых блоки нужны. Но чаще всего с IF-ом огород городить приходится... Например:
      if (meColor) {
      element.style.backgroundColor = '#b22222';
      } else {
      element.style.backgroundColor = '#006400';
      }
      ;
      или вот так, без него:
      element.style.backgroundColor = (!!meColor && '#b22222') || '#006400';
      Надеюсь, выгода оптимизации очевидна. В добавок, интерпретатор выполнит такой код быстрее, без создания конструкции блока, что еще и память сэкономит.

    • @user-zn5ky3fw5h
      @user-zn5ky3fw5h 4 ปีที่แล้ว

      @@LikeOnFilm зачем же так усложнять? Здесь намного выгоднее использовать тернарный оператор: element.style.backgroundColor = meColor? '#b22222': '#006400'. А теперь сравните со своей записью. Даже if-else блок в вашем примере выглядит значительно более читаемо. Я согласен с выражением про оптимизацию кода, но не в случаях, когда жертвуется читаемость.
      P.s. работаю frontend разрабом недавно, если тред читает опытный программист, пожалуйста, поделитесь мнением.
      P.s.s.: во всех ваших примерах выгоднее использовать тернарный оператор, он и более читаемый и не влечёт создание блоков if-else. Ваш способ можно использовать при работе с фреймворками - при условном рендеринге (и то не полностью, т.к. нет false-части), например в реакте
      { shouldRender && }
      отрендерится при shouldRender===true.

    • @StidMumuzik
      @StidMumuzik 4 ปีที่แล้ว

      А зачем двойные восклицательные знаки? с таким успехом их и десять штук можно поставить. Просто test вместо !!test Плюс вывести то он выведет, но сам result будет возвращать булевое значение, что не всегда удобно. Мне больше нравится тернарный (?)

  • @process-env
    @process-env 4 ปีที่แล้ว

    А если написать console.log(), то можно выводить что-то в консоль 😂

  • @alex_smith3875
    @alex_smith3875 4 ปีที่แล้ว +1

    v

  • @YWNWA-ZXC
    @YWNWA-ZXC 4 ปีที่แล้ว +4

    теперь ясен уровень помоек ютуба) 183 тыс. подписчиков, а он тернарные операторы рассказывает, я ору

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว +4

      Что тебе не так?

    • @YWNWA-ZXC
      @YWNWA-ZXC 4 ปีที่แล้ว

      @@SuprunAlexey а я причем тут? Просто ору с таких как ты, которые абузят популярность будучи бесполезным челиком)

    • @SuprunAlexey
      @SuprunAlexey  4 ปีที่แล้ว +3

      Ну так а ты подумай что аудитория канала новички, и какая информация им полезна. А так то почитай вопросы под видео, которые люди задают и поймёшь что видимо есть определенная аудитория людей для которых эти видео. А бесполезный увы тут ты со своим комментарием:)

    • @YWNWA-ZXC
      @YWNWA-ZXC 4 ปีที่แล้ว

      @Fetrix клоун)

  • @alex_smith3875
    @alex_smith3875 4 ปีที่แล้ว +1

    868 просмотров•Премьера состоялась 112 минут назад

  • @EgorMoscowNeverSleep
    @EgorMoscowNeverSleep 4 ปีที่แล้ว

    2:18 Ошибка. Переменная *b* создаётся в глобальной области видимости, а не как *const* (как автор очевидно хотел).