В этой статье я научу вас основам Kotlin. Начиная с самого начала мы дойдем до уверернного уровня использования Kotlin. Чтоб когда у вас спросили "Как сделать лямбду функцию" вы на лбу спросившего написали:

val sum: (Int, Int) -> Int = { first: Int, second: Int -> first + second  }

Почему Kotlin, а не Java❓

Все просто - этот язык является новой формой Java для Android. В нем решили множество проблем из Java, сделали более приятный синтаксис и для Android он стал работать быстрее. В нем есть все функции из Java, но в Java нет некоторых функций из Kotlin. Поэтому если вы давно хотели изучить Kotlin - вы пришли по адресу! ?‍♀️

Так же этот язык проще многих аналогов (того же Java) от чего начать его использовать куда проще, чем многие другие. Хватит воды - приступаем!

? Переменная:

Переменная простыми словами — это хранилище данных. Сюда можно положить какое-то значение (например, число, строку или другой тип данных). Еще более простой вариант представить себе переменную — подумать о том, что нас окружает. Например, переменной может быть какой-то небольшой мешочек, куда можно положить, к примеру, яблоко. Оно будет там находиться до тех пор, пока мы не решим произвести с яблоком какие-то действия.

С явным указанием типов:

val digit: Int = 0
val string: String = "Hello Wold"
val list: List<String> = listOf("привет", "Тимофей")

Можно также и не указывать тип явно:

val digit = 0
val string = "Hello Wold"
val list = listOf("привет", "Тимофей")

Все переменные которые указываются через val нельзя изменять, чтоб создать переменную, которую можно изменять используйте var

var digit = 0
digit = 10 + 10

Также можно создать переменную, вызвав ее через const val

const val COUNT_SECTOR = 4
const val PRIMARY_LANG = "Ru"

Разница между val и const в том, что const может принимать только примитивные типы данных: Int, String, Float, Char


? Функции:

Функция - это блок, который может выполнять одно конкретное действие, которое Вы укажите.

Функция может принимать параметры, а также может возвращаться или не возвращать результат функции:

Функция с параметрами:

fun sendHello(name: String) {
    println("Hello, $name")
}

sendHello("Timofey") // традиционный вызов функции

Вызвав эту функцию и указав значение аргумента в консоли будет выведен результат.

Hello, Timofey

Функция без параметров:

fun sayHello() {
  println("Hello World")
}
sayHello()

При вызове этой функции в консоль выводиться следующее:

Hello World

Функции, которые возвращают данные:

Чтоб функция могла возвращать данные ей необходимо указать тип возвращаемых данных и ключевое слово return

fun invoke1(params1: Int, params2: Int) : Int {
    return params1 + params2
}

fun another(params: Int): Int { /*...*/ }

another(invoke1(10,200))

Вот так можно использовать подобные функции. На самом деле применений гораздо больше, но мы ограничимся пока этим.


? Циклы и условия:

Цикл — это как повторять одно и то же действие несколько раз

Условие - Если статья понравился, то я подпишусь на автора ;)

Циклы есть следующие: for, while, do while

for (i in 0..10) {
    println("-".repeat(20))
    println("Значение $i")
    println("Возведение в квадрат числа $i: ${i * i}")
}
var index = 0
while (index <= 10) {
  println("Index = $index")
  println("Возведение в квадрат числа $index: ${index * index}")
  index++
}

# ВАЖНО: в цикли while Вы сами контролируете значение вашего index. Если index не менять, то случиться бесконечный вызов цикла и компилятор выведет ошибку!

Есть и другая форма цикла while - do..while:

var i = -0
do{
    println(i*i)
    i--;
}
while(i > -5)

данном случае вначале выполняется блок кода после ключевого слова do, а потом оценивается условие после while. Если условие истинно, то повторяется выполнение блока после do. То есть несмотря на то, что в данном случае переменная i меньше -5 и она не соответствует условию, тем не менее блок do выполнится хотя бы один раз.


? Классы (ООП)

Вот и подошли к самому интереснему ?

В Kotlin классы — это основной инструмент для создания объектов.

