Функции высшего порядка в Kotlin: map, flatMap, fold, filter - понятный компактный код

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

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

  • @borkman6285
    @borkman6285 3 года назад +7

    Очень крутая картинка, сануд аааа просто кайф для глаз и ушей. Конечно же спасибо за инфу!

  • @mikhaillazarev5378
    @mikhaillazarev5378 4 месяца назад

    Автор пупсик ❤

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

    Музыка божественна

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

    Класс. Отличное объяснение, вовремя убирается саунд на подложке. Отличный видимый шрифт в коде. Единственный момент, при использовании функции fold (7:20), есть переменные acc, i
    Мне кажется, что вместо i лучше использовать it. i это всё таки индекс элемента в массиве, а it - значение.

  • @danilbehappy4344
    @danilbehappy4344 2 месяца назад

    не подскажете, чем map отличается от foreach?

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

    Контент огонь, а за саунд - отдельный респект 👍

  • @Majjabee-np9nq
    @Majjabee-np9nq 2 года назад

    Красавчик! Спасибо за видео!

  • @ЛёхаНеважно-т1д
    @ЛёхаНеважно-т1д 3 года назад

    Как же ты харош!

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

    Объясни пожалуйста когда пишешь код что к чему

  • @igorgabaydulin8989
    @igorgabaydulin8989 4 года назад +4

    Поздравляю с первой сотней подписчиков :)

    • @SeemsNerdy
      @SeemsNerdy  4 года назад +1

      Данке шон, спасибо :)

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

    Спасибо за видео!
    После просмотра остался вопрос, чем *fold()* отличается от *reduce()* .
    *fold()* - это и есть *reduce()* , но он принимает на вход initial значение для acc.
    На примере из видео:
    array = arrayOf(1, 2, 3, 4, 5, 0, -100, 1024, -100)
    array.fold(Int.MIN_VALUE) { acc, i -> max(acc, i) }
    На первой итерации acc == int.MIN_VALUE, i == array[0] == 1
    array.reduce { acc, i -> max(acc, i) }
    На первой итерации acc == array[0] == 1, i == array[1] == 2
    Если array будет пустым, то *fold()* вернёт массив из initial-значения, а *reduce()* выбросит *"java.lang.UnsupportedOperationException"*
    З.Ы.: концовки видео с питанием компа крутые

    • @SeemsNerdy
      @SeemsNerdy  4 года назад

      ЕЕеее :) Каеф :)

  • @staschernov928
    @staschernov928 10 месяцев назад

    А почему в первом случае нельзя было использовать хотя-бы split?

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

    На 9:38 какой кнопкой превратил >= в односимвольный аналог?

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

      @@andrey7530 Тоесть в файлике это 2 символа, просто рендерится как 1?

  • @Артем-ш8и5ц
    @Артем-ш8и5ц 3 года назад +1

    Лучший!

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

    Здравствуйте! Отличное видео! Подскажите пожалуйста как будет выглядеть код с помощью map чтобы поменять букву в слове?

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil Год назад

      map применяется ко всем элементам
      если нужно поменять одну букву то можно без map обойтись

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

    Круто! Просто и понятно. Большое спасибо!

  • @x_dilettante
    @x_dilettante 4 года назад +1

    Желаю успехов в развитии канала!
    На RU зоне каналы по программированию раскрутить очень сложно. Но ведь кто то должен популяризировать программинг в России...

    • @SeemsNerdy
      @SeemsNerdy  4 года назад

      Спасибо. Я хочу проверить будет ли канал развиваться на одной лишь органике, без раскруток

  • @agp1444
    @agp1444 3 года назад +1

    а как нарисовать стрелочку, которую он на 4:16 рисуют? минус+больше не прокатывает - она неслитная получается)))) и >= на 9:35 - аналогичный вопрос

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

      Это называется лигатуры, тебе нужны шрифты и немношк погуглить
      stackoverflow.com/questions/49206685/how-to-convert-to-%E2%89%A0-and-to-%E2%86%92-in-android-studio

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

    Лолька. Первый варик, в цикле if == array.length - 1. Если большой текст надо обработать - это так-то плохо. Лучше было - забить на последнее слово и после этого цикла добавить цикл с конца до первого пробела || . || ,. Ясно, что второй варик чаще используют, но все-таки мне бросился этот if в глаза. Хотя да, цель была не в этом - да. Так даже чуть больше кода и еще сложнее читать, ахахах. Но тем не менее, не сочтите за критику;-)

  • @VoidObj
    @VoidObj 4 года назад +1

    12:52 Так, либо лыжи не едут..
    У меня так не работает с переменной "words".
    Если делать так, как в видео - то она получается массивом(функций?) "val words: List"
    Покурил бамбук, полечил таким образом:
    .map { filterEnding(',')(it)} , т.е. я передаю в функцию в мапе "it", по идее так и должно быть. Но почему работает у вас тогда? Единственная разница - я в андроид студии пробую, она по другим правилам работает? ))

    • @SeemsNerdy
      @SeemsNerdy  4 года назад

      На скобки обрати внимание.
      Можно map(filterending(“-“)), тогда у тебя лябмдой которую будет вызывать map станет то, сто вернет функция filterEnding.
      Можно map { filterEnding(“-“)(it) } - так у тебя на одну лябмду больше будет

    • @VoidObj
      @VoidObj 4 года назад

      @@SeemsNerdy Ааа!! Вот это я валенок)) Работает, спасибо!
      Но тут же созрел еще вопрос:
      .map(String::toLowerCase)
      .map(filterEnding(','))
      .map(filterEnding('.'))
      .flatMap { it.toList() }
      .map { Log.i("MyLog", it.toString()) }
      При таком подходе flatmap не выдает все, что должен а только первые 2 символа с каждого слова.
      А вот если сюда понаставить бряк и по этому же коду пройтись в дебаг-режиме, то работает все корректно. Это как понимать? о_О

    • @SeemsNerdy
      @SeemsNerdy  4 года назад

      А можешь весь код куда-нибудь на gist.github.com закинуть?

    • @VoidObj
      @VoidObj 4 года назад

      @@SeemsNerdy вот этот код лежит в onCreate и выдает по 2 символа со слова
      gist.github.com/MaScFx/39cbe6ca5a9bb85db7ac66bfcde69e4a
      Что самое интересное, если его перенести без изменений в intellij idea- работает корректно.
      А в андроид студии что с эмулятором что с реальным девайсом - по 2 символа.
      скрин приложил там

    • @SeemsNerdy
      @SeemsNerdy  4 года назад

      Все ты правильно делаешь. Удали фильтр *MyLog* и увидишь там что-то в духе
      *I/chatty: uid=10086(...) identical 5 lines*
      Операционка видит что приложение одно и то же кидает в лог и затыкает его, вместо этого выводя вот такое вот.
      Вообще может помочь: *adb logcat -P "UID"* , UID - тот который стоит напротив твоей package name в выводе *adb logcat -S* , в списке самых chattiest apps, но у меня правда эта пижня не заработала. Второй вариант - склей в строку и ее в лог

  • @andrey7530
    @andrey7530 4 года назад

    Спасибо!

  • @Chekist2008
    @Chekist2008 3 года назад +1

    Блин, про flatMap примеров бы побольше... но все равно лайк!

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

    Mann was du uns bringst bei für neue menschen dei lernen, Kotlin sehr schwerige , eventuell du konteste tiefer erklaren , welche function für was verantwirtlich?

  • @vorontsovru270895
    @vorontsovru270895 3 года назад +1

    Коротко для .Net разрабов:
    map -> linq Select
    flatMap -> linq SelectMany
    fold -> по сути linq First
    filter -> linq Where

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

      fold -> linq Aggregate

  • @МихаилДядищев-ж1д
    @МихаилДядищев-ж1д 4 года назад +1

    Грацули с соточкой:)

  • @СашаТрисектор
    @СашаТрисектор 2 года назад

    так, конечно, лучше, но, что эти недоделанные, которые про красивый код, что скажут?

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

    На 25 строчке в первом варианте: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 41 out of bounds for length 41

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

    а кто такие ЯРДЫ? он когда здоровается на 0:16 говорит - "здорова, ярды"

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

      Нерды :(
      ru.wikipedia.org/wiki/%D0%9D%D0%B5%D1%80%D0%B4

    • @m.shastin27
      @m.shastin27 2 года назад

      Я вообще подумал Ярдрей, как раз после его ролика смотрю)