Сообщения

Пакеты и импорты в Kotlin

Изображение
Исходный файл может начинаться с объявления пакета: package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... Все содержимое (например, классы и функции) исходного файла содержатся в объявленном пакете. Итак, в приведенном выше примере полное имя printMessage() - org.example.printMessage, а полное имя Message - org.example.Message. Если пакет не указан, содержимое такого файла принадлежит пакету по умолчанию, который не имеет имени. Импорты по умолчанию Ряд пакетов импортируется в каждый файл Kotlin по умолчанию: kotlin.* kotlin.annotation.* kotlin.collections.* kotlin.comparisons.* (since 1.1) kotlin.io.* kotlin.ranges.* kotlin.sequences.* kotlin.text.* Дополнительные пакеты импортируются в зависимости от целевой платформы: JVM: java.lang.* kotlin.jvm.* JS: kotlin.js.* Импорты Помимо импорта по умолчанию, каждый файл может содержать свои собственные директивы импорта. Мы можем импортировать одно имя, например, impo...

Строки в Kotlin

Изображение
Строки представлены типом String . Строки неизменны. Элементы строки - это символы, к которым можно обратиться с помощью операции индексации: s[i]. Строка может быть повторена с помощью цикла for: for (c in str) { println(c) } Вы можете объединять строки, используя оператор +. Это также работает для объединения строк со значениями других типов, если первый элемент в выражении является строкой: val s = "abc" + 1 println(s + "def") Обратите внимание, что в большинстве случаев использование строковых шаблонов или необработанных строк предпочтительнее конкатенации строк. Строковые литералы В Kotlin есть два типа строковых литералов: экранированные строки, в которых могут быть экранированные символы, и необработанные строки, которые могут содержать символы новой строки и произвольный текст. Вот пример экранированной строки: val s = "Hello, world!\n" Экранирование выполняется обычным способом с обратной косой чертой. Необработанная с...

Целые числа без знака в Kotlin

Изображение
Типы без знака доступны только с Kotlin 1.3 и в настоящее время являются экспериментальными. Kotlin вводит следующие типы для целых чисел без знака (unsigned integers): kotlin.UByte: 8-разрядное целое число без знака, от 0 до 255 kotlin.UShort: 16-разрядное целое число без знака, от 0 до 65535 kotlin.UInt: 32-разрядное целое число без знака, от 0 до 2^32 - 1 kotlin.ULong: 64-разрядное целое число без знака, от 0 до 2^64 - 1 Типы без знака поддерживают большинство операций их аналогов со знаком. Обратите внимание, что изменение типа с типа без знака на аналог со знаком (и наоборот) является двоичным несовместимым изменением. Типы без знака реализованы с использованием другой экспериментальной функции, а именно встроенных классов (inline classes). Специализированные классы Так же, как и для примитивов, каждый тип без знака имеет соответствующий тип, представляющий массив, специализированный для этого типа без знака: kotlin.UByteArray: массив байтов без знака kotlin.UShortA...

Массивы в Kotlin

Изображение
Массивы в Kotlin представлены классом Array, который имеет функции get и set (которые превращаются в [] в соответствии с соглашениями о перегрузке операторов) и свойство size вместе с несколькими другими полезными функциями-членами: class Array<T> private constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator<T> // ... } Чтобы создать массив, мы можем использовать библиотечную функцию arrayOf() и передать ей значения элементов, так что arrayOf(1, 2, 3) создаст массив [1, 2, 3]. Кроме того, библиотечная функция arrayOfNulls() может использоваться для создания массива заданного размера, заполненного null элементами. Другой вариант - использовать конструктор Array, который принимает размер массива, и функцию, которая может возвращать начальное значение каждого элемента массива с учетом его индекса: // Создает Array<String> со значениями ["0", ...

Булев тип в Kotlin

Изображение
Тип Boolean представляет логическое значение и имеет два значения: true и false. Булевы значения упаковываются, если требуется nullable ссылка. Встроенные операции над логическими значениями включают || - ленивое ИЛИ && - ленивое И ! - отрицание Читайте также: Операции с числовыми типами в Kotlin Литеральные константы чисел в Kotlin Числовые типы в Kotlin: представление, явные преобразования

Символы в Kotlin

Изображение
Символы в Kotlin представлены типом Char . Их нельзя трактовать напрямую как числа fun check(c: Char) { if (c == 1) { // ОШИБКА: несовместимые типы // ... } } Символьные литералы идут в одинарных кавычках: '1'. Специальные символы могут быть экранированы с помощью обратной косой черты. Поддерживаются следующие escape-последовательности: \t, \b, \n, \r, \', \", \\ и \$. Чтобы кодировать любой другой символ, используйте синтаксис escape-последовательности Unicode: '\uFF00'. Мы можем явно преобразовать символ в Int число: fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') throw IllegalArgumentException("Out of range") return c.toInt() - '0'.toInt() // Явные преобразования в числа } Как и числа, символы помещаются в контейнер, когда требуется обнуляемая ссылка. Идентичность не сохраняется в результате операции помещения в контейнер. Читайте также: Операции с числовыми типам...

Сравнение чисел с плавающей точкой в Kotlin

Изображение
Операции над числами с плавающей запятой, обсуждаемые в этом посте: Проверка на равенство: a == b и a != b Операторы сравнения: a < b, a > b, a <= b, a >= b Создание экземпляра диапазона и проверка диапазона: a..b, x in a..b, x !in a..b Когда операнды a и b статически известны как Float или Double или их обнуляемые аналоги (тип объявляется или выводится или является результатом умного приведения), операции над числами и диапазоном, который они формируют, соответствуют IEEE 754 стандарту для арифметики с плавающей точкой. Однако для поддержки общих вариантов использования и обеспечения общего упорядочения, когда операнды не статически типизированы как числа с плавающей запятой (например, Any, Comparable<...>, параметр типа), в операциях используются реализации equals и compareTo для Float и Double, который не соответствует стандарту, так что: NaN считается равным себе NaN считается больше, чем любой другой элемент, включая POSITIVE_INFINITY -0.0 считается ме...