Ang typealias ay isang mekanismo ng Kotlin para sa paglikha ng alternatibong pangalan ng isang umiiral na uri. Ang keyword na typealias ay nagpapahintulot na palitan ang isang kumplikadong deklarasyon ng uri ng isang maikli at naiintindihang alias, nang hindi lumilikha ng bagong uri. Ayon sa dokumentasyon ng Kotlin (2026), pinapabuti ng typealias ang pagiging madaling mabasa ng code, lalo na sa mga lagda ng function na may mga functional na uri. Typealias ginagawang self-documenting ang code, pinapalitan ang mga verbose na deklarasyon ng mga naiintindihang pinangalanang uri.
Mga pangunahing punto
Typealias (alias ng uri) — isang deklarasyon na nagpapakilala ng alternatibong pangalan para sa isang umiiral na uri. Syntax: typealias BagongPangalan = UmiiralNaUri. Pagkatapos ng deklarasyon, ang BagongPangalan ay maaaring gamitin kahit saan kung saan inaasahan ang UmiiralNaUri — itinuturing sila ng compiler bilang parehong uri. Sa antas ng bytecode, ang typealias ay hindi nag-iiwan ng bakas: lahat ng impormasyon tungkol sa alias ay binubura sa yugto ng compilation.
Ang pangunahing layunin ng typealias ay pagpapabuti ng pagiging madaling mabasa ng code. Sa halip na isang mahabang lagda fun process(callback: (Result) -> Unit) maaaring sumulat ng typealias Callback = (Result) -> Unit at gamitin ang Callback bilang uri ng parameter. Ito ay lalong kapaki-pakinabang kapag ang parehong functional na uri ay umuulit sa maraming lugar sa code: ang alias ay nagsisilbing nag-iisang punto ng kahulugan at nagdodokumento ng layunin ng uri.
Ang typealias ay hindi lumilikha ng bagong uri — ito ay isang kasingkahulugan lamang. Ang mga variable ng uri Callback at (Result) -> Unit ay ganap na napagpapalit. Hindi magbibigay ng error ang compiler kung ang isang lambda ay direktang ipapasa sa isang function na umaasa ng Callback. Ito ang nagpapakilala sa typealias mula sa inline class (value class), na lumilikha ng bagong uri-ng-pambalot na may pagsusuri sa yugto ng compilation. Ang typealias ay pagpapalit ng pangalan, hindi pambalot.
Ang pinakakaraniwang senaryo ng paggamit ng typealias sa Kotlin ay mga functional na uri. Ang mahahabang lagda tulad ng (Int, String) -> Boolean o (List
// Walang typealias
fun findUsers(
filter: (List<User>) -> List<User>
): List<User>
// May typealias
typealias UserFilter = (List<User>) -> List<User>
fun findUsers(filter: UserFilter): List<User>
// Paggamit sa klase
typealias OnClickListener = (View) -> Unit
class Button {
var onClick: OnClickListener = {}
}
Sa halimbawa, ang typealias UserFilter ay nagtatago ng kumplikadong functional na uri (List
Typealias ay sumusuporta sa mga generic na parameter, na ginagawang mas flexible. Maaaring tukuyin ang typealias Mapper
// Generic na typealias
typealias Mapper<T, R> = (T) -> R
typealias Provider<T> = () -> T
typealias ListTransformer<T> = (List<T>) -> List<T>
fun processNumbers(mapper: Mapper<Int, String>) {
// uri ng mapper ay (Int) -> String
}
fun main() {
val config: Provider<String> = { "default config" }
val reverse: ListTransformer<Int> = { it.reversed() }
}
Sa listing, Mapper
Mga nested class at mahabang naka-parameter na uri — isa pang lugar kung saan ang typealias ay nagpapasimple ng code. Kung ang isang klase ay nasa malalim na bahagi ng hierarchy ng nesting (Outer.Inner.Nested), ang pagtukoy dito sa pamamagitan ng buong pangalan ay nagpapagulo sa code. Pinapaikli ng typealias ang pag-access na ito at ginagawa itong mas nababasa. Ito ay lalong mahalaga para sa mga klase mula sa mga third-party na library na may mahabang pangalan.
// Alias para sa nested class
class NetworkResponse {
class Error(val code: Int, val message: String)
}
typealias NetworkError = NetworkResponse.Error
// Alias para sa mahabang uri ng library
typealias UserId = Long
typealias JsonMap = Map<String, Any?>
fun process(error: NetworkError) {
println("${error.code}: ${error.message}")
}
fun parseJson(data: JsonMap): UserId {
return data["id"] as? Long ?: 0L
}
Sa halimbawa, NetworkError — alias para sa nested class na NetworkResponse.Error. Sa pag-import ng typealias, ang NetworkError ay maaaring gamitin bilang isang ordinaryong uri, nang hindi isinisiwalat ang hierarchy ng nesting. JsonMap ay nagdodokumento na ang mapa ay kumakatawan sa isang JSON object. UserId ay nagpapaliwanag ng layunin ng Long sa partikular na konteksto — ang mambabasa ay agad na nauunawaan na ito ay isang identifier ng user, hindi isang arbitrary na numero. Gayunpaman, hindi pinoprotektahan ng typealias laban sa pagpasa ng ordinaryong Long kung saan inaasahan ang UserId — para diyan kailangan ang value class.
Typealias at inline class (value class) ay lumulutas ng iba't ibang gawain, kahit na pareho silang nagpapakilala ng bagong pangalan para sa isang uri. Ang typealias ay isang kasingkahulugan lamang: ang variable ng uri UserId = Long ay tumatanggap ng anumang Long nang walang pagsusuri. Ang inline class ay bumabalot ng halaga sa isang bagong uri na sinusuri sa yugto ng compilation: ang pagpasa ng ordinaryong Long kung saan inaasahan ang inline class UserId ay imposible nang walang tahasang conversion.
| Katangian | Typealias | Inline class |
|---|---|---|
| Bagong uri | Hindi — kasingkahulugan ng orihinal | Oo — bagong uri na may mga pagsusuri |
| Pagganap | Wala — ganap na nabubura | Wala — pambalot ay tinatanggal sa bytecode |
| Pamana | Hindi | Hindi (final class) |
| Sariling pamamaraan | Hindi | Oo — maaaring magdeklara ng mga function |
| Kaligtasan ng uri | Hindi — napagpapalit ng orihinal | Oo — pinag-iiba ng compiler ang mga uri |
Ipinapakita ng talahanayan ang pagkakaiba sa pagitan ng dalawang mekanismo. Typealias ay angkop para sa maiikling pangalan at dokumentasyon ng code kapag hindi kinakailangan ang mahigpit na pag-type. Ang inline class sa pamamagitan ng keyword na value class (dating inline class) ay kinakailangan kapag mahalagang pag-ibahin ang mga semantikong magkaibang halaga ng parehong primitive na uri. Halimbawa, ang UserId at OrderId ay parehong Long, ngunit ang pagpasa ng isa kung saan inaasahan ang isa ay isang lohikal na error na pinipigilan ng value class sa yugto ng compilation.
Mga madalas itanong
Import alias (import com.example.LongName as Short) ay gumagana sa antas ng import — pinapaikli ang pangalan lamang sa kasalukuyang file. Ang typealias ay nagdedeklara ng isang global na alias na magagamit sa buong proyekto pagkatapos ng import.
Oo, typealias ay sumusuporta sa recursive na mga kahulugan para sa functional na mga uri, ngunit may pag-iingat: typealias Rec
Hindi, ang typealias ay ganap na nabubura sa yugto ng compilation. Sa bytecode at runtime, ginagamit ang orihinal na uri nang walang anumang pambalot. Ang pagganap ay kapareho ng direktang paggamit ng orihinal na uri.
Typealias ay maaaring tumukoy sa isa pang typealias — ito ay tinatawag na chain ng mga alias. Ang lalim ng chain ay pormal na hindi limitado, ngunit para sa pagiging madaling mabasa inirerekomenda ang hindi hihigit sa 2–3 antas. Ganap na binubuksan ng compiler ang chain sa yugto ng pagsusuri.
Hindi, ang typealias ay isang deklarasyon sa pinakamataas na antas o miyembro ng klase/object. Sa loob ng mga function, hindi maaaring ideklara ang typealias. Para sa lokal na pagpapaikli ng mga uri, gamitin ang import alias sa loob ng file o ilipat ang typealias sa antas ng module.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din