Статьи

Kotlin From Scratch: переменные, базовые типы и массивы

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 .

В 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»

Kotlin — это строго типизированный язык, который поддерживает вывод типов или дедукцию. Это механизм, используемый компилятором для определения типов из контекста. В Java нет механизма вывода типов, что означает, что вы должны явно объявлять тип каждой функции или переменной. Вывод типа помогает уменьшить стандартный код, который вы должны написать.

1
2
val country = «Nigeria» // type is inferred by compiler
val code = 234

Приведенный выше код будет компилироваться, даже если мы не указали тип переменной страны. Компилятор достаточно умен, чтобы знать, что страна имеет тип String , потому что значение «Nigeria» является строкой.

В 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() .

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() . Конструктор этого класса требует размера и лямбда-функции. Мы узнаем больше о лямбда-функциях позже в этой серии, но сейчас просто поймите, что это простой, встроенный способ объявления анонимной функции. В этом случае работа лямбда-функции заключается в инициализации массива с элементами.

1
val numbersArray = Array(5, { i -> i * 2 })

В приведенном выше коде мы передали 5 в качестве размера массива в первом аргументе. Второй аргумент принимает лямбда-функцию, которая получает индекс элемента массива и затем возвращает значение, которое будет вставлено в этот индекс в массиве. Таким образом, в приведенном выше примере мы создали массив с элементами 0, 2, 4, 6 и 8.

Это легко. В 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 +.

  • Android SDK
    Совет: пишите более чистый код с помощью Kotlin SAM Conversions
    Ашраф Хатхибелагал
  • Android Studio
    Создание функциональных приложений для Android в Kotlin: начало работы
    Джессика Торнсби
  • Android SDK
    Java против Kotlin: стоит ли использовать Kotlin для разработки под Android?
    Джессика Торнсби