Kotlin — это современный язык программирования, который компилируется в байт-код Java. Он бесплатный и с открытым исходным кодом , и обещает сделать кодирование для Android еще более увлекательным.
Kotlin на 100% совместим с Java. Другими словами, его можно использовать вместе с Java в одном проекте. Таким образом, вы можете выполнить рефакторинг частей вашего Java-кода в Kotlin, и он не сломается. В дополнение к этому, это сжато, выразительно, и имеет большое оснащение. Kotlin можно использовать на серверной части (на стороне сервера), но сейчас ему уделяется много внимания как к языку разработки приложений для Android. Kotlin теперь поддерживается Google как первоклассный язык для разработки под Android, поэтому популярность Kotlin взорвется!
В этом первом уроке из серии Kotlin From Scratch вы узнаете об основах языка: комментарии, переменные, простые типы, массивы и вывод типов.
Предпосылки
Чтобы следовать за мной, вам понадобится плагин Kotlin на Android Studio . Кроме того, вы можете использовать онлайн-игровую площадку или IntelliJ IDEA Community Edition .
1. Переменные
В Kotlin используйте val
для объявления константы или var
ключевые слова для объявления переменной. Вы можете указать тип, такой как String
или Int
после имени переменной. В приведенном ниже примере мы объявили константу firstName
типа String
с ключевым словом val
.
1
|
val firstName: String = «Chike»
|
Но вы скоро поймете, что в Kotlin часто можно опустить тип в объявлении, и компилятор не будет жаловаться.
1
|
val lastName = «Mgbemena» // will still compile
|
В приведенном выше коде вы заметите, что мы не указали явно тип String
. Приведенный выше код все еще будет работать, потому что компилятор неявно определил тип, используя вывод типа. Мы вернемся к этому!
Разница между ключевыми словами val
и var
заключается в том, что первое является неизменным или доступно только для чтения (его значение не может быть изменено), а второе является изменяемым (его значение можно изменить).
1
2
3
4
5
|
val dateOfBirth = «29th March, 1709»
dateOfBirth = «25th December, 1600» // cannot be changed
var car = «Toyota Matrix»
car = «Mercedes-Maybach» // can be changed
|
Обратите внимание, что для переменной, объявленной с ключевым словом var
, тип которого определяется компилятором, присвоение другого значения другого типа не будет работать. Другими словами, значение переменной может измениться, но ее тип не может! Например:
1
2
|
var age = 12
age = «12 years old» // Error: type mismatch
|
Настоятельно рекомендуется начать с того, чтобы сделать переменные неизменяемыми, объявив их ключевым словом val
, чтобы не поддерживать слишком много состояний. Это делает ваш код более безопасным для многопоточности, поскольку гарантирует, что ваши переменные не могут быть изменены другими потоками неожиданно.
Еще одна вещь, которую вы должны знать о ключевом слове val
это то, что вы можете объявить его только с типом и присвоить ему значение позже. Но вы все равно можете назначить значение только один раз.
1
2
|
val carName: String
carName = «Toyota Matrix» // will compile
|
В Java можно объявить несколько переменных одного типа в одной строке, но это не работает в Kotlin. В Kotlin все объявления переменных должны быть в своих собственных строках.
1
2
3
4
5
|
val carName = «BMW», streetName = «Oke street» // this won’t compile
// this will compile
var carName = «BMW»
var streetName = «Oke street»
|
2. Введите вывод или вычет
Kotlin — это строго типизированный язык, который поддерживает вывод типов или дедукцию. Это механизм, используемый компилятором для определения типов из контекста. В Java нет механизма вывода типов, что означает, что вы должны явно объявлять тип каждой функции или переменной. Вывод типа помогает уменьшить стандартный код, который вы должны написать.
1
2
|
val country = «Nigeria» // type is inferred by compiler
val code = 234
|
Приведенный выше код будет компилироваться, даже если мы не указали тип переменной страны. Компилятор достаточно умен, чтобы знать, что страна имеет тип String
, потому что значение «Nigeria» является строкой.
3. Основные типы
В Java у нас есть два типа: примитивный (например, int, long, boolean, byte, char и т. Д.) И ссылочный тип (например, array, String
). Java использует оболочки (например, java.lang.Integer
), чтобы примитивные типы вели себя как объекты. Но в Котлине такого различия нет. Вместо этого все типы являются объектами.
чисел
Целочисленные типы, доступные в Kotlin:
-
Long
64 бит -
Int
32 бита -
Short
16 бит -
Byte
8 бит
Типы с плавающей точкой:
-
Double
—64 бит -
Float
32 бита
1
2
3
4
5
6
|
val myInt = 55
val myLong = 40L
val myFloat = 34.43F
val myDouble = 45.78
val myHexadecimal = 0x0F
val myBinary = 0b010101
|
Вы можете заметить, что мы создали литерал Long
, добавив суффикс L
, а для Float
мы добавили суффикс F
или f
. Числа также могут быть записаны в шестнадцатеричном формате с использованием префикса 0x
или 0X
и в двоичном формате с использованием префикса 0b
или 0B
. Обратите внимание, что во всех этих случаях Kotlin может использовать вывод типа, чтобы узнать тип, который мы хотим вместо этого.
1
2
|
val myLong = 19L
val myLongAgain: Long = 40
|
Чтобы преобразовать число из одного типа в другой, вы должны явно вызвать соответствующую функцию преобразования. Другими словами, нет явного преобразования между типами чисел.
1
2
|
val myNumber = 400
val myNumberAgain: Long = myNumber // throws Error: Type mismatch
|
Каждый тип числа имеет вспомогательные функции, которые преобразуют один тип числа в другой: toByte()
, toInt()
, toLong()
, toFloat()
, toDouble()
, toChar()
, toShort()
.
1
2
|
val myInt = 987
val myLong = myInt.toLong()
|
В приведенном выше коде мы конвертируем целое число в длинное. Мы также можем сделать обратное, используя метод toInt()
для длинной переменной. Обратите внимание, что при этом значение будет усечено, чтобы соответствовать меньшему размеру типа Int
если это необходимо, поэтому будьте осторожны при преобразовании больших типов в меньшие!
Вы также можете преобразовать String
в числовой тип.
1
2
|
val stringNumber = «101»
val intValue = stringNumber.toInt()
|
В приведенном выше коде мы преобразовали переменную stringNumber
в тип Int
, вызвав метод toInt()
для переменной. Мы можем написать это более кратко, вместо этого вызывая метод непосредственно в строке:
1
|
val intValue = «101».toInt()
|
Булев тип
Boolean
тип в Kotlin такой же, как в Java. Его значение может быть истинным или ложным. Операции дизъюнкция ( ||
), конъюнкция ( &&
) и отрицание ( !
) Могут выполняться с логическими типами, как и Java.
1
2
3
4
5
6
7
8
9
|
val myTrueBoolean = true
val myFalseBoolean = false
val x = 1
val y = 3
val w = 4
val z = 6
val n = x < z && z > w // n is true
|
Струны
Строки могут быть созданы с двойными или тройными кавычками. Кроме того, escape-символы могут использоваться с двойными кавычками.
1
2
|
val myString = «This is a String»
val escapeString = «This is a string with new line \n»
|
Чтобы создать строку, которая занимает несколько строк в исходном файле, мы используем тройные кавычки:
1
2
3
4
|
val multipleStringLines = «»»
This is first line
This is second line
This is third line «»»
|
Kotlin также поддерживает строковую интерполяцию или строковые шаблоны. Это более простой способ построения динамических строк, чем конкатенация, которую мы используем в Java. Используя строковые шаблоны, мы можем вставить переменные и выражения в строку.
1
2
|
val accountBalance = 200
val bankMessage = «Your account balance is $accountBalance» // Your account balance is 200
|
В приведенном выше коде мы создали строковый литерал, а внутри него мы обратились к переменной с помощью символа $
перед именем переменной. Обратите внимание, что если переменная неверна или не существует, код не будет компилироваться.
А что если вам нужно использовать $
в вашей строке? Вы просто избегаете этого с \$
! Кроме того, вы можете напрямую вызывать методы из интерполированной String
; Вы должны добавить фигурные скобки ${}
чтобы обернуть их.
1
2
|
val name = «Chike»
val message = «The first letter in my name is ${name.first()}» // The first letter in my name is C
|
Еще одна крутая вещь, которую вы можете сделать, это выполнить некоторую логику внутри фигурных скобок при создании литерала String
.
1
2
|
val age = 40
val anotherMessage = «You are ${if (age > 60) «old» else «young»}» // You are young
|
Массивы
В Kotlin существует два основных способа создания массива: использование вспомогательной функции arrayOf()
или конструктора Array()
.
Функция arrayOf()
Например, давайте создадим массив с некоторыми элементами, используя arrayOf()
.
1
|
val myArray = arrayOf(4, 5, 7, 3)
|
Теперь для доступа к любому элементу мы можем использовать его индекс: myArray[2]
. Обратите внимание, что мы можем передавать значения различных типов в arrayOf()
качестве аргументов, и это все равно будет работать — это будет массив смешанного типа.
1
|
val myArray = arrayOf(4, 5, 7, 3, «Chike», false)
|
Чтобы убедиться, что все значения массива имеют одинаковый тип, например Int
, мы объявляем тип, вызывая arrayOf<Int>()
или intArrayOf()
.
1
2
|
val myArray3 = arrayOf<Int>(4, 5, 7, 3, «Chike», false) // will not compile
val myArray4 = intArrayOf(4, 5, 7, 3, «Chike», false) // will not compile
|
У нас также есть другие вспомогательные функции для создания массивов других типов, такие как charArrayOf()
, booleanArrayOf()
, longArrayOf()
, shortArrayOf()
, byteArrayOf()
и так далее. За кулисами использование этих функций создаст массив их соответствующих типов примитивов Java. Другими словами, intArrayOf()
скомпилируется с обычным примитивом Java типа int[]
, byteArrayOf()
будет byte[]
, longArrayOf()
будет long[]
и так далее.
Конструктор Array()
Теперь давайте посмотрим, как создать массив с помощью Array()
. Конструктор этого класса требует размера и лямбда-функции. Мы узнаем больше о лямбда-функциях позже в этой серии, но сейчас просто поймите, что это простой, встроенный способ объявления анонимной функции. В этом случае работа лямбда-функции заключается в инициализации массива с элементами.
1
|
val numbersArray = Array(5, { i -> i * 2 })
|
В приведенном выше коде мы передали 5 в качестве размера массива в первом аргументе. Второй аргумент принимает лямбда-функцию, которая получает индекс элемента массива и затем возвращает значение, которое будет вставлено в этот индекс в массиве. Таким образом, в приведенном выше примере мы создали массив с элементами 0, 2, 4, 6 и 8.
4. Комментарии
Это легко. В Kotlin комментарии такие же, как в Java. Мы можем использовать либо блочные, либо строчные комментарии:
1
2
3
4
5
6
7
8
|
/*
hello, this is a block comment
with multiple lines.
This is another line.
This is another one again
*/
// this is a single line comment
|
Вывод
В этом руководстве вы изучили основы языка программирования Kotlin: переменные, базовые типы, вывод типов, массивы и комментарии. В следующем уроке из серии Kotlin From Scratch вы узнаете о циклах, диапазонах, условиях, коллекциях и пакетах в Kotlin. До скорого!
Чтобы узнать больше о языке Kotlin, я рекомендую посетить документацию Kotlin . Или посмотрите некоторые другие наши учебники по Kotlin здесь, на Envato Tuts +.