Объект — это комбинация данных и действий, которые с этими данными можно выполнять. Класс, по сути, является "чертежом", на основе которого можно создавать объекты.

Как объявить класс?

class Person {
    var name: String = ""
    var age: Int = 0
}

Здесь мы создали класс Person с двумя свойствами: name и age. Когда создается объект класса Person, мы можем задавать значения для этих свойств.

Создание объектов ?

Чтобы создать объект класса, используем ключевое слово new в некоторых других языках, но в Kotlin оно не требуется:

val person = Person()
person.name = "Маша"
person.age = 25

Теперь объект person содержит данные: имя "Маша" и возраст 25.

Конструкторы ?

Конструктор — это специальная функция, которая вызывается при создании объекта. В Kotlin можно упростить работу с классами, добавив конструктор прямо в объявление класса:

class Person(val name: String, val age: Int)

Теперь при создании объекта мы можем сразу передать значения:

val person = Person("Маша", 25)
println(person.name)  // вывод: Маша

Методы в классах ?

Классы также могут содержать методы — функции, которые выполняют действия с данными класса. Пример:

class Person(val name: String, val age: Int) {
    fun introduce() {
        println("Привет, меня зовут $name и мне $age лет.")
    }
}

Теперь можно вызвать метод introduce:

val person = Person("Маша", 25)
person.introduce()  // вывод: Привет, меня зовут Маша и мне 25 лет.

Классы в Kotlin позволяют легко организовать данные и действия над ними в одном месте. Благодаря компактному синтаксису, классы становятся удобным инструментом для работы с объектно-ориентированным программированием.

Итог ?

Если Вам казалось, что Kotlin - это сложный язык, то начните с самых маленьких шагов к изучению этого языка и вы поймете как он работает и как стать гуру Kotlin )

Это была первая статья из серии "Kotlin". Если у вас остались вопросы или вы недовольны постом - смело комментируйте, критикуйте или поблагодарите за хорошую работу ?

Если понравилось мое творчество, то смело переходите в мой ТГ канал, там много всего интересного

