Atributų naudojimas naudojant „Ruby Code“

click fraud protection

Pažvelk į bet kurią objekto orientuotas kodas ir visa tai daugiau ar mažiau seka tuo pačiu modeliu. Sukurkite objektą, iškvieskite tam tikrus metodus ir pasiekite to objekto atributus. Objekto, ką galite padaryti, nėra daug, išskyrus perduodant jį kaip parametrą kito objekto metodui. Bet mums tai rūpi atributai.

Atributai yra kaip egzempliorių kintamieji galite pasiekti per objekto taškų žymėjimą. Pavyzdžiui, asmuo.vardas norėtų prieiti prie asmens vardo. Panašiai dažnai galite priskirti tokiems atributams kaip asmuo.vardas = "Alisa". Tai panaši į narių kintamuosius požymis (pvz., C ++), bet ne visai tas pats. Čia nieko ypatingo nevyksta, atributai daugelyje kalbų įgyvendinami naudojant „getterius“ ir „setters“ arba metodus, kurie nuskaito ir nustato atributus iš egzempliorių kintamųjų.

„Ruby“ neskirsto atributų gavėjų ir nustatytojų bei įprastų metodų. Dėl „Ruby“ lankstaus metodo, vadinančio sintaksę, nereikia skirti jokio skirtumo. Pavyzdžiui, asmuo.vardas ir asmuo.vardas () yra tas pats, jūs skambinate

instagram viewer
vardas metodas su nuliniais parametrais. Vienas atrodo kaip metodo iškvietimas, o kitas - kaip atributas, tačiau jie abu yra tas pats dalykas. Jie abu tiesiog skambina vardas metodas. Panašiai bet koks metodo pavadinimas, kuris baigiasi lygybės ženklu (=), gali būti naudojamas priskyrime. Pareiškimas asmuo.vardas = "Alisa" yra tikrai tas pats, kas asmuo.vardas = (Alisa), nors tarp atributo pavadinimo ir lygybės ženklo yra tarpas, jis vis tiek tiesiog vadina vardas = metodas.

Atributus galite lengvai įgyvendinti patys. Apibrėždami seterio ir getterio metodus, galite įgyvendinti bet kurį norimą atributą. Štai keletas kodo pavyzdžių, įgyvendinančių vardas atributas asmens klasei. Jis saugo pavadinimą a @vardas egzemplioriaus kintamasis, bet vardas neturi būti tas pats. Atminkite, kad šiuose metoduose nėra nieko ypatingo.

Vieną dalyką, kurį pastebėsite iškart, yra tai, kad reikia daug darbo. Daug rašoma, norint pasakyti, kad norite atributo pavadinimu vardas kad prieina prie @vardas egzemplioriaus kintamasis. Laimei, „Ruby“ pateikia keletą patogumo metodų, kurie apibūdins šiuos metodus jums.

Yra trys metodai Modulis klasę, kurią galite naudoti savo klasės deklaracijose. Atminkite, kad „Ruby“ neskirsto laiko ir „kompiliuoti laiko“, o bet koks kodas klasių deklaracijose gali ne tik apibrėžti metodus, bet ir vadinti metodus. Kreipiamės į „attr_reader“, „attr_writer“ ir „attr_accessor“ metodai, savo ruožtu, apibūdins seterius ir getterius, kuriuos mes apibrėžėme ankstesniame skyriuje.

„attr_reader“ metodas atrodo taip, kaip atrodo, kaip jis darys. Jis užima bet kokį simbolio parametrų skaičių ir kiekvienam parametrui apibūdina „gavimo“ metodą, kuris grąžina to paties pavadinimo egzemplioriaus kintamąjį. Taigi, mes galime pakeisti savo vardas metodas ankstesniame pavyzdyje su attr_reader: vardas.

Panašiai attr_writer metodas apibūdina kiekvieno jam perduodamo simbolio „seterio“ metodą. Atminkite, kad lygybės ženklas neturi būti simbolio dalis, o tik atributo pavadinimas. Mes galime pakeisti vardas = metodas iš ankstesnio pavyzdžio su kvietimu į attr_writier: vardas.

Ir, kaip tikėtasi, attr_accessor daro abu darbus attr_writer ir „attr_reader“. Jei atributui reikia ir seterio, ir getterio, įprasta nešaukti dviejų metodų atskirai, o skambinti attr_accessor. Galėtume pakeisti tiek vardas ir vardas = metodus iš ankstesnio pavyzdžio su vienu skambučiu į attr_accessor: vardas.

Kodėl turėtumėte apibrėžti rinkėjus rankiniu būdu? Kodėl gi ne naudoti attr_ * metodai kiekvieną kartą? Nes jie sulaiko kapsulę. Inkapsuliacija yra principas, teigiantis, kad joks išorinis subjektas neturi turėti neribotos prieigos prie jūsų vidinės būsenos daiktai. Viskas turėtų būti pasiekiama naudojant sąsają, neleidžiančią vartotojui sugadinti vidinės objekto būsenos. Taikydami aukščiau aprašytus metodus, mes padarėme didelę skylę savo kapsulės sienoje ir leidome vardan nustatyti bet ką, net akivaizdžiai netinkamus vardus.

Vienas dalykas, kurį dažnai matysite, yra tas „attr_reader“ bus naudojamas greitai apibrėžti getterį, tačiau bus apibrėžtas pasirinktinis seteris, nes vidinė objekto būsena dažnai nori būti skaityti tiesiai iš vidinės būsenos. Tada seteris nustatomas rankiniu būdu ir jis patikrina, ar nustatoma vertė yra prasminga. Arba, dažniausiai, nė vienas seteris nėra apibrėžtas. Kiti klasės funkcijos metodai nustato egzemplioriaus kintamąjį už „getter“ kitu būdu.

Dabar galime pridėti amžiaus ir tinkamai įgyvendinti a vardas atributas. amžiaus atributą galima nustatyti konstruktoriaus metodu, perskaityti naudojant amžiaus gauti, bet tik manipuliuoti naudojant gimimo diena metodas, kuris padidins amžių. vardas atributas turi normalų gavėją, tačiau seteriai įsitikina, kad vardas yra didžiosiomis raidėmis ir yra Vardas Pavardė.

instagram story viewer