Kuidas olla tähenduslike nimede andmisel suurepärane

Miks tähenduslikud nimed?

  • Mõelge, et nimetate lapse (kõlab liiga lihtsalt, eks?)
youAreMyKid (), armasLittleBaby (), shyBaby ()
  • Arvan, et tahaksite neid nimesid kaaluda.
Arvutiteaduses on ainult kaks rasket asja: vahemälu kehtetuks tunnistamine ja asjade nimetamine - Phil Karlton

Me kipume vormima identiteete, talletama ja hankima seotud teavet kohtade, inimeste asjade kohta nende nimede põhjal. Samamoodi on nimesid kõikjal, isegi väikseimas koodis, mille kirjutame. Me nimetame oma muutujaid, funktsioone, argumente, klasse ja pakette.

Nimetame oma lähtefaile ja neid sisaldavaid katalooge. Kui nimed ei näita õigeid kavatsusi, pole need eristatavad ega ole hõlpsasti meelde tuletatavad, loeb kood loetavalt. Selles artiklis püüan jagada oma õpetusi Robert C Martini raamatust Clean Code. Järgnevalt on toodud mõned lihtsad tõeliselt head tavad meie koodis õigete nimede andmiseks, et vältida segadust tekitavaid olukordi nagu see, kes oli Johannes Kolmas ja kes Johannes Kolmas Juunior?

Üks erinevus nutika programmeerija ja kutselise programmeerija vahel on see, et professionaal mõistab, et selgus on kuningas. Spetsialistid kasutavad oma volitusi heaks ja kirjutavad teistele arusaadavat koodi - Robert C. Martin

Kasutage kavatsusi paljastavaid nimesid

Muutuja, funktsiooni või klassi nimi peaks vastama kõigile suurtele küsimustele. See peaks teile ütlema, miks see on olemas, mida see teeb ja kuidas seda kasutatakse. Kui nimi nõuab kommentaari, siis nimi ei paljasta selle kavatsust.

Halb

int d; // kulunud aeg päevades
// Nimi d ei paljasta midagi

Puhas

int kulunudTimeInDays;

Kas oskate öelda, mis on allpool oleva koodi eesmärk? Mõtle minut

def get_them ()
 loend1 = []
 the_list.each do | tl |
   kui tl [0] == 4
    list1.push (tl)
   lõpp
 lõpp
 tagastusloend1
lõpp

Küsimused:

1. Milliseid asju on nimekirjas_loendis?
2. Mis tähtsust on loendis oleva üksuse null-alamrubriigil?
3. Milline on väärtuse 4 tähendus?
4. Kuidas kasutada tagastatavat nimekirja?

Nendele küsimustele vastuseid koodinäidises pole, kuid need võisid olla.

Vältige desinformatsiooni

Programmeerijad peavad vältima valede vihjete jätmist, mis varjavad koodi tähendust. Vastuoluliste kirjaviiside kasutamine on desinformatsioon, ärge viige müügiarvete loendit müügiarvete loendisse. selle asemel kasutage hulgimüüki arvel, müügiarvetel või müügiarvete grupil

Veel üks nime desinformatsiooni vorm oleks väiketähtede ja suurtähtede kasutamine kombinatsioonis. Kui järgite camelCase'i, minge camelCase'i tava. kuid ärge segage ja võrrelge, nt SalesInVoice, SavingAccOunt jne.

Tee sisukaid eristusi

Te ei tohiks kasutada sama nime kahele sama ulatusega asjale viitamiseks. võib teil tekkida kiusatus ühte nime suvaliselt muuta.

Mürasõnad on mõttetu eristus. Kujutage näiteks ette, et teil on tooteklass. Kui olete teinud veel ühe klassi nimega ProductInfo või ProductData, olete muutnud nimed teistsugusteks, ilma et need tähendaks midagi erinevat. Info ja andmed on selged mürasõnad nagu a, an ja.

Eristage nimesid nii, et lugeja teaks, mida erinevused pakuvad. moneyAmount on rahast eristamatu, customerInfo on kliendist eristamatu, accountData on kontost eristamatu

Kasutage hääldatavaid nimesid

Lihtsalt hääldatavad nimed on hõlpsasti meelde tuletatavad. Kui te ei saa seda hääldada, ei saa te seda arutada ilma idioodina kõlama

Võrdlema

klass DtaRcrd102 {
   privaatne Kuupäev genymdhms;
   privaatne Date modymdhms;
   privaatfinaal Keel pszqint = ”102”;
   / *… * /
};

kuni

klassi klient {
   privaatne kuupäeva genereerimise ajatempel;
   privaatne Kuupäeva muutmineTimestamp;
   privaatfinaal Stringi rekordId = ”102”;
};

Kasutage otsitavaid nimesid

Muutujate otsimine nime järgi hiiglaslikust koodialusest on programmeerijate jaoks sagedane asi, kui nad siluvad või üritavad jälgida, kus kogu seda muutujat, klassi või funktsiooni kasutatakse. Üksiktähelistel nimedel ja numbrilistel konstantidel on eriline probleem selles, et neid pole kogu tekstis lihtne leida. Vältige nende kasutamist.

Vältige kodeeringuid

Tüübi- või ulatusealase teabe kodeerimine nimedesse lisab selle kodeerimisele lisakoormuse ja mäletab kognitiivset hõõrdumist. Vaevalt tundub mõistlik nõuda, et iga uus töötaja õpiks lisaks (tavaliselt märkimisväärsele) koodikoodile, milles nad töötavad, veel ühe kodeerimiskeele õppimise.

