This media is not supported in your browser
VIEW IN TELEGRAM
Комбинация alt+shift+стрелки это смарт выделение, которое по очереди выделяет области в которых курсок
Лучший коунтдавн премьер видосов на ютубе что мир видывал
https://youtu.be/s6U4PHFISlY?list=PLjt1Fa4aHu63o84DPTQZuCaV5_uLMDOZ1
https://youtu.be/s6U4PHFISlY?list=PLjt1Fa4aHu63o84DPTQZuCaV5_uLMDOZ1
YouTube
Sci-fi YouTube Premiere Countdown. New Premieres style on YouTube.
Pls subscribe to my friend's channel! He makes very good videos about technology, operation systems like Windows! https://www.youtube.com/channel/UCIEzpaPt4Bee_4o_rAq1Gmw
Такс, сегодня лайв текст стрим интересных отличий котлина
1) объявление классов, параметры конструктора идут просто в круглых скобках, сам конструктор объявляется через init
2) new не нужно, как и в Dart, как и во всех языках отделяющих типы от классов
3) можно писать val перед идентами в круглых скобках, чтобы сразу проинициализировать эти значения полученный из конструктора, а не делать this.x = x как в шарпах, жабе
1) объявление классов, параметры конструктора идут просто в круглых скобках, сам конструктор объявляется через init
2) new не нужно, как и в Dart, как и во всех языках отделяющих типы от классов
3) можно писать val перед идентами в круглых скобках, чтобы сразу проинициализировать эти значения полученный из конструктора, а не делать this.x = x как в шарпах, жабе
4) классы по дефолту final, то есть их нельзя наследовать, СПАСИБО
5) все поля по дефолту public, так что не нужно писать public!!!
чтобы сделать класс наследуемым нужен модификатор open или sealed(наследуемый только в этом пакете, а не пользователем твоей либы)
5) все поля по дефолту public, так что не нужно писать public!!!
чтобы сделать класс наследуемым нужен модификатор open или sealed(наследуемый только в этом пакете, а не пользователем твоей либы)
9( никакой структурной типизации нет, но по крайней мере есть возможность создавать анонимные объекты на месте, может пригодится для взаимодействия с JSON.
Можно унаследовать этот анонимный объект на месте от чего то другого и сразу же оверрайднуть его проперти, тогда будет норм
Можно унаследовать этот анонимный объект на месте от чего то другого и сразу же оверрайднуть его проперти, тогда будет норм
Залип в эту репу
https://github.com/arnobl/structural-typing-examples
Я вообще люблю залипать в репы где одно и тоже реализовано на разных языках для сравнения(у меня и своя такая есть). Вот тут смолтолк все равно самый красивый.
https://github.com/arnobl/structural-typing-examples
Я вообще люблю залипать в репы где одно и тоже реализовано на разных языках для сравнения(у меня и своя такая есть). Вот тут смолтолк все равно самый красивый.
GitHub
GitHub - arnobl/structural-typing-examples: Examples in various programming languages about how structural typing is supported
Examples in various programming languages about how structural typing is supported - arnobl/structural-typing-examples
gavr_sas
Залип в эту репу https://github.com/arnobl/structural-typing-examples Я вообще люблю залипать в репы где одно и тоже реализовано на разных языках для сравнения(у меня и своя такая есть). Вот тут смолтолк все равно самый красивый.
Чето я увлекся, реализовал функциональную версию в доказательство что ADT круче OOP
P.S. да, типы выводятся из возвращаемых анонимных объектов функций new*
P.S. да, типы выводятся из возвращаемых анонимных объектов функций new*
gavr_sas
9( никакой структурной типизации нет, но по крайней мере есть возможность создавать анонимные объекты на месте, может пригодится для взаимодействия с JSON. Можно унаследовать этот анонимный объект на месте от чего то другого и сразу же оверрайднуть его проперти…
10) А вот сейчас важно, инлайн функции котлина, это почти что темплейты нима, они инлайнятся по настоящему, в кт, и ретурн оттуда это non local return который вернет из функции в которую был инлайн. Это позволяет реализовать например тот же
Все лямбды принятые в inline функцию тоже inline, чтобы сделать наоборот нужно добавить модификатор
lock statementВсе лямбды принятые в inline функцию тоже inline, чтобы сделать наоборот нужно добавить модификатор
notinline12) Такс, а теперь самая сложная часть моего котлин "доклада", DSL
Для понимания создания DSL нам нужно немножно других фактов
1) В котлине можно перегружать у объектов оператор вызова
5) Тут есть функции расширения, ага как в ниме и C#, любой тип можно расширить своей функций, синтаксис у этого такой
Для понимания создания DSL нам нужно немножно других фактов
1) В котлине можно перегружать у объектов оператор вызова
() с помощью функции operator fun invoke
2) В котлине есть синт сахар как в ниме, если на последним аргументом функции идет лямбда то ее можно вызвать не как foo(a, {x -> toDo}), а как foo(a) {x -> todo}
3) если эта функция принимает только лямбду то можно опустить круглые скобки, если эта лямбда не принимает аргументов то можно опустить ->foo { todo }
4) Разумеется это инлайн лямбда и все будет зерокост5) Тут есть функции расширения, ага как в ниме и C#, любой тип можно расширить своей функций, синтаксис у этого такой
fun String.sas(): Int = 1
"sas".sas() == 1
👍1
gavr_sas
12) Такс, а теперь самая сложная часть моего котлин "доклада", DSL Для понимания создания DSL нам нужно немножно других фактов 1) В котлине можно перегружать у объектов оператор вызова () с помощью функции operator fun invoke 2) В котлине есть синт сахар как…
6) ИИИИ теперь внимание,
1) перегружаем у класса invoke оператор,
2) передаем туда лямбду
3) пускай эта лямбда принимает Функцию Расширения! этого же класса!!!
Так как этот перегруженные оператор invoke принимает только лямбду и никаких больше аргументов, мы можем вызывать его без круглых скобок
Так как лямбда которую он принимает является расширением класса его самого, то внутри этой лямбды мы имеем доступ к полям этого класса.
1) перегружаем у класса invoke оператор,
2) передаем туда лямбду
3) пускай эта лямбда принимает Функцию Расширения! этого же класса!!!
Так как этот перегруженные оператор invoke принимает только лямбду и никаких больше аргументов, мы можем вызывать его без круглых скобок
Так как лямбда которую он принимает является расширением класса его самого, то внутри этой лямбды мы имеем доступ к полям этого класса.
👍1