Kako biti sjajan u davanju smislenih imena

Zašto smislena imena?

  • Razmislite da imenujete dijete (zvuči previše jednostavno, zar ne?)
youAreMyKid (), slatkoLittleBaby (), shyBaby ()
  • Pretpostavljam da biste htjeli razmotriti ta imena.
Postoje samo dvije teške stvari u Computer Science: nevažeće predmemorija i imenovanje stvari - Phil Karlton

Skloni smo oblikovanju identiteta, pohranjivanju i pronalaženju povezanih informacija o mjestima, o stvarima ljudi, temeljeno na njihovim imenima. Slično tome, imena su posvuda, čak i u najmanjem kôdu koji napišemo. Nazivamo naše varijable, funkcije, argumente, klase i pakete.

Nazivamo izvorne datoteke i mape koje ih sadrže. Ako imena ne otkrivaju prave namjere, nisu različita i čitljivost koda nije lako ponovljiva, a drastično se smanjuje. U ovom ću članku pokušati podijeliti svoja učenja iz Čistog koda Roberta Martina. Slijedi nekoliko jednostavnih i zaista dobrih konvencija za davanje pravih imena u našem kodu tako da izbjegnemo zbuniti situacije poput tko je bio John Treći, a tko John Treći Junior?

Jedna razlika između pametnog programera i profesionalnog programera je u tome što profesionalac shvaća da je jasnoća ključna. Profesionalci svoje moći koriste za dobro i pišu kôd koji drugi mogu razumjeti - Robert C. Martin

Koristite nazive otkrivanja namjere

Naziv varijable, funkcije ili klase trebao bi odgovarati na sva velika pitanja. Trebalo bi vam reći zašto postoji, što radi i kako se koristi. Ako ime zahtijeva komentar, ime ne otkriva njegovu namjeru.

Loše

int d; // proteklo vrijeme u danima
// Ime d ne otkriva ništa

Čist

int minutedTimeInDays;

Možete li reći koja je svrha donjeg koda? Razmislite na trenutak

def get_them ()
 list1 = []
 the_list.each do | tl |
   ako je tl [0] == 4
    list1.push (tl)
   kraj
 kraj
 povratni popis1
kraj

Pitanja:

1. Koje se vrste nalaze na popisu?
2. Koje je značenje nulte pretplate stavke na popisu__?
3. Koji je značaj vrijednosti 4?
4. Kako bih koristio da se popis vraća?

Odgovori na ta pitanja nisu prisutni u uzorku koda, ali mogli su biti.

Izbjegavajte dezinformacije

Programeri moraju izbjegavati ostavljati lažne tragove koji opsjedaju značenje koda. Upotreba nedosljednih pravopisnih podataka je dezinformacija, ne odnosi popis faktura prodaje na popis faktura prodaje. umjesto toga koristite bunchofsalesinvoice, salesinvoices ili salesinvoicegroup

Još jedan oblik dezinformacija u imenima bila bi upotreba malih i malih slova u kombinaciji. Ako slijedite camelCase, idite na konvenciju camelCase. ali nemojte miješati i slagati, tj. SalesInVoice, SavingAccOunt itd.

Napravite smislena razlikovanja

Ne biste trebali koristiti isto ime da biste se odnosili na dvije različite stvari u istom opsegu. možda ćete biti u iskušenju da promijenite jedno ime na proizvoljni način.

Riječi buke su besmislena razlika. Na primjer, zamislite da imate klasu proizvoda. Ako ste napravili još jednu klasu s nazivom ProductInfo ili ProductData, izuzeli ste imena, ne čineći ih značenjima ništa drugačijim. Podaci i podaci nerazumljive su bučne riječi poput a, an i.

Razlikovati imena na takav način da čitatelj zna što nude razlike. moneyAmount ne razlikuje se od novca, customerInfo se ne razlikuje od klijenta, accountData se ne razlikuje od računa

Koristite izgovorljive nazive

Lako izgovorljiva imena mogu se lako ponoviti. Ako ga ne možete izgovoriti, ne možete raspravljati o tome bez zvuka idiota

Usporedite

klase DtaRcrd102 {
   privatni datumi genymdhms;
   privatni datum modymdhms;
   privatni konačni String pszqint = ”102”;
   / *… * /
};

do

kupac klase {
   privatno generiranje datumaTime;
   privatna izmjena datumaTime;
   privatni konačni string stringId = "102";
};

Koristite pretraživa imena

Pretraživanje varijabli po imenu u ogromnoj bazi koda česta je stvar za programere dok oni ispravljaju pogrešku ili pokušavaju pronaći gdje se koristi sva ta varijabla, klasa ili funkcija. Imena s jednim slovom i numeričke konstante imaju poseban problem u tome što ih nije lako pronaći preko teksta. Izbjegavajte njihovu upotrebu.

Izbjegavajte kodiranje

Kodiranje podataka vrste ili opsega u imena jednostavno dodaje dodatno opterećenje dešifriranja i dodaje kognitivno trenje u njegovom pamćenju. Teško je da se od novog zaposlenika traži da nauči još jedan kodni jezik, osim učenja (obično značajnog) tijela koda u kojem će raditi.

