Що Tаке РЕФЛЕКСІЯ і Як Ми Викоритовуємо Її, Щоб Перевірити Вправи?

Поділитися
Вставка
  • Опубліковано 1 лют 2021
  • 👉 Приєднуйся до Bobocode Community: www.bobocode.com/
    ____________________________________________
    GitHub: github.com/bobocode-projects
    Telegram: t.me/bobocode​
    LinkedIn: bit.ly/2RWPQF5
    Twitter: bit.ly/3vaQiOl
    Patreon: / bobocode
    Тарас в LinkedIn: bit.ly/2ElWg8J
    Тарас в Twitter: bit.ly/33Pmuwg
    ____________________________________________
    #opensource #java #education

КОМЕНТАРІ • 26

  • @ercefwxdx
    @ercefwxdx Рік тому

    Дякую

  • @caffeinejavacode1475
    @caffeinejavacode1475 3 роки тому +5

    Дуже чекаю новий курс🎉
    Хотів додати що монтаж дуже прикольний коли камера наближається від лектора до IDE .
    Булоб круто подивитись як в Spring, Hebirnate використ Reflection щоб всі пазли зійшлись

    • @MrRomanvideo
      @MrRomanvideo 2 роки тому

      Смотри спринг-построитель.

  • @tarasdubil8037
    @tarasdubil8037 3 роки тому +1

    Крута штука, довелось використовувати на продакшині в кейсі, який без неї ніяк)

  • @feoktant
    @feoktant 3 роки тому +5

    Мені ріже вухо "рефлексія - антипаттерн". Тема не розкрита) Я б додав, що рефлексія є тільки в статичних мовах програмування. В динамічних вона є їх невід'ємною частиною.
    Для додавання динамічності, в статичних мовах з'являється рефлексія.
    Постає риторичне питання - якщо ми перевіряємо типи та наявність методів на етапі компіляції, на скільки доречно відкидати цю перевірку, і переносити її в runtime?
    Якщо доречно, чому не взяти Python/Ruby?
    Які є альтернативи рефлексії?
    Чому рефлексія популярна у фремворках Java і C#, але непопулярна в інших мовах?
    Альтернатива - генерація коду. На етапі генерації коду використовувати рефлексію абсолютно здорова практика - потім цей код перевіряє компілятор.
    У Java традиційно генерують source код (proto, jOOQ, javax-ws, Annotation Processing Tool) і з нього отримують байт код. Або генерують байт код проксі для AOP, знову у рантаймі (butebuddy).
    У Scala, C++ частіше генерують одразу байт код, за допомогою макросів.
    Чому тоді Java не пішла цією дорогою? Тому що написати хороший кодогенератор дуже тяжко. Генерований код скорше буде нечитаємим. Потрібна інтеграція з білд тулою, котрим тоді був Ant.
    А головна тула для генерації коду APT з'вилася тільки у Java 5. В той час вже зарелізили Spring 3 :) І розробити його на рефлексії було набагато простіше.
    Через рефлексію не вистрілив Spring і Hibernate на Android - будувати граф у рантаймі при кожному запуску апплікейшена на мобілках дуууже дорого.
    Зараз історія робить віраж, з'являються Quarkus, Micronaut та інші фреймворки без runtime рефлексії, оскільки запускати AWS Lambda так само дорого, як Spring на Android.
    Команда Spring розроблює свої рішення як запускатися на GraalVM.
    Мова програмування - це впершу чергу вибір сталих практик, практик як прийнято вирішувати задачі.
    Java Web - це 95% Spring. І тут заведено використовувати рефлексію.
    У Kotlin автор мови сказав, що макросів напевно не з'явитьсья ніколи, оскільки вони ламають взаємодію з IDE.
    В Scala використовують рефлексію у compile time, а у runtime не прийнято.
    Python додає фічі статичних мов програмування ad-hoc, але залишається динамічною мовою.
    Тож використовуєте ви рефлексію чи ні скорше продиктовано ком'юніті :) І якщо ви з чимось ідеологічно не згодні, то легше почати писати на тій мові, де вас зрозуміють)

  • @igorputnik4216
    @igorputnik4216 3 роки тому +1

    Reflection API - dark side of Java)))

  • @vermilinguas
    @vermilinguas 3 роки тому

    Цей рефлекшн апі виглядає дещо по-хакерськи :D Ніколи не використовував його тому, що як ти влучно сказав - виглядає то всьо дуже страшно на перший погляд

  • @dimaprikolist19
    @dimaprikolist19 3 роки тому +1

    Спасибо за полезный контент, очень интересно и легко смотреть твои видео, будут ли еще моковые интервью ?)

    • @Bobocode
      @Bobocode  3 роки тому +1

      Можливо. Ми зараз зайняті розробкою нових матеріалів 🙂

  • @kolyan199816
    @kolyan199816 Рік тому

    Автор міг би й кращий приклад для використання рефлексії підібрати. Бо ускладнювати простий тест рефлексією задля позбуття залежності від public методів, спричиняє залежність тесту від private полів тестуючого классу (ArrayList), що помітно гірше, аніж залежність одного тесту від іншого.

  • @serhiimanko4942
    @serhiimanko4942 3 роки тому

    Якщо мова йде про створення фреймворка то без рефлексії ніяк, але так щоб у звичайному проекті і в продакшн то дуже сумнівно)

    • @feoktant
      @feoktant 3 роки тому +1

      Фреймворк без рефлексії ніяк - це обмежуюче переконання)

  • @AuthorityDK
    @AuthorityDK 3 роки тому

    Як щодо ReflectionUtils?

    • @tarasboychuk7
      @tarasboychuk7 3 роки тому

      Ти про спрінгові?

    • @AuthorityDK
      @AuthorityDK 3 роки тому

      @@tarasboychuk7 Так

    • @tarasboychuk7
      @tarasboychuk7 3 роки тому

      Можна, я тут хотів показати, що JDK дає.

  • @Botan109
    @Botan109 2 роки тому

    А чого в коді не [CODE] elemens[size++]=element; [/CODE] замість [CODE] elemens[size]=element ; size++; [/CODE]?

  • @StopSmile1
    @StopSmile1 3 роки тому

    А як ви можете подивитись що ми робимо ? Якщо я не пушу свій проект на гітхаб.

    • @Bobocode
      @Bobocode  3 роки тому

      Ми не можемо подивитися. Але ми можемо написати тести, які будуть перевіряти вашу реалізацію. Рефлексія нам дає багато гнучкості у цьому плані, бо ми можемо навіть перевірити приватні поля класів, які ви створюєте.

  • @feoktant
    @feoktant 3 роки тому

    Я відношусь до рефлексії у тестах як до дуже сильного антипаттерну. Але я не можу запропонувати ніякої альтернативи в цьому конкретному випадку на відео. Мене хвилює, що людина, яка тільки почала вивчати Java подивиться на цей тест, і вирішить, що це хороша ідея.

    • @Bobocode
      @Bobocode  3 роки тому +1

      Розумію. Ми можемо залишити коментар і написати, що це виключно в навчальних цілях.

    • @feoktant
      @feoktant 3 роки тому

      @@Bobocode Можна спробувати Property Based Testing. Проблема зводиться до того, що ми хочемо відтестувати метод add, і нам потрібна рефлексія для інспектування внутрішнього стану. Замість цього можна протестувати проперті add+remove.
      Я думаю, ми не хочемо перевірити що ArrayList написаний на array, а хочемо перевірити його перформанс. І тоді це тести з бенчмарками.

  • @user-xt7up4st1n
    @user-xt7up4st1n 3 роки тому

    Впервые вижу видео без дизлайков

    • @Bobocode
      @Bobocode  3 роки тому

      Ми будемо вважати це компліментом 😂

  • @igorzabarovsky1877
    @igorzabarovsky1877 3 роки тому +1

    Видео не смотрел, но осуждаю))