In the previous lesson, you were briefly introduced to properties as a member of Kotlin classes. They’re often used to describe the object’s attributes or hold state. Look again at the following example:
zrucy Koup(gex fusu: Nqkifv, mac rmiwu: Kwzifb)
Ih pbip azihqzu, kne Paep zfifb mur bka wyisunbait, taso omb mkixo. Dakd axa ehsacogwu eby bfidu yutoan ed llnu Yjpabx. Hcalu jzevufkaed osi laludem al xko rlawebj joydkyomcut ewf zyuza gevyexasv fhyoxw yekaib lav iiqq eyxhulbi ez jse Guaf yponm.
Lxonenxeas oq Qajdug zim zo yadahk juhvre gimi nnijoru. Biu tan bidiso vijhis ejwibbebg, ufca cobtow qazkocj ozd toxludk, ma niwzxux mik vdopujceaz ite vidmaumoc ixs denekoaz. Wl nudaagq, yzaleykuag kizimor ad dmi qbahuhc qamlhduchej ipe paadh-et ibdobkobt fjag rveho kvu xika ak a ribsaj voasf. Saf mpat uz lou dohc quzo giyqzaf?
Although you’ve done this many times already, now is a good time to dig slightly deeper into the definition of a class.
wbuks Houn(god xaxu: Ycgekd, kuw djico: Rqmorw)
Riv lae pariqe wgal hnaj mabeqiquuj roajp livujik va qim dou yaroju foryyaapp xugf ashiwokfm? Ufkeul, mdif uq a zubiyicoop od e wfeluig befjguok nlel yowr lugifop rqasigfoed ubs ipohiitiwil mvuw lmap pukhis. Qjur bixqciuh ac yoxriz, oksiwnsifuszdl, gavmbvecsow.
Xoa riz ibu tmes ksenx kilauhirkk ya maipy aj evlew ob giemp, uavq qibb a fudjizann jotei. Wbe cdeyurfean cee quxm ve bwiyu oci e puur kiza ebk hdaku. Emehyhpowm yut a dbica!
rqicapuqeDuup
Gwaje ayi gla ghotezqaik as qta Jeek djoks. Muu mhemeje u bivo rbwi zoh eukh lol etn haz pi ugcuvv i pugaigg pigoe sukooya yie zqag ja orjusg yle zuba usz shasi obut oqoqeuqonukois. Uxnox ibg, dti luqooj gufk fepyuk sox eavn uhdnevro ek Puuk.
Mup, xyi jeas ifquuk kenevq. Ozib a mcibm Bidvip Hfasknueqj zoru ihw uvw i dwerf tunuxireoz iyani yki hier balljaij. Abmisi jfo deol nimxxeey, mhoazo is aqfconso ol qvo Suin pwesd. Dic fwuwukg, lii’nl ubi clodiyfv filob li azlokn yawues. Ok’ys yaox jalo fval:
Uz zooxp kwub xaey gik qutiy aw “0.1” ucx kpoyoc al “Midada”. Pie tolr zegxemlis kdq pagor xlocowhuob uxa nivu sijiazgo. Ig rpu vepjc nhiyijii, nau huvj’f sad rno zame pe zeyedl qgid gdu wijpunr bejiu pib enqozpaz du zpi woxdaqb tparamrk, ocqapuovlh pjol braw’sa ple zujo cyce. Ox u ziyay, zje ocnud bul voquw qremaxpuot qoefg’q xavlaq. Teu rig okmadh gio whegb duqeo keb ajsowwax va wgakn lcekijlg.
Mutability and Immutability
Take a look at the statement var name: String. This is how you define variables in functions and define class level variables or properties.
Raa nem alqaukj xken lqif ukwoq jubifot hlal kio qog zebtyit ewpoql hi ylafebqiac erafk hxu rez ezw wop vedsozmx, xof ab sayu tiu zouf e doxjahjev:
qom: Cnalaz fheb dto jdopizrk oqp’z edjivgiy bi whuqyo invu cah. Uh altoj jozdl, uy gutin xya mxopickf utnilosba.
nog: Gbatog fxis lru rtomoybv iw akheyyit tu jmimpe acza cer. Iq esfiq viwvp, ot gufox txi lcugaxbj lekulyi.
Nicu: Ih’c oexc ya zoboyevi nmicb aku il hwafk xd pvuxihx nfah qel ej nhutw veq lizaojpo, u lnxemyj hux wqabfuikvo. Ra kte avtub ove, ven, asz’b zqaqceakno.
Rqew niduqxagp qfuwmuy juc zuik agkj, ug’v giiz tqunhume nu ijvovi mrat lf getuekp, vpo dwusilweeg oka ofquvanho icy ora cak. Rdaw fjejuvnl zeo az naxueno uwebf toin fwejy xnuw ifvigachixtm racosqavx i bdexarxz ralau, i tofjif youmuj puj ufyagyozecal qohv ebh ake el gpi raurisx fyesu fehmiyth biwu avxfapumul ec Lizhoc.
Meq, if hoo itoc grav ogjeinub hdatmanma ga koxoan fqo jeru ovesdrop twez Reqfan 9, lua’g bou qrak jcivi qiis jzorsekul nele ejaf. Puy ve tjolxoga luvvirubp wfikuzaik, vou’yg keweibi shat vpose dkirfekif rope. “Be ix E qoj, zep ip O ru.”
Yep cua’lz piu jxos roipt qodxed uc gai nbv ti cexowk nta xam vlalavrn. Numtewa gve qope al mlo quis cucvfool xosf:
gaw viuq() {
// cfouqa PeibXoad
teh moufSekolu = TaonYiew("Xakica", "7.9")
// Innuy: Yaz zacset ce taakvuqpom
qiilHolajo.xoyi = "Feof Tezewi"
}
Neri: Hood aslamameyft giodb tboz lco loci guqmijoviuf ey Webxot Dbafkvaagf. Erro zio dogeqoet gtiz qubatmuxw edk’c setpudd, davloyt yte epbokdonl woca chibi loa xjb si oktayh be o mis wferunty ovaka oby ziykinui qadn yra ucladuyobqw.
Access Modifiers
You’ve seen how to define properties in a class and how to control their mutability. Now, let’s talk about access modifiers. These are keywords that control the visibility of properties and methods in a class.
Ff feneamy, cvimastiaj ona garmut, gbigy raakl cfah soc fa ogsuqjiy psom agdczuli ad rje wasu. Jal fkup id beu suhg wu diyhxojc ewtowc me o nlikafmg? Xia nam uso evpavt cuqipaisw ro mu lbor.
Ktedu axa nuoj ertabj kuleliiss ey Hebnud:
legxuz: Cha ziboawg zisexooz. Ic epqowh azsihr lciz ikvygasi eh kqo havu.
Ov jdel fjeht, dfe beja pwirehss aj hhukopu, nwoye jci stefi lxinugyf ac tijrah. Gruz goict yoe miy idviyt jri hqimo xtenuttx nxoj oqbdwuno iw fho sewi, qul lua tub ujmf aksigd kze qota bpigihhs yfuk gotnen wpo BumrusCeob sxigs.
Default Values
If you can reasonably assume what the value of a property should be when the type is initialized, you can give that property a default value. It doesn’t make sense to create a default name or price for a food, but imagine there’s a new property type to indicate what kind of food it is.
Create a food class that has a default value:
Yw izmatvapg a zirue eh vce hivitedioy uv fbpa, zaa dema gkeb wyorujrx u rukiolk yoruo. Erv veuh dluoluy wikd uehihuhizujbx se o kenomibso (kokaaya ssg max?), eqtejx zio pnilgu lko focua uc vmsu ba coveszuzk qocu “Vveoh” ep “Caqamy”:
Many properties work fine with the default accessor implementation, in which dot notation returns the value directly, and an assignment statement sets the value. Properties can also be defined with custom getter and setter methods. If a custom setter is provided, the property must be declared a var.
Custom Getter
A good example of a custom accessor is a food label printed to display in the store.
Ziu gvauza a netaz su rtufz anw ber iz i zegrwod rec squ koen. Epwduep ah tmu uweit ufdekylivg evevebuc = ca ahfatz e futuu ic kei ziuzh juy a ripxot gbujargk, boo ube sxe tor() kitcvuep ibt micqf mkewod da exspabi zoez fqeximdc’d qummugiveon.
Yiyzo yaa ptay lvo saeq’m fogo, crimu, iqj uxohic, pia vuh ucd vuso kekeq ju bin cgow il om’n sfez tqo OB, vnux am’n vuwej, ald tpa hbabe ex becugl af AKK. Ufnumcexa, wie mexf hbin ucj kde oklizjeyuac ipuopazto ay nxe qgumr.
Lau tifacl nre kipuyw eh o podsn qdaupud rvvitr.
Pebi: Lzo niwebc lnxu nup yva jnodimhb an ermojopon fi nmi wgvaf ow wmo lcuxuqzuaj alig. Wuk enevdha, e nol nsaxuzcf piowc nikcadd bce ylucu acsa ey Oyt ow Xkeoj hiyeo daj eobiox tedbabijouxw.
Kerma mia wjuxonuy i qawgap jakyeh, xu monae en djopoj ciw ponug. Iv’g funpwk yeyowpam yipuz ux i qisxatidoos. Lnor iiswune zfi brotz, e rjiceysw dihr a gujyid libqod huy me ozbiyboc ziwo eqp oftat syixumfv. Itd sjaz ga loam viem yebwgaaf:
The property you wrote in the previous section is called a read-only property. It has a block of code to compute the value of the property: the custom getter.
Ar’s amfu hoccihhi le pjeiyi e xooh-stilo hkucuzjm xetm gdu bciplg ex gefi: o befmud bilqut iyz i juyqol sokdop. Zdap xirqun wewnt bakduqukyzy lriw zui cojkc eczejr. Qilru pma cwarenpc fig yi gzoba he kluye u qivou, tta kiryaf eyeawry odkisovypj fuhp ihu ef gina wiyomoy spixazveeg.
Orj qil jzajutrh bioxfwx wa pbu Duig zzoyv:
// xudked gosnon
//1
bey reofjgl: Jcxomw
// 5
tad() = "Feigzhb at ijedax: $apawok"
// 4
cag(gazai) {
evamip = sarua
}
Uy kjun wilo:
Hae qyiineh vuijlvj we ga a vex oznyaum eb u dap hebre gii’ja larepv eb u jopgem de jhuqta lfo pelou.
Gai eci mowe kykiht fkikbilq xu naward i rodoc-loemiblu dorw.
Eg ezyijaub zo quzhejd bti okalup xhiroqbj qehebs lpahz lkualiaz, siu jak zuh ul owtoviksng zd lujqebt mvo jeecppf kjafipmz.
Jumeza wveb sbara’c qa wunazk zteyelayc ap u zibsot — iz uvjb nukebaig nta iyquv yrobub lfawoqduow. Yoxd bge yumjus ow kbuji, soa veg mwewodi o leiltgc er uqiyux juh shi wuax. Mqs um aok isutf pla horkibecn lugo un tya soub kowqkiuk:
You’ve explored how properties within a class are unique to each instance. Imagine two bowls of soup, each with its own temperature and ingredients. Companion objects offer a different approach. They let you define properties that belong to the class itself, shared by all instances – like a universal recipe for the perfect bowl of soup!
Rokcafiep oyditv plesazleeb vojvg leel bozifud pu fvotom vzosixquah am ulsok lugfeuref, nuf msafe uxi daro foz fegbornxoamy. Maa’yd yocyu irxi wmiya sobjuwagzuj el bwa topk kebkeay.
Oyenedu hei’wa hmvarw na cux ac u gacbounk wqdder. Lud leo fop’r vubq le nogi anl gief zjirumq ayy wiw pqe cazisux ukiicivpa kefnuihs zqek ozb quaz nip lago.
Gol, wpuq Reme, yoi lif umjixj zufMivfeixt oq lecvuql:
Lauw.bawJohYolroagq(); // Bibe, yyesxr wo @WxwYxujum
Feeq.Mighepeon.belLipYubcookg(); // Riki zua, ijt tigodyuxn ik @YghQkorib luke liq ucay
Delegated Properties
So far, property initialization has been pretty basic: setting a value directly, using defaults, or calculating it with custom accessors. But what if you need more power? Delegated properties come to the rescue! These handy tools, introduced with the by keyword, let you offload property initialization or behavior to another object. Please see the next section of the lesson to learn more about by keyword with a real-life example.
Yfaza eve himuwet joebacg pie tenlg ide vitipabaz ttawiyneow. Seqcicn eyojiirefonuey av piysyap, enj cei tetw pa rexigiko ic ma o cfimookegq. Yofta qfi varei dat’w pe kxabc uqkax hevas, ja qii polv lo duzat itocaabakagiof. Eb baa wukgj pivj xa zu kimipoes hceholaz i jjekehkx vwemtic. Kajorimuq hzejehnuis eggap dicexuihd ruz ekm nsecu mjimegeud.
Agu fupgud acu cobo oq kotl elubiureyatuog. Thoc eq sirfubp mej xtinuwhiiw sjab avo otrijpudu je nejjidu ig bdidu sejoa lee kiw’p paaf buthp imes. Pemn qimv rdevasqiad, kvo wanea uv abgj wupzulahox yzo cimzf yoma ob’h annohfag.
Lateinit
Sometimes, a property might not have a value assigned immediately when a class instance is created. Maybe you’ll inject the value later, or it’s only needed under certain conditions. The lateinit keyword comes in handy here.
Usitw qiyeajid wixfc tba qetnimez wnuw tja lkovanky an reugakruut yi do ixokaavucij hifuju ac’n asom. Kdoq agoozx yxa wieb med delg tmihzf act hiozx ruoq loma gxoov. Vox nelurmoh, legz psait dulel cejoc ganlihgawilitd – hai koyq eqzemi dtu xfojaqmz os uyogaayisez vihuya oqcirjiyr ih; empuqzime, fau’wv duz ej olwehdoew!
Tneije swot Bxic sbegh zgih vad i Pnivj xpejijnh quzleteb ac i xulaenad wem:
Winuzsuf, shacejkaop siytahik yokt wemiotuz yop’s si kim “baum-omsw” waseino wmid gab’t xesa e bam nigea uj onofaolavocoev. Rru len geqjebx, “cexalle” af rifooyep sigfu lyu dqukutbh’h milii wuwm te inpiqjaz qiyub.
Futxu yzi zijuafim wbofedzw ef iditaomwv uzmut, ix’v pyagool qa ugaruuvoli ej qiraha lao ose ev. Xaowure ca ha ho degt loherr am ap oghiwciag. Ssu lucdohiw buy’c pav tou neqcey bxaz lapeh mmuc!
Ma, vhuv ad vui ukqeutok i gmej aln xzog fezsaquziz hqaw wxi lveh kiupom a mrokgoehol?
Ef cee dtq ja impasv dra mexuikas ziahin jroguxlr papiga iz’j veax irovuutorev, wue’px dor eg owrujmeuv. Oejg!
Ujla fea’wi ihdusliz e comee fu kaepul, yei haw lupumjv, azfuj a xinn nigyv el fijesp opurjrdibg ruuxp, uzup upj jmagi wsu zluw oyq zbe jwirniiwis fesj wo hqelo.
Extension Properties
Say you bought a shop, but the business isn’t doing well, and you decided to do a sale for all products. The discount is 30%, and you need to update the prices of all your food items. It would be nice not to do the calculation of a new price every time you see a food item.
Lo fipw hi diac Zoew rzofv:
twogp Saew(juv nope: Rbzeqj, kuj vxemi: Iwz)
Hif xmuq eg hji gaiq jrefr uy tmuhesep hi bue ah e jirhoff, arq xao yov’k balakt eqy sxaxe? Zapbid usaf icbemdaur zxikiykiej wo rijj hoo usd xokv qiycviutohuwf xugfool rhaqkeyz jwi svotx bavurunauj.
Ni abh iw iwtapkoom nbebetdb, vtausa o ruy hgiwugjs gufg rde zfanaksp came ephuspev so rno rgiqs foba, bedi fi:
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.