Kotlin — примеры использования
Привет! Сегодня рассмотрим некоторые полезные примеры использования Kotlin - массивы, списки, корутины, дженерики и многое другое.
FizzBuzz на Kotlin
FizzBuzz - популярная задачка на собеседованиях для проверки базовых знаний языка и логического мышления.
По условию задачи нужно вывести числа от 1 до 100, и если число кратно 3 - вывести Fizz, если без остатка делится на 5 - Buzz, а если на 3 и на 5 - FizzBuzz.
fun fizzBuzzWhen(n: Int) =
when {
n % 15 == 0 -> "FizzBuzz"
n % 5 == 0 -> "Buzz"
n % 3 ==0 -> "Fizz"
else -> n
}Тут используется оператор - when, который в зависимости от условия возвращает значение. Теперь проверим работу
(1..100).map {
println( fizzBuzzWhen(it) )
}Все работает как надо!
Bufferedimage черно белое изображение
Тут мы просто используем класс ColorConvertOp и с помощью ColorSpace.CS_GRAY получаем черно белую картинку.
fun BufferedImage.desaturate(): BufferedImage {
val colorConvert = ColorConvertOp (
ColorSpace.getInstance(ColorSpace.CS_GRAY), null
)
return colorConvert.filter(this, this)
}Функция написана в виде расширения для java BufferedImage
Как перевести hex в Color?
Простое свойство в виде лямбды, которое принимает на вход строку вида - dd7c2b, где dd7c2b - hex цвет, и возвращает стандартный java Color
val toRGB = { hex: String ->
val blue: Int = hex.toInt(16) and 0xff
val green: Int = hex.toInt(16) and 0xff00 shr 8
val red: Int = hex.toInt(16) and 0xff0000 shr 16
Color(red,green,blue)
}Асинхронно загрузить и прочитать File coroutines Kotlin
Для асинхронной загрузки файлов нам потребуется подключить корутины, и воспользоваться билдером async await
suspend fun writeContentAsync(
file: String, data: ByteArray, add: Boolean = false
) =
coroutineScope {
val dataStr = async(Dispatchers.IO) {
FileOutputStream(file, add).write(data)
}
try {
dataStr.await()
} catch (ex: Exception) {
throw Exception("Error: ${ex.message}")
}
}В переменную dataStr присваиваем наш async await и в блоке try catch проверяем на ошибки. Если все ок, то возвращаем результат, если возникает ошибка - выбрасываем throw Exception("Error: ${ex.message}")
По такому же принципу читаем файл
suspend fun getContentAsync(file: String): InputStream =
coroutineScope {
val dataStr = async(Dispatchers.IO) {
FileInputStream(file)
}
try {
dataStr.await()
} catch (ex: Exception) {
throw Exception("Error: ${ex.message}")
}
}Больше статей на эту тему читайте в моем блоге - https://fox-code.ru/