Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
fun main() {
sendMessageToClient(
Client(PersonalInfo(null)),//"John@Company.com")),
null,//"Wellcome ",
ConsoleMailer()
)
}
class Client(val personalInfo: PersonalInfo?)
class PersonalInfo(val email: String?)
interface Mailer {
fun sendMessage(email: String, message: String)
}
class ConsoleMailer : Mailer {
override fun sendMessage(email: String, message: String) {
println("Message to: $email\n$message")
}
}
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email = client?.personalInfo?.email
email?.let { mailer.sendMessage(it, message ?: "No message") }
}
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email = client?.personalInfo?.email
email?.let { mailer.sendMessage(it, message ?: "No message") }
}
Bármely típus után írt kérdőjel azt jelenti, hogy az ilyen típusú változók hivatkozhatnak null-ra.
Kérdőjel nélküli típus nem hivatkozhat null-ra.
Így az össze reguláris típus alapértelmezetten nem-null.
message lehet null
mailer nem lehet null
client lehet null
client: Client?, message: String?, mailer: Mailer
fun main() {
sendMessageToClient(
Client(PersonalInfo(email=null)),
message=null,
mailer = null
)
}
Error:(5, 18) Kotlin: Null can not be a value of a non-null type Mailer
Magában foglalja a null ellenőrzést és a metódushívást
Az ilyen hívások visszetérési értéke lehet null
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
if (client == null message == null) return
val personalInfo = client.personalInfo
if (personalInfo == null) return
val email = personalInfo.email
if (email == null) return
mailer.sendMessage(email, message)
}
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email=client?.personalInfo?.email
if (email == null message==null) return
mailer.sendMessage(email,message)
}
Null-coalescing operator (Nullhoz értéket rendelő operátor)
Alapértelmezett értéket ad a null helyett
Két operandusa van, az értéke:
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email=client?.personalInfo?.email
if (email == null message==null) return
mailer.sendMessage(email,message)
}
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email=client?.personalInfo?.email
if (email == null ) return
mailer.sendMessage(email,message ?: "No message")
}
Meghívja a függvényt az adott argumentummal, mint paraméterrel, ha az nem null, különben nem történik semmi.
A leggyakrabban akkor használják, amikor egy függvény paramétere nem lehet null, de az átadni kívánt argumentum lehet.
email!=null
mailer.sendMessage(email,..)
email?.let {
mailer.sendMessage(email,..) }
Nothing happens
email==null
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email=client?.personalInfo?.email
email?.let {
mailer.sendMessage(email, message ?: "No message") }
}
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer) {
val email=client?.personalInfo?.email
if (email == null ) return
mailer.sendMessage(email,message ?: "No message")
}
Az "email" argumentum helyettesíthető az "it"-tel
email?.let { mailer.sendMessage(it, message ?: "No message") }
Ennek megértéséhez a lambda kifejezések ismerete szükséges.
A prezentálció az Óbudai Egyetem
"Android fejlesztés Kotlin nyelven" kurzusához készült.
Szerző: Erdélyi Krisztina
Források:
[1] D. Jemerov, S. Isakova: Kotlin in Action, Manning, 6. fejezet letölthető:
https://livebook.manning.com/book/kotlin-in-action/chapter-6/
[2] https://play.kotlinlang.org/koans/Introduction/Nullable%20types/Task.kt