Izbjegavajte nepotrebno šifriranje tipova podataka zajedno s nazivom varijable.

String firstNameString; Float weightFloat;

Možda neće biti potrebno tamo gdje je cijelom svijetu vrlo dobro poznato da će u korisničkom kontekstu prvo ime imati slijed znakova. Isto vrijedi i za Težina koja je decimalna / lebdeća.

Izbjegavajte mentalno mapiranje

Suradnja se događa često kada različiti timovi grade zasebne module istog proizvoda. Kad ga netko iz novog tima ili iz drugog tima čita, ne bi trebao mentalno prevoditi vaša imena u druga imena koja već poznaju. Ovo je problem s imenima varijabli s jednim slovom. Dakako, brojač petlje može se imenovati i ili j ili k (iako nikad ne!) Ako je njegov opseg vrlo mali i ako se druga imena ne mogu sukobiti s njim. To je zbog toga što su nazivi brojeva s jednim slovom tradicionalni.

Loše

location = ['Austin', 'New York', 'San Francisco']
lokacije.each do | l |
 do_stuff
 #do_some_other_stuff
 # druge stvari
 # Čekaj, za šta je to `l`?
 otpremu (l)
kraj

Čist

location = ['Austin', 'New York', 'San Francisco']
location.each do | location |
 #do_stuff
 #do_some_other_stuff
 # ..
 otpreme (lokacija)
kraj

Imena klase

Klase i objekti trebaju imati imenice ili imenice izraza kao što su kupac, WikiPage, račun i AddressParser. Izbjegavajte riječi poput upravitelja, obrađivača, podataka ili informacija u ime klase. Naziv klase ne smije biti glagol.

Nazivi metoda

Metode bi trebale imati nazive glagola ili glagolskih fraza poput postInvoice, deleteShipment

Odaberite jednu riječ po konceptu

Odaberite jednu riječ za jedan apstraktni koncept i držite se toga. Na primjer, zbunjujuće je dohvatiti, preuzeti i dobiti kao ekvivalentne metode različitih klasa. Kako se sjećate koji naziv metode ide uz koji razred? Imena funkcija moraju biti samostalna i moraju biti dosljedna kako biste odabrali ispravnu metodu bez dodatnog istraživanja.

Loše

user_info
korisnički podaci
user_record
počinje u
start_at
vrijeme početka

Čist

korisnik
start_at

još jedan primjer

dataFetcher () vs dataGetter () vs dataRetrieval ()

Ako sve tri metode rade isto, nemojte miješati i slagati po osnovi koda. Umjesto toga, držite se jednog.

Koristite nazive domena rješenja

Imajte na umu da će ljudi koji čitaju vaš kôd biti programeri. Dakle, nastavite i koristite izraze informatičke znanosti (CS), imena algoritama, imena obrazaca, matematičke pojmove i tako dalje.

Nije pametno izvlačiti svako ime iz problematične domene jer ne želimo da naši suradnici moraju trčati naprijed i nazad prema kupcu pitajući šta svako ime znači kad već poznaju koncept pod drugim imenom.

Naziv AccountVisitor mnogo znači programeru koji je upoznat s obrascem VISITOR.

Koristite problematična imena domena

Kad nema "programera-eesea" za ono što radite, upotrijebite ime iz problematične domene. Barem programer koji održava vaš kôd može pitati stručnjaka za domenu što to znači.

Ako ovladate uklanjanjem umnožavanja i popravljanjem loših imena, onda tvrdim da ovladavate objektno orijentiranim dizajnom - J. B. Rainsberger izvađen iz Četiri elementa jednostavnog dizajna

Dodajte značen kontekst

Postoji nekoliko imena koja sama po sebi imaju smisla - većina nisu. Zamislite da imate varijable nazvane firstName, lastName, street, houseNumber, grad, država i poštanski broj. Zajedno, prilično je jasno da oni čine adresu. Ali što ako ste samo vidjeli da se varijabla stanja koristi sama u metodi

Kontekst možete dodati pomoću prefiksa: addrFirstName, addrLastName, addrState i tako dalje. Naravno, bolje rješenje je stvoriti klasu pod nazivom Adresa

Pisanje čistog koda umjetnost je i zahtijeva mnogo prakse.

Zaključak

Najteža stvar u odabiru dobrih imena je ta što zahtijeva dobre opisne vještine i zajedničku kulturnu pozadinu. To je nastavno pitanje, a ne tehnički, poslovni ili menadžment. Nitko nije dobar u imenovanju, pogotovo kad žurite sa ispunjavanjem roka.

Ljudi se također boje preimenovanja stvari iz straha da će neki drugi programeri prigovoriti. Ne dijelimo taj strah i otkrivamo da smo zapravo zahvalni kad se imena promijene (na bolje)

Dakle, uskoro postavite svoju konvenciju o imenovanju ako još uvijek nije na snazi ​​i promijenite čisti kôd. Sretno kodiranje!