Комментарии (19)


  1. buratino
    07.10.2024 18:14
    +2

    Все переменные которые указываются через val нельзя изменять

    Это что за переменная, которую нельзя менять?!


    1. SpaceTimofey Автор
      07.10.2024 18:14

      val и var - это 2 способа обьявить переменную. Для Kotlin val - это final переменная, которая не может быть изменяемая. Ее можно только инициализировать и использовать.

      На практике - это структура довольно удобная может быть. К примеру если хотите создать какую-то модель данных или список моделей в одной переменной, которая по логике не должна изменяться ее лучше инициализировать через VAL, нежели VAR.

      Спасибо большое за комментарий!)


      1. buratino
        07.10.2024 18:14

        не бывает переменных, которые не могут быть изменяемы. Если не изменяется, то это константа, а не пере-мен-ная. Но это так сказать логический косяк от авторов Котлина.


        1. youngmyn
          07.10.2024 18:14
          +2

          Чето угарнул с комментариев. Анекдот вспомнился не очень приличный:

          Затеял мужик капитальный ремонт и нанял под это дело двух рабочих - вроде нормальные, не бухают. Приезжает через две недели домой принимать работу, ходит - ну просто идеально всё сделано, не придерешься.

          Заходит в туалет, а там унитаз к потолку привинчен!

          Он, естественно: это чё за хуня?

          А работяга ему: эй, погоди ругаться, вот смотри! - разбегается, отталкивается от стены, хватается за края унитаза руками, подтягивает к нему свою пятую точку и начинает испражнятся. Моча и кал, естественно, валятся сквозь ноги вниз, падают ему на спину, грудь и лицо, он отпускает руки, шлёпается в кучу собственных фекалий и говорит:

          - Действительно, Вася, плохо сделали - надо подправить. 

          А вообще, напишите в JetBrains - мол, ребят, сделали плохо, подправить надо


        1. cosmopolitan_29
          07.10.2024 18:14
          +7

          У вас через val может быть объявлена вполне себе переменная, например ссылка на MutableList или ByteArray. Разница между var и val в изменяемости ссылки.


        1. glider_skobb
          07.10.2024 18:14

          И от авторов Свифта тогда тоже. Из официальной документации Swift:

          Swift uses variables to store and refer to values by an identifying name. Swift also makes extensive use of variables whose values can't be changed. - "Свифт использует переменные, чтобы сохранять и ссылаться на значения по имени. Свифт также активно использует переменные, значения которых не могут быть изменены."

          Может быть, если весь мир не прав, а вы правы, стоит задуматься?


  1. XelaVopelk
    07.10.2024 18:14
    +2

    "...переменная, которая не может быть изменяемая..." Если заменить словом "константа", то будет короче. :-)

    PS "...Ну а покойники, бывшие люди, —

    Смелые люди и нам не чета...."


    1. SpaceTimofey Автор
      07.10.2024 18:14

      Спасибо большое, учту в будущих постах! xD


      1. seyko2
        07.10.2024 18:14
        +1

        Не надо. Значение константы обычно требуют указывать сразу. Val скорее переменная, которой можно присвоить значение только один раз.


        1. buratino
          07.10.2024 18:14

          скорее это константа времени исполнения, а чтобы стать "нормальной" константой они придумали const val


  1. RTFM13
    07.10.2024 18:14

    Поправьте, меня если я не прав, но котлин вроде был надстройкой над явой. И по этому любой исходник на котлине имеет ява представление. И выполняется всё это на ява-машине.

    Т.е. котлин это такой синтаксический сахар для явы на максималках.


    1. cosmopolitan_29
      07.10.2024 18:14
      +3

      По такой логике C++ это синтаксический сахар для C


    1. glider_skobb
      07.10.2024 18:14

      Изначально Котлин так и задумывался, но сейчас это уже давно не так. Во-первых, существует Kotlin Native. Это технология, которая позволяет кастомным компилятором собирать исходники на Kotlin в нативные бинарники. Благодаря ей можно писать приложения для iOS, например. Можно конечно писать и для винды или линукса, как на C, но это не очень популярный способ)

      Есть ещё Kotlin JS, транспилятор, который преобразует код на котлине в код на JS, и Kotlin WASM, который может исполнять код на котлине в браузере при помощи WebAssembly.

      К сожалению, тут хочется поправить скорее автора статьи


    1. max-zhilin
      07.10.2024 18:14
      +1

      Kotlin копилируется в байткод для Java-машины, но не сначала в Java, а затем в байткод.

      Но в Java можно транспилировать, как и обратно. Но будет не идеально.


    1. FasdAR
      07.10.2024 18:14

      Нет, Котлин обратно совместим с явой за счёт компиляции кода в промежуточный ява байт код, что позволяет выполнить и ява код на котлине и котлин на яве и тем самым запускать котлин на jvm


  1. souls_arch
    07.10.2024 18:14
    +1

    "Функция - это блок, который может выполнять одно конкретное действие, которое Вы укажите."

    Во-первых, в Котлине, как и в Джаве, функции принято называть методами. Во-вторых, если функция действительно содержит одно конкретное действие в одну строку, то её можно записать сокращенным синтаксисом без фигурных скобок и return. В-третьих, количество действий в функциях не ограничено. Рекомендовано, чтобы они не превышали 20 строк и были объединены общей целью ведущей к конкретному результату. Чаще всего они представляют из себя блок кода, а не одну строку или действие в одну строку.

    Поэтому советую дополнить блок по функциям в статье с дополнительными примерами. Другие дополнения уже дали выше.


    1. seyko2
      07.10.2024 18:14
      +1

      метод - функция, в которой первым параметром является указатель на объект.


    1. Tony-Sol
      07.10.2024 18:14

      Во-первых, в Котлине, как и в Джаве, функции принято называть методами

      Не помню как в java, но в kotlin можно объявлять просто функции на уровне пакета. Разница между методом и функцией в том, что метод принадлежит какому-либо классу и имеет доступ к его состоянию (помимо глобального если оно есть)


  1. KirOFF_YT
    07.10.2024 18:14

    Орфографических и смысловых ошибок, у вас, конечно, хватает с пренебрежением))