| h1. Kotlin |
| |
| [Kotlin|https://kotlinlang.org] - это универсальный язык программирования, созданный [JetBrains|https://www.jetbrains.com] в качестве альтернативы Java с намного более удобным синтаксисом, но выполняющийся на JVM и полностью совместимый с существующей экосистемой Java. |
| |
| Поддержка языка уже доступна из коробки в [ItelliJ IDEA|https://www.jetbrains.com/idea/] от JetBrains и [Android Studio|https://developer.android.com/studio/] от Google. Поэтому перспективы внушительные. См. про это в блоге: [Kotlin 1.0 Released: Pragmatic Language for JVM and Android|https://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/]. |
| Kotlin уже стал [официальным|https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/] и [предпочтительным|https://techcrunch.com/2019/05/07/kotlin-is-now-googles-preferred-language-for-android-app-development/] языком для Android и [официальным языком соревнований ACM ICPC|http://codeforces.com/blog/entry/52128?locale=ru#comment-361660]. |
| |
| [Официальная справка по языку|https://kotlinlang.org/docs/reference/] ([по-русски|https://kotlinlang.ru/]) |
| [Краткое описание по русски|https://vk.com/pages?oid=-59097513&p=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA_Kotlin] |
| [Хабрахабр: Почему следует полностью переходить на Kotlin|https://habrahabr.ru/company/mailru/blog/329294/] (список фич) |
| *Осторожно*, опросы показывают, что Kotlin вызывает привыкание: https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages |
| |
| *Видео* по-русски: [Что такое Kotlin? Введение|https://www.youtube.com/watch?v=HWyd1gYMkl0], [Введение в Kotlin|https://www.youtube.com/watch?v=QBE7My-ZoQU], [Идиоматичный Kotlin|https://www.youtube.com/watch?v=2raT3QX3aNg], [Корутины в Kotlin|https://www.youtube.com/watch?v=rB5Q3y73FTo] |
| [Вводные видео|http://petersommerhoff.com/dev/kotlin/kotlin-beginner-tutorial/] |
| [Серия видеоуроков|https://habrahabr.ru/post/321600/] ([playlist|https://www.youtube.com/playlist?list=PLIU76b8Cjem4ZOt3tlWykUX1AjL9zE19t]) |
| |
| *Видео* по-английски + livecoding: [How to Kotlin|https://www.youtube.com/watch?v=6P20npkvcb8], [Kotlin: Ready for Production|https://academy.realm.io/posts/gotocph-hadi-hariri-kotlin-ready-for-production/], [Functional Programming with Kotlin|https://www.youtube.com/watch?v=eNe5Nokrjdg], [Kotlin 102 - Beyond the Basics|https://www.youtube.com/watch?v=1KldcFc7HCY], [Kotlin/Anywhere|https://www.youtube.com/watch?v=v96mVdcZd1g], [Kotlin in Space|https://www.youtube.com/watch?v=JnmHqKLgYY4] |
| Coroutines: [Introduction to Coroutines|https://www.youtube.com/watch?v=_hfBv0a09Jc], [Kotlin Coroutines in Practice|https://www.youtube.com/watch?v=a3agLJQ6vt8], [Server-side Kotlin with Coroutines|https://www.youtube.com/watch?v=hQrFfwT1IMo]. |
| |
| *Введения*: |
| [Habr: Андрей Бреслав и Дмитрий Жемеров о Kotlin 1.0|https://habrahabr.ru/post/279667/] (внутри много ссылок). |
| https://superkotlin.com/kotlin-mega-tutorial/ |
| |
| *Книги*: |
| * [Kotlin в действии|https://ru.pdfdrive.com/kotlin-%D0%B2-%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B8-d187850272.html] |
| | * [Atomic Kotlin|https://www.atomickotlin.com/] ([[скачать|https://dokumen.pub/atomic-kotlin-9780981872544-9780981872551.html]) |
| | * [Atomic Kotlin|https://www.atomickotlin.com/] ([скачать|https://dokumen.pub/atomic-kotlin-9780981872544-9780981872551.html]) |
| * [Hands-On Design Patterns with Kotlin|https://codernet.ru/books/kotlin/hands-on_design_patterns_with_kotlin/] |
| |
| *Курсы*: |
| [Бесплатные курсы по Kotlin на Stepik|https://stepik.org/catalog?q=Kotlin], https://www.coursera.org/learn/vvedenie-v-yazyk-kotlin |
| Coursera: [Kotlin for Java Developers|https://coursera.org/learn/kotlin-for-java-developers] |
| JetBrains Academy: free adaptive track [Kotlin Basics|https://hyperskill.org/tracks/18] |
| [Algorithms and data structures in Kotlin|https://github.com/bmaslakov/kotlin-algorithm-club] |
| [Kotlin Academy|https://kotlin-academy.herokuapp.com/] |
| |
| *Песочница*: На сайтах https://play.kotlinlang.org/ и http://try.kotlinlang.org/ есть набор ознакомительных задач и можно запускать решения на Kotlin прямо в браузере. |
| Большой набор набор ссылок по продвинутому использованию Kotlin: http://kotlin.link/. |
| https://developer.android.com/kotlin/resources.html |
| |
| Вот отчёт о первом Kotlin Challenge с Геной и примером решения: https://habrahabr.ru/company/JetBrains/blog/222693/. |
| Больше идеоматических примеров решения задач можно найти в [Codeforces Surprise Language Round #8|http://codeforces.com/blog/entry/45454?#comment-300490] и http://rosettacode.org/wiki/Category:Kotlin. |
| |
| [Как писать в файл|http://stackoverflow.com/questions/35444264/how-do-i-write-to-a-file-in-kotlin/]. |
| [Примеры обращения с коллекциями|http://stackoverflow.com/questions/34642254/what-java-8-stream-collect-equivalents-are-available-in-the-standard-kotlin-libr]. |
| [Функциональное программирование на Kotlin|https://habrahabr.ru/post/268463/]. |
| [Kotlin Coding Conventions|https://kotlinlang.org/docs/reference/coding-conventions.html]. |
| |
| Ещё тренироваться в решении задач на Kotlin можно на http://codeforces.com, https://www.hackerrank.com, https://www.codechef.com, https://codingame.com, [Advent of Code|https://blog.jetbrains.com/kotlin/2015/12/try-kotlin-with-advent-of-code/] и в курсе Программирование \ Программирование на Java на [DL|http://dl.gsu.by]. |
| |
| Для корректного тестирования на DL в тексте решения на Kotlin должна быть определена функция верхнего уровня main: |
| {code} |
| fun main() { |
| println("Hello world!") |
| } |
| {code} |
| |
| [Примеры|https://stackoverflow.com/questions/41283393/reading-console-input-in-kotlin] *A+B* |
| {code} |
| fun main() { |
| val (a, b) = readLine()!!.split(' ') |
| println(a.toInt() + b.toInt()) |
| } |
| {code} |
| или |
| {code} |
| fun main() { |
| val (a, b) = readLine()!!.split(' ').map { it.toInt() } |
| println(a + b) |
| } |
| {code} |
| или (из https://kotlinlang.org/docs/tutorials/competitive-programming.html) |
| {code} |
| |
| fun readLn() = readLine()!! // string line |
| fun readInt() = readLn().toInt() // single int |
| fun readStrings() = readLn().split(" ") // list of strings |
| fun readInts() = readStrings().map { it.toInt() } // list of ints |
| |
| fun main(vararg args: String) { |
| val (a, b) = readInts() |
| println(a + b) |
| } |
| {code} |
| или |
| {code} |
| import java.util.Scanner |
| |
| fun main() { |
| val input = Scanner(System.`in`) |
| val a = input.nextInt() |
| val b = input.nextInt() |
| println(a + b) |
| } |
| {code} |
| или |
| {code} |
| import java.util.Scanner |
| |
| fun main() { |
| with(Scanner(System.`in`)) { |
| val a = nextInt() |
| val b = nextInt() |
| println(a + b) |
| } |
| } |
| {code} |
| |
| Чтение/запись в файл: |
| |
| {code} |
| fun <T : Closeable, R> T.useWith(block: T.() -> R): R = use { with(it, block) } |
| |
| File("a.in").bufferedReader().useWith { |
| File("a.out").printWriter().useWith { |
| val (a, b) = readLine()!!.split(' ').map(String::toInt) |
| println(a + b) |
| } |
| } |
| |
| Scanner(File("b.in")).useWith { |
| PrintWriter("b.out").useWith { |
| val a = nextInt() |
| val b = nextInt() |
| println(a + b) |
| } |
| } |
| {code} |
| |