Синтаксический сахар для Kotlin (1) Основы

Java задняя часть Spring Kotlin
Синтаксический сахар для Kotlin (1) Основы

Оригинальный адрес:Блог Лян Гуйчжао

адрес блога:blog.720ui.com

Добро пожаловать в перепечатку, пожалуйста, указывайте автора и источник, спасибо!

базовый тип

локальные переменные и изменяемые переменные

Java предоставляет восемь основных типов: byte, short, int, long, float, double, boolean, char. По сравнению с Kotlin его типы данных делятся на: числа, символы, логические значения, массивы и строки. Числовые типы включают Byte, Short, Int, Long, Float, Double и т. д. Обратите внимание, что в Kotlin нет неявного автоматического преобразования типов для чисел, другими словами, меньшие типы не могут быть неявно преобразованы в более крупные типы. Символы в Kotlin представлены типом Char, Boolean — типом Boolean, а строки — типом String.

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

fun main(args: Array<String>) {
    val x: Int = 21
    var y: Int = 11
    val z = 21 // ⾃动推断
}

идентичность и равенство

В Java мы обычно используем equals() для сравнения значения двух переменных на равенство. Помнит ли читатель классический вопрос интервью:Расскажите о разнице между equals и ==. На самом деле, это проблема, которая преследует нас уже давно, и она может упасть в яму, если мы не будем осторожны. Давайте поймем еще раз,==: Сравнивает значения двух переменных на равенство (обычно для сравнения значений двух примитивных типов данных).equals: сравнивает, является ли содержимое двух объектов одинаковым (обычно переопределяет равенство).

Здесь в Kotlin есть два типа равенства: структурное равенство и ссылочное равенство. структурно одинаковые, используйте==Чтобы сравнить значение двух переменных/объектов на равенство, используйте===Сравнивает две ссылки на тот же объект.

fun main(args: Array<String>) {
    val x = "梁桂钊"
    val y = "梁桂钊"
    println(x == y)     // true
    println(x === y)    // true

    val a = 1
    var b = 1
    println(a == b)     // true
    println(a === b)    // true
}

шаблон строки

В Java очень проблематично объединять строки, содержащие переменные, и Kotlin предоставляет краткий способ, чьи строки могут содержать шаблонные выражения, шаблонные выражения начинаются с$начало.

fun main(args: Array<String>) {
    val name = "梁桂钊"
    val blog = "http://blog.720ui.com"
    var content = "我是 $name,博客地址:$blog"
    println(content)
}

собственная строка

На самом деле, Kotlin предоставляет более мощные нативные строки, используя"""Скобки, без экранирования внутри и могут содержать символы новой строки и любые другие символы.

fun main(args: Array<String>) {
    val code = """
            val name = "梁桂钊"
            val blog = "http://blog.720ui.com"
            var content = "我是 ${'$'}name,博客地址:${'$'}blog"
            println(content)
        """
    println(code)
}

Обратите внимание, что шаблоны поддерживаются как для собственных, так и для экранированных строк. Если нам нужно представить в родной строке$символы, нам нужно преобразовать в${'$'}.

Массивы инвариантны

В Kotlin массивы представлены с помощью класса Array, в отличие от Java массивы в Kotlin инвариантны.

Nullable значения и обнаружение null

В Java мы часто сталкиваемся с исключениями NullPointerException (NPE), а система типов Kotlin помогает нам устранить опасность нулевых ссылок из кода. Когда значение переменной может быть нулевым, оно должно быть добавлено после типа объявления.?чтобы указать, что ссылка может быть нулевой.

val blog: String? = "blog.720ui.com"

Здесь мы можем явно проверить, является ли блог нулевым.

if(blog != null){
    println(blog.length)
}

Без этой явной проверки прямой вывод blog.length невозможен (Kotlin выполняет некоторые проверки за нас). Поэтому, если мы думаем, что оно должно иметь значение, преобразуем его вblog!!. Обратите внимание, что если блог пуст, будет выдано исключение NPE.

blog!!.length

Есть еще вариант, можем написать?., возвращает blog.length, если блог не пуст, в противном случае возвращает null.

blog?.length

Кроме того, Kotlin также поддерживает связанные вызовы.Если какое-либо свойство пусто, связанный вызов вернет значение null.

Поэтому с помощью этой функции наш код можно сделать очень кратким.

name?.size
name?.size ?: "empty"
name.getName() ?: throw IllegalArgumentException("name expected")

поток управления

если выражение

В Котлине if можно использовать как оператор.

val max = if (a > b) a else b

Ветвь if также может быть блоком кода с конечным выражением в качестве значения блока.

val max = if (a > b) {
	print("Choose a")
	a
} else {
	print("Choose b")
	b
}

Когда выражение

В языке Java мы используем оператор переключения, но константы (константы перечисления, строки, числа) должны использоваться в качестве ответвлений. В Kotlin, когда используются выражения, разрешен любой тип. На самом деле, выражения When очень гибкие и могут использоваться как выражения, так и операторы. Кроме того, многие переходы должны обрабатываться одинаково, могут поддерживать произвольные выражения в качестве условий переходов, могут определять, находится ли значение в диапазоне или наборе.

fun main(args: Array<String>) {
    val x = 1
    when (x) {
        0 -> print("x == 0")
        1,2 -> print("x == 2")
        in 3..10 -> print("x in 3..10")
        is Any -> print("is Any")
        else -> {
            print("不匹配")
        }
    }
}

Обратите внимание, что, в отличие от Java, нам не нужно писать оператор break для каждой ветки, если он совпал успешно, будет выполнена только соответствующая ветвь.

декларация о деструктуризации

В Kotlin объект можно разложить на множество переменных.

val (name, age) = person
for ((key, value) in map) {}

использованная литература

исходный код

Соответствующий пример полного кода:spring-kotlin-samples

(Конец, перепечатка с указанием автора и источника.)

Еще больше интересных статей в разделе «Серверное мышление»!