Untitled
unknown
kotlin
a year ago
8.1 kB
8
Indexable
package nowiwr01p.daily.doctor.server.main.igor import java.util.Locale import kotlin.math.abs import kotlin.math.max import kotlin.math.min import kotlin.math.pow fun main() { // Variables() // Types() // Types1() // BaseOperations() // Strings() Lists() // Cycles() } private fun Variables() { val x = 0 // x += 1 --- !!! Ошибка !!! println("Если попытаемся изменить x, то получим ошибку") println("Дело в том, что [val] = неизменяемая переменная, а [var] = изменяемая") println("Поэтому, чтобы банально увеличивать счётчик, нам нужна [var] переменная") var x1 = 0 x1 += 1 } /** * Обычно мы работаем только с этими типами * Штуки по типу UInt (unsigned int), в отличии от C++, в Kotlin нужны оч редко */ private fun Types() { val x = 2 // Int println("1) Явное приведение типов") println("- x type = ${x::class.simpleName}") val x1 = x.toLong() println("- x1 type = ${x1::class.simpleName}") val x2 = x.toFloat() println("- x2 type = ${x2::class.simpleName}") val x3 = x.toDouble() println("- x3 type = ${x3::class.simpleName}") val x4 = x.toString() println("- x4 type = ${x4::class.simpleName}") } private fun Types1() { val x = 2 // Int println("2) Неявное приведение типов") val y1 = x * 5 // Int * Int = Int println("- y1 = ${y1::class.simpleName}") val y2 = x * 5L // Int * Long = Long println("- y2 = ${y2::class.simpleName}") val y3 = x * 5f // Any type * Float = Float println("- y3 = ${y3::class.simpleName}") val y4 = x * 5f * 10L // Even if we add multiple to Long, it's still a Float, but... println("- y4 = ${y4::class.simpleName}") val y5 = x * 5L * 10.toDouble() / 0.5f // ...except Double. Any type * Double = Double println("- y5 = ${y5::class.simpleName}") println("Такая логика работает со всеми видами арифметических операций. Кстати, про операции") } private fun BaseOperations() { println("3) Другие операции") val t1 = min(2, 5) println("- t1 = $t1") val t2 = max(2, 5) println("- t2 = $t2") val t3 = abs(-5) println("- t3 = $t3") val t4 = 2.toDouble().pow(3).toLong() // This shit works only if the first number ("2" here) is a Double println("- t4 = $t4") } private fun Strings() { println("4) Операции со строками") val string = "hi, this is a string" println(string.length) println(string.drop(7)) // cut "string" suffix println(string.take(2)) // tale "hi" prefix println(string.substring(startIndex = 3)) // " this is a string" println(string.substring(startIndex = 3).trim()) // "this is a string" (without start and end whitespaces) println(string.substring(startIndex = 4, endIndex = 11)) // "this is" (11 index is exclusive) println(string.dropWhile { it.isLetter() }) // ", this is a string" println(string.takeWhile { it.isLetter() }) // "hi" println(string.takeWhile { it.isDigit() }) // empty string println("$string, but this is my dick") // concat println(string.split(" ")) // ["hi,", "this", "is", "a", "string"] println(string.split(",")) // ["hi", " this is a string"] println(string.split(" is ")) // ["hi, this", "a string"] println(string.toCharArray().toList()) // each symbol val stringWithPattern = "my dick is %s, exactly %d cm" val dickStringWithoutNamedParameters = String.format( Locale.getDefault(), stringWithPattern, "big", 9 ) val dickStringWithNamedParameters = String.format( locale = Locale.getDefault(), format = stringWithPattern, args = arrayOf("small", 228) ) println(dickStringWithNamedParameters) println(dickStringWithoutNamedParameters) println("Когда речь идет о Kotlin, то тут все любят именованные параметры") println("Если у функции 1 аргумент, то можно и без этого. Если 2 - то 50/50, но лучше именованные. Если 3 и не именованные - то ты пидарас") println("Зачем использовать именованные параметры - станет понятнее, когда напишем классы") } private fun Lists() { println("5) Массивы") println("В основном все используют List<T>, реже Array<T>") val emptyList = listOf<Int>() // Пустой список, в котором могли бы храниться числа println("emptyList.size = ${emptyList.size}") println("Если попытаемся вызвать [emptyList.first()] или [emptyList[anyIndex]], то будет краш") val initializedList = listOf("Однажды", "Миксер", "шел", "домой...") println("initializedList = $initializedList") println("Если мы попытаемся изменить элемент такого списка через initializedList[1] = \"huj\", то получим ошибку") println("Почему? У нас же с переменными всё работало") println("А тут есть такое понятие, как [MutableList] и [ImmutableList]") println("Если хотим изменять или добавлять элементы, то нам нужен [MutableList], для которого есть красивый синтаксический сахар") val mutableList = mutableListOf(1, 2, 3) println("mutableList = $mutableList") mutableList[1] = 228 println("changed mutableList = $mutableList") println("Так же мы можем превращать [ImmutableList aka listOf()] в [MutableList]") val transformedImmutableList = initializedList.toMutableList().apply { add("и оказался голубой") } println("transformedImmutableList = $transformedImmutableList") } private fun Cycles() { println("6) Циклы") println("Ну тут в консоли ничего не будет, ха-ха") /** * Обычный цикл for. В основном, такой синтаксис используют геи и деды * Но иногда, очень-очень редко, бывает нужен */ println("Наебал)0))0") println("Вот дедовский for") for (number in 100 downTo 0 step 2) { print("$number ") } println() for (number in 15 until 100 step 5) { print("$number ") } println() for (number in 10..20) { print("$number ") } println() for ((index, number) in (10..15).withIndex()) { print("$index = $number, ") } println() /** * Синтаксически красивый for */ println("А теперь красивый for") (1..10).forEach { print("$it ") // it = дефолтное имя аргумента. Но его можно указать } println() (1..10).forEach { number -> print("$number ") } /** * Указывать имя аргумента или нет - дело каждого * Иногда прям надо, потому что может быть несколько вложенных [it], а иногда * для красоты можно обойтись и без него */ println() (1..10).forEachIndexed { index, number -> print("$index = $number, ") } println("Есть ещё всякие [do] и [do-while] циклы, но я их использовал ровно 1 раз за 5 лет") println("поэтому я бы на них забил хуй") }
Editor is loading...
Leave a Comment