Vältige andmetüüpide tarbetut kodeerimist koos muutuja nimega.

String firstNameString; Ujuki kaalUjuk;

Kui kogu maailmale on väga hästi teada, et eesnimes on eesnimes tähemärkide jada, pole seda vaja. Sama kehtib kaalu kohta, mis on kümnendkoht / ujuk.

Vältige vaimse kaardistamist

Koostöö toimub üsna sageli, kui erinevad meeskonnad ehitavad samast tootest eraldi moodulid. Kui keegi uus meeskond või mõni muu meeskond loeb, ei peaks ta teie nime vaimselt teistesse nimedesse tõlkima. See on probleem ühe tähega muutujate nimedega. Kindlasti võib silmusloendurit nimetada i või j või k (ehkki mitte kunagi l!), Kui selle ulatus on väga väike ja ükski teine ​​nimi ei saa sellega vastuollu minna. Selle põhjuseks on see, et need loenduride ühetähelised nimed on traditsioonilised.

Halb

asukohad = ['Austin', 'New York', 'San Francisco']
location.each do | l |
 do_stuff
 #do_some_other_stuff
 # teised asjad
 # Oota, mis on jälle l?
 lähetamine (l)
lõpp

Puhas

asukohad = ['Austin', 'New York', 'San Francisco']
asukohad.each do | asukoht |
 #do_stuff
 #do_some_other_stuff
 # ..
 ärasaatmine (asukoht)
lõpp

Klasside nimed

Klassidel ja objektidel peaksid olema nimisõnad või nimisõnad, näiteks Klient, WikiPage, Konto ja AddressParser. Vältige klassi nimel sõnu nagu haldur, protsessor, andmed või teave. Klassinimi ei tohiks olla tegusõna.

Meetodi nimed

Meetoditel peaksid olema verbide või verbide fraasinimed, näiteks postInvoice, deleteShipment

Valige mõiste kohta üks sõna

Valige ühe sõna jaoks abstraktne mõiste ja pidage sellest kinni. Näiteks on segane erinevate klasside toomine, hankimine ja samaväärseteks meetoditeks saamine. Kuidas sa mäletad, milline meetodi nimi millise klassiga käib? Funktsioonide nimed peavad olema iseseisvad ja need peavad olema järjepidevad, et saaksite valida õige meetodi ilma täiendava uurimiseta.

Halb

kasutaja_info
kasutaja andmed
kasutaja_rekord
algab_at
start_at
algusaeg

Puhas

kasutaja
start_at

veel üks näide

dataFetcher () vs dataGetter () vs dataRetrieval ()

Kui kõik kolm meetodit teevad sama, siis ärge segage ja võrrelge kogu koodi alust. Selle asemel pidage kinni ühest.

Kasutage lahenduse domeeninimesid

Pidage meeles, et inimesed, kes teie koodi loevad, on programmeerijad. Nii et minge edasi ja kasutage infotehnoloogia (CS) termineid, algoritmi nimesid, mustrinimesid, matemaatikatermineid jne.

Igasugust nime pole mõistlik probleemipiirkonnast välja tõmmata, sest me ei taha, et meie töökaaslased peaksid kliendi poole edasi-tagasi jooksma ja küsima, mida iga nimi tähendab, kui nad juba teavad mõistet teisest nimest.

Nimi AccountVisitor tähendab palju programmeerijale, kes on tuttav VISITORi mustriga.

Kasutage probleemseid domeeninimesid

Kui teie jaoks pole "programmeerijat", kasutage probleemdomeeni nime. Vähemalt teie koodi haldav programmeerija võib domeeni eksperdilt küsida, mida see tähendab.

Kui te kaptenite dubleerimise eemaldamise ja halbade nimede parandamise, siis väidan, et te valdate objektorienteeritud disaini - J. B. Rainsberger katkend lihtsa kujunduse neljast elemendist

Lisage tähenduslik kontekst

On mõned nimed, mis iseenesest on tähenduslikud - enamik mitte. Kujutage ette, et teil on muutujad eesnimi, perekonnanimi, tänav, maja number, linn, osariik ja postiindeks. Kokkuvõttes on üsna selge, et nad moodustavad aadressi. Aga mis siis, kui näeksite lihtsalt, et olekumuutujat kasutatakse meetodis üksi

Konteksti saate lisada eesliidete abil: addrFirstName, addrLastName, addrState ja nii edasi. Muidugi on parem lahendus loomine klassi nimega Address

Puhta koodi kirjutamine on kunst ja see nõuab harjutamist, palju seda.

Järeldus

Heade nimede valimisel on kõige raskem see, et see nõuab häid kirjeldusoskusi ja ühist kultuuritausta. See on pigem õpetamise küsimus kui tehniline, äri- või juhtimisküsimus. Keegi ei oska nimetada eriti siis, kui kiirustate tähtajast kinni pidama.

Samuti kardavad inimesed asju ümber nimetada, kuna kardavad, et mõned teised arendajad vaidlustavad selle. Me ei jaga seda hirmu ja leiame, et oleme tegelikult tänulikud, kui nimed muutuvad (paremuse poole)

Nii et seadke oma nimetamise tava varsti üles, kui see pole ikka veel paigas, ja muutke puhas kood. Head kodeerimist!