Учење о ова два концепта ће вам помоћи да ојачате разумевање како Руст функционише и како можете да примените ООП функције.

Особине и животни век су кључне компоненте Руста. Можете користити особине да дефинишете понашања и способности типова за имплементацију. Веома су разноврсни, омогућавајући вам да напишете више генеричког кода, смањите дуплирање и побољшате могућност одржавања.

Руст користи други механизам – животни век – да прати власништво над променљивим унутар и ван опсега. Ово спречава висеће показиваче током делокације променљивих.

Заједно, особине и животни век помажу да се обезбеди безбедност типа, безбедност меморије и поузданост кода.

Разумевање особина у Русту

Особине су колекције метода које други типови могу имплементирати. Особине су сличне интерфејси на језицима као што је Јава, Го и ТипеСцрипт, али флексибилнији.

Користићете особина кључна реч за дефинисање особина у Русту, праћена декларацијом потписа метода.

особинаМиТраит {
фнми_метход(&селф);
}

Код дефинише особину под називом

instagram viewer
МиТраит са ми_метход методом. Тхе &селф параметар означава да се метод односи на објекат имплементационог типа као свој први параметар.

Након што дефинишете особину, можете је применити за своје прилагођене типове.

Ево како можете да примените особину за своје типове структуре.

струцтОсоба {
име: Низ,
старост: у32,
}

импл Инфо за Особа {
фнрезиме(&селф) {
принтлн!(„Зовем се {} и имам {} година.“, селф.наме, селф.аге);
}
}

Тхе Особа струцт имплементс Инфо, и можете позвати резиме метод на примере Особа струцт.

фнглавни(){
дозволити јохн = Особа { име: Низ::од("Јован"), старост: 30 };
јохн.суммари(); // Излаз: Моје име је Џон и имам 30 година.
}

Тхе јохн променљива је инстанца Особа струцт.

Тхе главни позиви функција резиме који штампа поруку на конзоли:

Енумс може имплементирати особине. Ево како можете да дефинишете енум са варијантама које имплементирају резиме метод:

енумМиЕнум {
ВариантА,
варијанта Б,
}

импл Инфо за МиЕнум {
фнрезиме(&селф) {
мечселф {
МиЕнум:: ВариантА => {
// имплементација за ВариантА
}
МиЕнум:: ВариантБ => {
// имплементација за ВариантБ
}
}
}
}

Коришћење особина за параметре функције и повратне вредности

Можете користити особине као параметре функције и повратне вредности. Коришћење особина као параметара функције је згодно за писање генеричког кода са више типова.

Ево функције која узима параметар било ког типа који се имплементира Инфо.

фнУради нешто(вредност: Т) {
валуе.суммари();
}

Тхе синтакса то наводи Т мора спровести Инфо. Можете позвати резиме функција са било којом вредношћу која имплементира Инфо.

Животи у Русту

Руст-ов алат за проверу кредита анализира програме и обезбеђује правилно коришћење меморије. у Руст, свака вредност има власника који је одговоран за расподелу вредности. Када променљиве позајмљују вредности, они позајмљују референцу на пренету вредност, али власник задржава власништво.

Животни век је начин да се осигура да се позајмљене вредности правилно користе. Животни век је ознака прикачена референци, која описује колико дуго је референца важећа.

У Русту, можете одредити животни век користећи напомену апострофа:

фунц<>

Приликом креирања референце, референци се додељује животни век који описује колико дуго важи. Ако имате функцију која узима референцу на вредност, животни век мора бити дужи од позива функције да би се осигурало да је вредност важећа када се функција врати.

Ево примера спецификације животног века у функцији.

фнУради нешто<>(к: &и32) -> &и32 {
Икс
}

фнглавни() {
дозволити к = 42;
дозволити резултат = уради нешто(&к);
принтлн!(„Резултат је: {}“, резултат);
}

У Уради нешто функција, тхе параметар животног века означава да је референца на Икс важи све док позив функције. Враћена референца је такође важећа све док је позив функције.

Тхе главни функција штампа резултат прослеђивањем референце на Икс променљива у главни функције на конзолу.

Синтакса животног века може бити опширна, али је неопходна за безбедност и управљање меморијом. Правила елизије за три живота пружају смернице које омогућавају Русту да закључи животни век референци у одређеним ситуацијама.

Правило животног века уноса

Правило животног века уноса наводи да ако функција или метода узима једну или више референци као улазне параметре, Руст претпоставља да све референце имају исти животни век.

Једноставно речено, животни век излазних референци биће исти као и улазних референци.

фннајдуже<>(к: &стр, и: &стр) -> &стр {
ако к.лен() > и.лен() { к } друго { и }
}

У најдуже функција, Руст закључује да је животни век излазне референце исти као и улазне референце јер обе имају исти параметар животног века .

Правило животног века уноса олакшава писање генеричких функција које узимају више референци као унос.

Правило животног века излаза

Правило животног века излаза наводи да ако функција или метода врати референцу, Руст ће претпоставити да се животни век излазне референце разликује од животног века било које улазне референце.

фнпрва_реч<>(с: &стр) -> &стр {
с.сплит_вхитеспаце().нект().унврап()
}

У овој функцији, Руст закључује да се животни век излазне референце разликује од животног века улазне референце јер сплит_вхитеспаце() метода креира излазну референцу која не узима параметре улазне референце.

Правило Елисион оф Лифетимес

Правило елизије животног века се примењује ако функција или метод узима једну референцу или улазни параметар и враћа референцу. У том случају, Руст претпоставља да излазна референца има исти животни век као и улазна референца.

фннајдуже<>(к: &стр, и: &стр) -> &стр {
ако к.лен() > и.лен() { к } друго { и }
}

У овој функцији, Руст закључује да је животни век излазне референце исти као животни век улазне референце јер је улазна референца и нема параметар животног века. Руст избацује параметар животног века за и и претпоставља да има исти животни век као Икс.

Ово правило олакшава писање функција које узимају једну улазну референцу и враћају једну излазну референцу.

Особине и животни век

Можете комбиновати особине и животни век да бисте креирали генеричке функције које раде за типове који имплементирају особину и имају важећи животни век.

Ево особине и функције која упућује на вредност која имплементира особину.

особинаТоСтринг {
фнто_стринг(&селф) -> Низ;
}

фнто_стринг<, Т: ТоСтринг>(т: & Т) -> Низ {
т.то_стринг()
}

Овде, параметар животног века обезбеђује да референца т важи за животни век објекта на који упућује. Можете користити то_стринг функција са типовима који имплементирају ТоСтринг особина која има валидан животни век.

Особине чине основу за имплементацију ООП концепата у Русту

Особине вам омогућавају да дефинишете понашање. Иако Руст није објектно оријентисани програмски језик (ООП), можете користити особине за имплементацију ООП концепата од енкапсулације до наслеђивања, полиморфизма и апстракције.

Имплементација ових ООП концепата са особинама чини ваше Руст програме скалабилним, робусним, одрживим и ефикасним.