LINUX.ORG.RU

Вопросы по kotlin

 ,


1

1

Если умное приведение вам не нужно, то используйте запись с безопасным оператором ?.

val a: Int? = null
a?.toLong()

Функция будет вызвана только в том случае, если значение a отлично от null. Безопасные вызовы можно сцеплять.

Проверяем:

fun main(args: Array<String>) {
  // throw CustomException("Threw custom exception")
  val a: Int? = null
  print(a?.toString())
}

out:

null
★★★★

2 вопрос:

пытаюсь создать пакет. Не получается

cat kitten.kt

@file:JmvName("CatFunctions")
package kitten

fun Zzz(a: Int, b: Int) {
  println("$a" + " " + "$b")
}

cat project.kt

import kitten.CatFunctions

fun main(args: Array<String>) {
  println(CatFunctions.Zzz(b = 16, a = 20))
  println("aaaa")
}
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 3)

Функция toString будет вызвана только если значение отлично от null. Ведь именно она идёт после безопасного оператора, а не print. Если бы toString всё-таки был вызван, то тут выскочил бы NPN.

Weres ★★★
()
Ответ на: 2 вопрос: от bryak

Вместо println("$a" + " " + "$b") можно просто записать println("$a $b")

ma1uta ★★★
()
Ответ на: 2 вопрос: от bryak
package kitten

fun Zzz(...) {...}
import kitten.Zzz

fun main(args: Array<String>) {
  println(Zzz(b = 16, a = 20))
  println("aaaa")
}

или

package kitten

object CatFunctions {

fun Zzz(...) {...}

}
import kitten.CatFunctions

fun main(args: Array<String>) {
  println(CatFunctions.Zzz(b = 16, a = 20))
  println("aaaa")
}

P.S.: пишу по памяти.

ma1uta ★★★
()
Ответ на: комментарий от ratvier
fun main(args: Array<String>) {
  val a: Int? = null
  (a?.let
   ({ a ->
        (print
         (a.toString()))
  }))
}

out:

   ({ a ->

если сделать не null

fun main(args: Array<String>) {
  val a: Int? = 12
  (a?.let
   ({ a ->
        (print
         (a.toString()))
  }))
}

out:

project.kt:16:7: warning: name shadowed: a
   ({ a ->
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от ma1uta

нужно было указать при компиляции файл kitten.kt. Вопрос решен

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)

Ну раз уж тут набрасывают… не могу сказать что то, что я вижу выглядит лучше руста.

abcq ★★
()

вопрос про typealias

typealias DoubleConversion = (Double) -> Double

fun main(args: Array<String>) {
 val test: DoubleConversion
 val convert = { d: Double -> d * 2}
 test = convert
 print(test(2.12))
}

out:

4.24

А вот с функцией это не получается сделать

typealias DoubleConversion = (Double) -> Double
fun convert(d: Double) -> Double = d*2

fun main(args: Array<String>) {
  // throw CustomException("Threw custom exception")
  val test: DoubleConversion
 test = convert
 print(test(2.12))
}

Как это правильно реализовать?

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)

как импортировать функции из android.* в standalone .kt?

Пробую сделать

import android.graphics.Color.*

fun main(args: Array<String>) {
  println("some")
}

и получаю:

project.kt:54:8: error: unresolved reference: android
import android.graphics.Color.*
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
print(a?.toString())

'a?.toString()' означает, что функция 'toString' не будет вызвана и исключения по nullptr не будет

в свою очередь 'print' может принимать null строку, значит код корректен и выведет 'null'

если не хочется вызывать функцию, то пишем

a?.let { print(it) }

это означает, что let будет вызван только если 'a' не null, а в теле функции мы печатаем строку 'it', которая передана параметром в 'let'.

pozitiffcat ★★★
()

как искать методы?

>>> import android.support.v7.app.AlertDialog
error: unresolved reference: support
import android.support.v7.app.AlertDialog

Как узнать, где «лежит» AlertDialog?

bryak ★★★★
() автор топика

Вопрос про when и android.graphics.Color

fun getMnemonic(color: Color) =
    when (color) {
        Color.RED -> "кот"
        Color.ORANGE -> "охотник"
        Color.YELLOW -> "желает"
        Color.GREEN -> "знать"
        Color.BLUE -> "где"
        Color.INDIGO -> "сидят"
        Color.VIOLET -> "фазаны"
}

text_id.setText(getMnemonic(Color.INDIGO))

out:

> Task :app:compileDebugKotlin FAILED
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (243, 9): Incompatible types: Int and Color
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (244, 15): Unresolved reference: ORANGE
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (245, 9): Incompatible types: Int and Color
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (246, 9): Incompatible types: Int and Color
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (247, 9): Incompatible types: Int and Color
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (248, 15): Unresolved reference: INDIGO
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (249, 15): Unresolved reference: VIOLET
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (263, 17): None of the following functions can be called with the arguments supplied:
bryak ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.