English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Introduzione
Una delle potenti caratteristiche di Kotlin è la funzione di estensione, l'uso astuto di queste funzioni di estensione può rendere il codice più elegante e più fluido da leggere. Di seguito sono riassunti alcuni dei funzioni di estensione inline utilizzati frequentemente durante la sviluppo. Spesso ci sono amici che non capiscono come utilizzare funzioni come with, run, apply e così via, dove e quando utilizzarle. Il mio consiglio è di ricordare prima la funzione di ciascuna funzione (non fa altro che cosa richiede i parametri? Qual è il valore di ritorno?) Ricordando questi due punti, è possibile utilizzare gradualmente con competenza secondo la scena di sviluppo reale. In effetti, queste funzioni sono molto simili, diverse funzioni possono completare la stessa funzione, come può essere visto anche dagli esempi seguenti. Durante la mia esperienza di sviluppo, queste funzioni vengono principalmente utilizzate in due scenari, uno è la verifica non nulla, l'altro è l'inizializzazione dell'oggetto o la chiamata frequente dei metodi stessi.
La differenza tra una funzione inline e una funzione normale non risiede nelle differenze di definizione. Per definire una funzione inline è sufficiente aggiungere un identificatore, il che consente di trasformare una funzione normale in una funzione inline. La differenza effettiva risiede nel meccanismo di gestione durante l'esecuzione. Le funzioni inline sono meno costose in termini di prestazioni, hanno meno operazioni di stack push e pop, e rappresentano un modo per scambiare spazio con tempo. Le funzioni con corpo breve e chiamate frequenti sono adatte per essere definite come funzioni inline.
1. with
Definizione: fun <T, R> with(receiver: T, block: T.() -> R): R
Funzione: utilizzare l'oggetto come parametro della funzione, all'interno della funzione è possibile utilizzare this per riferirsi all'oggetto. Il valore di ritorno è l'ultima riga della funzione o l'espressione return.
Esempio:
1. In un view personalizzato quando inizializziamo lo spazzolino spesso scriviamo il codice seguente
var paint = Paint() paint.color = Color.BLACK paint.strokeWidth = 1.0f paint.textSize = 18.0f paint.isAntiAlias = true
Se si utilizza with, può essere scritto così
var paint = Paint() with(paint) { color = Color.BLACK strokeWidth = 1.0f textSize = 18.0f isAntiAlias = true }
Sembra più naturale scrivere senza paint. dopo.
2. In situazioni di dichiarazione di alcune raccolte come:
var list= mutableListOf<String>() list.add("1") list.add("2") list.add("3")
L'uso di with può essere scritto come
var list = with(mutableListOf<String>()) { add("1") add("2") add("3") this }
Ci sono molte altre situazioni durante lo sviluppo in cui può essere utilizzata la funzione with, comprendere le funzionalità di with permette di utilizzare in modo flessibile.
2. takeIf e takeUnless
takeif
Definizione: fun <T> T.takeIf(predicate: (T) -> Boolean): T?
Funzione: Passa una funzione come parametro, se il risultato della funzione è true, restituisce l'oggetto T, altrimenti restituisce null.
Esempio: Quando si utilizza un file File, di solito si verifica se il file esiste, ad esempio
var file = File("filePath") if (file.exists()) { //fare qualcosa } else { return false }
Dopo l'uso di takeIf
var file = File("filePath").takeIf { it.exists() }?:return false //fare qualcosa
takeUnless
Definizione: fun <T> T.takeUnless(predicate: (T) -> Boolean): T?
Funzione: Contrario a takeIf, restituisce l'oggetto T se la funzione di parametro restituisce false, altrimenti restituisce null. Esempi non inclusi.
3. run
Definizione:
(1) fun <R> run(block: () -> R): R
(2)fun <T, R> T.run(block: T.() -> R): R
Funzione: Chiamare la funzione run, il valore di ritorno è l'ultima riga del corpo della funzione o l'espressione return specificata.
Esempio:
Restituisce l'ultima riga
kotlin.run { println("11") println("22") }
Risultato:
I/System.out: 11
I/System.out: 22
Restituisce l'espressione return, il codice dopo return non viene eseguito (attenzione alla scrittura @run)
kotlin.run { return@run println("11") println("22") }
Risultato:
I/System.out: 11
4. repeat
Definizione: fun repeat(times: Int, action: (Int) -> Unit)
Funzione: Esegue l'azione funzione times volte, times inizia da 0
Esempio: Simile alla funzione for, ad esempio
repeat(5){ println("count:$it") }
Uguale a
for (i in 0..4) { println("count:$i") }
O
(0..4).forEach{println("count:$it")}
5. let
Definizione: fun <T, R> T.let(block: (T) -> R): R
Funzione: Chiamare la funzione let dell'oggetto (T), che è il parametro della funzione. All'interno della funzione, è possibile riferirsi all'oggetto tramite it. Il valore di ritorno è l'ultima riga della funzione o l'espressione return specificata.
Esempio: un po' simile a run(), let può essere utilizzato per la verifica della sicurezza vuota, variabile?.let{}
Ad esempio
val data = …… data?.let { …… // Se data non è null, il codice esegue fino a questo punto }
6. apply
Definizione: fun <T> T.apply(block: T.() -> Unit): T
Funzione: Chiamare la funzione apply dell'oggetto, all'interno della funzione, è possibile chiamare qualsiasi metodo dell'oggetto in modo arbitrario e restituire l'oggetto.
Esempio:
var list = mutableListOf<Int>().apply { add(1) add(2) add(3) }
Attenzione:La differenza tra lui e la funzione run, run restituisce l'ultima riga, apply restituisce l'oggetto stesso, dalla definizione della funzione apply possiamo vedere che apply è adatto a quei casi in cui l'inizializzazione dell'oggetto richiede l'assegnazione delle sue proprietà.
oppure usiamo l'esempio del pennello
originale
var paint = Paint() paint.textSize = 14.0f paint.color = Color.WHITE paint.isAntiAlias = false
Dopo l'uso di apply
var paint = Paint().apply { textSize = 14.0f color = Color.WHITE isAntiAlias = false }
Inoltre, poiché la funzione apply restituisce l'oggetto stesso, può essere combinata con ?. per completare operazioni di controllo non vuoto a più livelli o utilizzata nel Builder dello schema Builder
7. also
Definizione: fun <T> T.also(block: (T) -> Unit): T
Funzione: chiamare la funzione also dell'oggetto, all'interno del blocco della funzione è possibile utilizzare it
Riferimento all'oggetto, il valore di ritorno è l'oggetto stesso. (Attenzione alla differenza rispetto alla funzione let, che restituisce l'ultima riga, mentre also restituisce l'oggetto stesso)
Esempio: necessario restituire l'oggetto stesso (this) in casi come lo schema Builder.
Sommario
Questo è tutto il contenuto dell'articolo. Spero che il contenuto di questo articolo abbia un valore di riferimento per la tua apprendimento o lavoro. Se hai domande, puoi lasciare un commento per discuterne. Grazie per il supporto di tutti per il manuale di urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi proprietari. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.