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/