gavr_sas
12) Такс, а теперь самая сложная часть моего котлин "доклада", DSL Для понимания создания DSL нам нужно немножно других фактов 1) В котлине можно перегружать у объектов оператор вызова () с помощью функции operator fun invoke 2) В котлине есть синт сахар как…
6) ИИИИ теперь внимание,
1) перегружаем у класса invoke оператор,
2) передаем туда лямбду
3) пускай эта лямбда принимает Функцию Расширения! этого же класса!!!
Так как этот перегруженные оператор invoke принимает только лямбду и никаких больше аргументов, мы можем вызывать его без круглых скобок
Так как лямбда которую он принимает является расширением класса его самого, то внутри этой лямбды мы имеем доступ к полям этого класса.
1) перегружаем у класса invoke оператор,
2) передаем туда лямбду
3) пускай эта лямбда принимает Функцию Расширения! этого же класса!!!
Так как этот перегруженные оператор invoke принимает только лямбду и никаких больше аргументов, мы можем вызывать его без круглых скобок
Так как лямбда которую он принимает является расширением класса его самого, то внутри этой лямбды мы имеем доступ к полям этого класса.
👍1
Такс, а теперь о действительно важном.
Собираем все шесь неиспользованных горбушек, потому что они не влезают в тостер, в одну, режем на кубики, в отдельной миске смешиваем базелик, выдавленный чеснок, паприку, красный черный перец и соль.
0) высыпаем смесь в хлеб и смешиваем
1) кидаем хлеб на сухую! сковородку
2) ждем пока хлеб высохнет минут 7
3) раскидываем кубики сливочново в разные стороны сковородки и перемешиваем шоб получить корочку, если не хватает можно подлить подсолнечного.
Готово, закуска богов за 15 минут и старой неиспользованной булки
Собираем все шесь неиспользованных горбушек, потому что они не влезают в тостер, в одну, режем на кубики, в отдельной миске смешиваем базелик, выдавленный чеснок, паприку, красный черный перец и соль.
0) высыпаем смесь в хлеб и смешиваем
1) кидаем хлеб на сухую! сковородку
2) ждем пока хлеб высохнет минут 7
3) раскидываем кубики сливочново в разные стороны сковородки и перемешиваем шоб получить корочку, если не хватает можно подлить подсолнечного.
Готово, закуска богов за 15 минут и старой неиспользованной булки
👍1
Чеерт, котлин украл из моего языка идею универсального котнрол флов оператора. Их when можно использовать как ряд if elsoв делая по условию в каждой ветке, или как около паттерн матчинг, с ИЛИ вариантами через запятую.
Угадайте где еще можно также
Угадайте где еще можно также
Гайд по пополнению запаса, берем панталоджик или любую игру с кучей диалогов(еще советую Sunless Sea и Skies), Записываем все неясные слова в отдельный блокнотик. Пишем прогу на любимом языке которая будет проверять ваши знания блокнотика.
Чел делает маленькие компутактеры в странных формфакторах https://youtu.be/eR3kf-nUY-s
gavr_sas
6) ИИИИ теперь внимание, 1) перегружаем у класса invoke оператор, 2) передаем туда лямбду 3) пускай эта лямбда принимает Функцию Расширения! этого же класса!!! Так как этот перегруженные оператор invoke принимает только лямбду и никаких больше аргументов…
13) Reified types, это не так круто как звучит, просто изза того что в жабе дженерики erased(так их добавили чтобы не ломать обратную совместимость) рантайм о них ничего не знает, то есть мы даже не можем проверить его тип через T::class.java(скрин 1)
Так вот это можно пофиксить, если функцию сделать inline, а дженерик тип reified. Так как функция инлайнится в место вызова, в котором собственно все о типе T известно, все ограничения erased дженериков спадают. Проблема только в том что инлайн функции нельзя колить из джавы, но это не страшно.
Еще одно применение это перегрузка по возвращаемому значению, ясное дело что обычно так не перегрузишь(разве что в языке есть кт темплейты), а тут с reified можно
Просто делаем switch по дженерик типу дженерик параметра T::class, и кастуем возвращаемое значение в тот же тип
Конечно хотелось бы просто темплейты как в ниме/С++, но с учетом что под капотом жаба и так уже хоть чтото
#kotlin
Так вот это можно пофиксить, если функцию сделать inline, а дженерик тип reified. Так как функция инлайнится в место вызова, в котором собственно все о типе T известно, все ограничения erased дженериков спадают. Проблема только в том что инлайн функции нельзя колить из джавы, но это не страшно.
Еще одно применение это перегрузка по возвращаемому значению, ясное дело что обычно так не перегрузишь(разве что в языке есть кт темплейты), а тут с reified можно
Просто делаем switch по дженерик типу дженерик параметра T::class, и кастуем возвращаемое значение в тот же тип
Конечно хотелось бы просто темплейты как в ниме/С++, но с учетом что под капотом жаба и так уже хоть чтото
#kotlin