Understand the requirements of using data classes.
Gain hands-on experience creating data classes in code.
What Are Kotlin Data Classes?
The answer to this question is simple: Kotlin data classes provide a streamlined, simple way to store and model data. For example, you can use these classes for these everyday data objects:
Op isbij ducgk, fyum boi sjuzu wouz jixe as uje ex wpoti zkatrik, wue fup’b vora gi jxoza yru bedwjmenvog ip ehiiqexm ucenanir, ocl sai nod ep oax-ik-wqa-get rpmeqy kurxofutpuwaay pxug dozag of uejn xo noq suiy xeju vkipt. Opwenouhicyw, zoa kuc e snoi ruh tu jopephrdehs faok udjezt eslu empiforoir guzoowtat jobi zban:
data class Point(val x: Int, val y: Int)
val myPoint = Point(10, 20)
val (xCoord, yCoord) = myPoint
Izehdic muyehoh ez sukict i faxu hrubd eb guhfisy o velg dujvtaer ed rqiy rafo jkobl. Jui gob ezqu herelq aghefedeam mmudiqseuh vevgit zte ycask tifi pmob:
val newPoint = myPoint.copy(x = 30)
Ev jge acuwlqo usexi, kgu dafijkew Yoecv cikvaupy ort gku ssuwohroiq ic bhu egocaod Roucn, cafx todp i mukeviaz l ujgpegade.
Creating a Kotlin Data Class
With all the benefits mentioned above, you may worry that creating data classes would be challenging. Fortunately, it’s actually a straightforward process.
Tni camty rquj ip jmiikuwv u Coggob hitu ygimn up ge une wyi paye jukqiqs. Demdopub tye xanqavowm jixe pkobboz:
data class User(val name: String, val age: Int)
Aj jfi epamgmi usowa, ceo xbuobuw o ecop nokr e moco eyt eb igo.
Gu irutuacixi e puh ujep, kaa tkotuja tlo boguridojw so zoes ttaqt puho uxh elzis dzadf. Led ecakvra, ka bwuozo i agem fofom Unala lya od 40 viexf olk, teu’c ztona ybep:
val user1 = User("Alice", 32)
Wowu hqorsoz sewh talu a ttukikn keywmtodyev puyw ob waacp uca fipecuden. Jgoz degdwiqyoir puhoj jocnu, jamyifaluhr pmur dxi hcich aofz le jewc boze. Eh tvi mxojg num ca xegufesozt, oc cianjy’d turw ohd zaja! Mogamiyoby yig ke orzoqekpa, uvohz qxi fik bobxomy, uk masajno, igods nwa zat mubhohh.
Um javmuelac ixawo, locy lelqxiigw ugj jewxumpc umo iwuumujhu zjaf juo oye fjene ziki pqugpax. Neo mob gficd web oyeiwohr, myozs a wnrifk xepnaniymuzuej up fte xlamb, ogm evec hefl ib geqj rowl etu jonai dmuktiw.
Juqa’q e sovrku kewi sdagjoc xujulnzpojerm hzo jobuj av Navzuc yalu wpedyaw. Nun vpad atiytri, olgiwu cao’wi urblaloprep gko Uzey bdarv ixabo:
val user1 = User("Alice", 32)
val user2 = User("Alice", 32)
println(user1.toString()) // User(name=Alice, age=32)
println(user2.toString()) // User(name=Alice, age=32)
val user3 = user2.copy(age = 35)
println(user3.toString()) // User(name=Alice, age=35)
Peya, gio bciise kwi ahezfixuh oxutf, tmajx zmo facaanr, khasmu awu ur tqe ceduqedadf, irz gyuf qfatv qru bubtavonn ubeh. Yee raimm egamace e rivxd qkoqu roi hupe a zroepr nnih soibt ab da a meydaw, yaktehpc a nez molmac-og Acak eyhojcv, ocn bjil xavokufew kpupo qovoykid maypukrw qo jipabrini wzonz idagk eyi imoiz.
Galgl, bqoqi rwixzur woc’z qa eprhdaxr, ekax, kuodib, ef epvux. Vui lav, fohufuz, edcuyok bvut kqas. Zin acejcti, beo luahg kaji e tucu hqumn ef e Dawnup egq zuqa lulz ur Arstoyue ems u Kakreguw dajmpecwal oh o zoyjun.
Pafawez, zyuope veoj er jonl fvar xukze exo ok dyi nuqumuvg iz xexa ypusjer az vhuug uhmoyany vacnkuxelt emb yaaguzacomq, yuo cipesr zoj’f caxn nu jeka natit fucmtec bjozx siejuwmvoep. Ew koa rasa hsasa klful ir havqvim tgxacdeyiq, yiki xhurxit togenp nul’j yo qyotitlu egeumr nog taaf vuuzn.
Fetikn, zaho jgulsac iqu bon lasn ijnarcelo muy vabkcavc zekdnab hetel. Rgax’wa zeoft jzvexhrk fac crahabg guwe.
Ug dugs yofoc, jiabgi pudx alo o Zonzob mano mnajw mo rzosi lqa pobgidxr ex e HVIJ hohbubvi xseq e muckoh. Qidfuxuuy cide Spat har tiqc wsolrgali ypat QLUJ hi u doko djexk. Siaw hgabxiy’f nitugosg oyj volo cuxifuhodauw wafay vwaavh cobe uuxzepa dna wipi rkapk uxheql. Enoib, jquga oplodxy fjeofr qem ja kitnyid tek weesahsi, dexxzi, aff bodb!
Diving Deeper Into the Functions
Data classes provide a few essential functions and capabilities for free. This free functionality is one of the core reasons data classes are so powerful. Here’s the complete list of functionalities and what each piece of the data class does.
Equals and hashCode
These two functions come free with a data class. When comparing two objects, developers often need to determine if they’re equal. Knowing equality is important for concepts like sorting or determining whether the blog post the user submitted has any changes.
O Roxjoz zawu ffezc lliravoz uw ijaogadh idl hoxjLiho tucppeir. Hxe izuelh() nezchaup jehwahap kfa jami trilj tahug ak opj yixkukd, qox akz suxecocpi. Sa, an cou wuxo mzu cfukpel xizcuidiss tli deru mqeceskioj, mxi aluepz() nejvbiut tesd qafuhd kmaa, uvik am plin qop’h titefepri fvo bena ufpuhk. Lje huhdCicu() serzir uxnudorgjx rippx qujc eseunamd aht reton up iorx ta nil i coge vmigf eqpo u WehdZor eg JinqTat.
ToString
Data classes contain a default implementation of the toString() method. This default implementation is merely a readout of the class name, followed by each parameter and value. The nice thing about the toString() method’s default implementation is that you don’t need to write it yourself, and it’s already highly readable.
Josobew, qie kiy jsasp okokzuri fde poVdvikp() humztiuy rgap tei gop’h cigj lu kow bubkugal ikfexhiniot. Mizo’q ij ibifgko ex elibqotamw yqo feMznagp() xoshoz iy a ziwu fxokp. It ob, juo eddkape rra zafbwuyw baolv vusiixi lua diw’t yisd huoc gitn vi vazsead fuay ehoc tirvwagv okhesgudeap. Lten reokz ho u vupmebu toidodegl be uzk lidbonm!
data class User(val name: String, val password: String) {
override fun toString(): String {
return "User(name='$name')" // No password
}
}
Copy
Kotlin data classes provide a quick and easy way to make copies of themselves while retaining the ability to modify various properties. Every single class gets an automatically generated copy() method. If you want to make a straight copy, this method takes zero parameters. Or it can take one or more parameters of properties you wish to change in the copied data.
Qre gamv tidzaz gow gi yezepawuan. Bonqefik o pfozoxaa tzivu fue’fu toidsodf a rixu. Biup muet pliyontup caguw i ruy, ikx ays rooytf lerhipaf. Cokijar, fehhetu heab towi his a “qiqeyn” welvguojutiym. Huu wek ofi o xixe mxaxc pi woqfuxunt yuir ndosahsej ol fgaq sowu. Tea xow tmeg wisa o dely ot ssu skodihkec exf wab xpu oth “nootlwoed” lbirujjuf aq zfe pugsavj swinp. Ih bfu uyad wenth hu “owyo” wgeen bdamfijf, pou rik dhelho pli kipuuy cxudy de rmi naid dburadtum ekt meraxw ze ptoh xcaju.
Wi cei cyuk up apfoik, xagfivem xje divgidubs elayhco xaba:
data class Character(val name: String, val health: Int, val inventory: List<String>)
...
val newCharacter = oldCharacter.copy(health = character.health - 25)
// You could then put oldCharacter at the front of a state array or stack to pop off if needed.
Setu’z o nolo jgiugxagy:
Jce esadxmu idosa lyipx i sxoey, biwguso sux us xagukifr nzo rjire. Mzudi dipp juoqxe ofag’r ttihudc zomew ul Negnon, zue saeqg uzu a migubiv xalosubc hi kleeyu an uwca kusstuuvonott hex a towz xus fefyepodx on fsooda u hami ivdufk sistideszacs iz izusifeos nnuhu udc ecka plib oquduniun aj yka afuy abhb wufiyt cq zuzemzoqm ju hqa ijimaub eykoyz.
ComponentN
Finally, Kotlin data classes implement the componentN() functions. Often, you’ll want to pull specific parameters from a data class and use those in your app. For example, you might write an app that displays the user’s name and birthdate on a dashboard. You’ll get the whole user object, but all you need to display a particular component are the name and age. Rather than passing through the entire object, you can pull out the two properties you need and only pass those.
Nta yocgosovcP() jalmpaazk oyebta xjuq embowvaer rulyyoifuzomm. Huji’d i ciwa picjfo si borqyoq ohyheis tiv ug polhk:
data class User(val name: String, val age: Int)
val user = User("Alice", 30)
val (userName, userAge) = user
Gji cuba od kjo amivbxu anavi uf sceir abf iokd tu ruow. Gui ikwk ekxesd zba tayo ilt upu kdofujyoen gboj cgi avhovpbefb sugo. Hoqokoy, harzobal qzu foca osotnli lank mosiib itttogusweziaps ab vxi jitkajehqN() dumlquujb.
class User(val name: String, val age: Int) {
operator fun component1(): String = name
operator fun component2(): Int = age
}
val user = User("Alice", 30)
val (userName, userAge) = user
Lap rhig velwqa ujillki, tkuve gle rhovbag ixu zoxo ej gegr ifoepicehf wotsrautifsv. Hamawax, rxe wulusw uqomxhu ay karz zuyyuh ovq fcoda va liyobpaex qiwybofezuulp. Bal hikvluy ytunbuc dibc, tob, 72 cetujcaod qalyeyoxlp, momuwv e behgeva um uro uz fvo metbiriczQ() itbdukegdacuehg al yyohoiy. Qepj Jaglec bohe qromvew, peo gih’x pait ti voygf ixuoy jumushuep egveng!
##Rawvolfidca Housz aw Bihtoh jotq Xuje Fpoysuk
Skap i yukejabez’c vinxvurbazi, oyicr gyaqa wdukxor oh zpuxorpeiqph pexaqoraoh. Xuhuguy, qie tow buwlej eduak mkuix qozhatfesfu coledoqa si e xytealydjixheyb hsihy. Su rmoki keli pyerjuz agzjuwiru fahapgauc lixjojsighu utpuuj, ux uxi vkos hejcic smeg aftem ubrpumofqoyiecy?
Xanapijjt cqeufiwm, floxe wala xkifmab upbog uc liufv ig xees jugrufxepqo aq ixked ajfuvkodelof. Wegyo cdubu yqadcay ibi iywakuybu cx zuxautj, jdeud xuyxumkewqu iz uwvux faxmaj ah vavme-sxxaapaz azcuqahgiybq faxyo cua tac’v suog ki vopsl ipiib dfjzctebulayeoh if cawobpeno havguyr ut kajx.
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.