Mənalı adlar verməkdə necə böyük olmaq

Niyə mənalı adlar?

  • Bir uşağa ad verdiyinizi düşünürsən (çox asandır, elədir?)
youAreMyKid (), cuteLittleBaby (), shyBaby ()
  • Düşünürəm ki, bu adları nəzərdən keçirmək istərdiniz.
Kompüter elmində yalnız iki çətin şey var: önbelleği etibarsız hala gətirmək və şeylərə ad vermək - Phil Karlton

Biz şəxsiyyətlər formalaşdırmağa, yerlər və insanlar haqqında adlarına görə məlumatları saxlamağa və əldə etməyə meyllidirik. Eynilə, adlar hər yerdə, hətta yazdığımız ən kiçik kodda da var. Dəyişənlərə, funksiyalarımıza, arqumentlərimizə, siniflərimizə və paketlərimizə ad veririk.

Mənbə sənədlərimizi və onları ehtiva edən qovluqları adlandıracağıq. Adlar düzgün niyyətləri aşkar etmirsə, birmənalı deyilsə və asanlıqla əldə edilə bilmirsə, kodun oxunaqlılığı kəskin şəkildə pisləşir. Bu yazıda Robert C Martin-in Təmiz Kodundan tapdıqlarımı bölüşməyə çalışacağam. Bundan sonra "John Üçüncü Üçüncü Kim idi" və "Üçüncü Üçüncü Gənc Kim idi" kimi qarışıq vəziyyətlərdən qaçınmaq üçün kodumuzda uyğun isimlərdən istifadə etmək üçün bəzi sadə, həqiqətən yaxşı qaydalar var?

Ağıllı bir proqramçı ilə peşəkar bir proqramçı arasındakı bir fərq, bacarıqlı insanın aydınlığın hamının və sonun olduğunu başa düşməsidir. Mütəxəssislər bacarıqlarını yaxşı məqsədlər üçün istifadə edir və başqalarının anlaya biləcəyi kod yazırlar - Robert C. Martin

Bəsirətli adlardan istifadə edin

Dəyişən, funksiya və ya sinifin adı bütün vacib suallara cavab verməlidir. Niyə mövcud olduğunu, nə etdiyini və necə istifadə edəcəyini sizə izah etməlidir. Bir ad şərh tələb etdikdə, ad öz niyyətini göstərmir.

Pis

int d; // Günlərlə keçən vaxt
// d adı heç nə göstərmir

Təmiz

int elapsedTimeInDays;

Aşağıdakı kodun nə üçün olduğunu deyə bilərsinizmi? Bir dəqiqə düşün

def get_them ()
siyahı1 = []
the_list.each do | tl |
əgər tl [0] == 4
list1.push (tl) end
Son
Siyahını geri qaytarın1 son

Soruşun:

1. Siyahıda hansı şeylər var?
2. Siyahıda bir girişin sıfır göstəricisinin mənası nədir?
3. Dəyər 4 nə deməkdir?
4. Geri qaytarılan siyahını necə istifadə edərdim?

Kod nümunəsi bu sualların cavablarını ehtiva etmir, amma ola bilərdi.

Dezinformasiyadan çəkinin

Proqramçılar kodun mənasını qaranlıq saxta ipuçları buraxmaqdan çəkinməlidirlər. Tutarsız yazımların istifadəsi dezinformasiyadır. Satış fakturalarının siyahısını satış fakturalarının siyahısına yönəltməyin. Bunun əvəzinə bunchhofsalesinvoice, salesinvoices və ya salesinvoicegroup istifadə edin

Adlardakı başqa bir dezinformasiya forması kiçik və böyük hərflərin birləşməsi şəklində istifadəsi ola bilər. CamelCase konvensiyasına əməl edirsinizsə, camelCase konvensiyasına gedirsiniz. lakin birləşdirməyin, məs. B. SalesInVoice, SavingAccOunt və s.

Mənalı fərqlər yaradın

Eyni ərazidə iki fərqli şeyə istinad etmək üçün eyni addan istifadə etməməlisiniz. Bir adı özbaşına dəyişdirmək istəyə bilərsiniz.

Səs-küy sözləri mənasız bir fərqdir. Məsələn, bir məhsul sinifiniz olduğunu təsəvvür edin. ProductInfo və ya ProductData istifadə edərək başqa bir sinif yaratmısınızsa, adları başqa bir şeyə dəyişdirmisiniz. Məlumat və məlumatlar bir, bir və bu kimi aydın olmayan səsli sözlərdir.

Adları ayırın ki, oxucu fərqlərin nə olduğunu bilsin. pulMəbləği puldan ayırmaq olmur, müştəri məlumatı müştəridən, hesabı məlumatı hesabdan ayırmaq olmur

Tələb olunan adlardan istifadə edin

Asanlıqla tələffüz edilə bilən adları çağırmaq asandır. Dilə bilmirsinizsə, axmaq kimi səslənmədən müzakirə edə bilməzsiniz

Müqayisə et

DtaRcrd102 Sınıfı {
xüsusi tarix genymdhms;
xüsusi tarix modymdhms;
xüsusi final string pszqint = ”102”;
/ *… * /
};

üçün

Sınıf müştəri {
xüsusi tarix nəsil vaxtı;
xüsusi tarix dəyişikliyi damğası;
Şəxsi final string recordId = ”102”;
};

Axtarılan adlardan istifadə edin

Böyük bir kod bazasında dəyişənlərin adlarına görə axtarış etmək, proqramçıların bu dəyişənlərin, siniflərin və ya funksiyaların hamısının istifadə olunduğunu izləməyə və ya düzəltməyə çalışarkən etməsi üçün adi bir şeydir. Tək hərfli adlar və ədədi sabitlər mətnin bir hissəsində asanlıqla tapılmaması ilə müəyyən bir problemə sahibdirlər. Onlardan çəkinin.

Kodlamadan çəkinin

Tip və ya aralıq məlumatlarını adlara kodlaşdırmaq yalnız saxlama zamanı şifrə çözmə yükünü və idrak sürtünməsini artırır. Hər yeni işə götürülən işçilərin çalışacaqları (adətən əhəmiyyətli) kodu öyrənməklə yanaşı başqa bir kodlaşdırma dili öyrənməsini tələb etməsi çətin ki, məntiqli olsun.

Dəyişən adla birlikdə məlumat növlərinin lazımsız kodlaşdırılmasından çəkinin.

String firstNameString; Float çəkisi; float;

Dünyada ilk adın istifadəçi kontekstində bir sıra ardıcıllıqlar olduğunu bilməsi lazım ola bilməz. Eyni çəki üçün də tətbiq olunur (onluq sayı / şamandıra).

Zehni xəritələşmədən çəkinin

Fərqli komandalar eyni məhsulun ayrı modullarını yaratdıqda iş birliyi tez-tez baş verir. Yeni və ya fərqli bir komandadan birini oxuyarkən, adlarınızı zehni olaraq əvvəldən tanıdığı digər adlara çevirmək məcburiyyətində qalmamalıdır. Bu, tək hərfli dəyişən adlarda problemdir. Əlbətdə bir sayğacın i və ya j və ya k adı ola bilər (lakin heç vaxt l!) Əgər əhatə dairəsi çox azdırsa və başqa heç bir ad onunla zidd ola bilməzsə. Bu tək hərfli adların loop sayğacları üçün ənənəvi olmasıdır.

Pis

Yerlər = ["Austin", "New York", "San Francisco"] locations.each do | l | şeylər etmək
#bəzi_şeylər # başqa # şeylər_ et
# Gözlə, mən yenə nəyəm? Göndərmə (l) bitdi

Təmiz

Yerlər = ["Austin", "New York", "San Francisco"] locations.each do | yer |
# Bir şeylər etmək #bəzi_şeyləri # etmək # ..
Göndərmə (yer) bitdi

Sinif adları

Siniflərdə və obyektlərdə Müştəri, WikiPage, Account və AddressParser kimi isim və ya isim ifadəsi adları olmalıdır. Menecer, prosessor, məlumat və ya bir sinif adındakı məlumat kimi sözlərdən çəkinin. Sinif adı fel olmamalıdır.

Metod adları

Metodlarda postInvoice, deleteShipment kimi fel və ya fel ifadəsi adları olmalıdır

Konsepsiya başına bir söz seçin

Abstrakt bir konsepsiya üçün bir söz seçin və onunla qalın. Məsələn, fərqli siniflərin metodlarını əldə etmək və bunları ekvivalent metodlar kimi əldə etmək qarışıqdır. Hansı metod adının hansı siniflə getdiyini necə xatırlayırsınız? Funksiya adları müstəqil və ardıcıl olmalıdır ki, əlavə tədqiqat aparmadan düzgün metodu seçəsiniz.

Pis

İstifadəçi məlumatları İstifadəçi məlumatları user_record
başlama vaxtından başlayır

Təmiz

İstifadəçilər başlayır

başqa bir nümunə

dataFetcher () vs dataGetter () vs dataRetrieval ()

Əgər üç metod da eyni şeyi edirsə, onları kod bazasında qarışdırıb uyğunlaşdırmamalısınız. Bunun əvəzinə birinə yapışın.

Həll domen adlarından istifadə edin

Unutmayın, kodunuzu oxuyanlar proqramçılardır. Buna görə kompüter elmləri (CS) terminləri, alqoritm adları, nümunə adları, riyazi terminlər və s.

İşçilərimizin müştəriyə yaxınlaşmasını və onlardan fərqli bir adla konsepsiya bildikləri zaman hər adın mənasını soruşmasını istəmədiyimiz üçün hər adın problem domenindən çıxarılması məsləhət deyil.

AccountVisitor adı ZİYARƏTÇİ nümunəsinə bələd olan bir proqramçı üçün çox məna daşıyır.

Problemli domen adlarından istifadə edin

İşiniz üçün bir "proqramçı" mövcud deyilsə, problem domenindəki addan istifadə edin. Heç olmasa kodunuzu idarə edən proqramçı bir domen mütəxəssisinə bunun nə demək istədiyini soruşa bilər.

Dublikatları silməkdə və saxta adları düzəltməkdə bacarıqlısınızsa, o zaman obyekt yönümlü dizaynda bacarıqlı olduğunuzu iddia edirəm - JB Rainsberger, sadə dizaynın dörd elementindən sitat

Mənalı kontekst əlavə edin

Özündə və özündə mənalı olan bir neçə ad var - əksəriyyəti belə deyil. Ad, soyad, küçə, ev nömrəsi, şəhər, əyalət və poçt kodu adlı dəyişənlərin olduğunu düşünün. Birlikdə, bir ünvan düzəltdikləri olduqca aydındır. Ancaq yalnız vəziyyət dəyişəninin bir metodda necə istifadə edildiyini görmüsünüzsə?

AddrFirstName, addrLastName, addrState və s. Önəklərindən istifadə edərək kontekst əlavə edə bilərsiniz. Əlbətdə ki, daha yaxşı bir həll Ünvan adlı bir sinif yaratmaqdır

Təmiz kod yazmaq bir sənətdir və çox təcrübə tələb edir.

Nəticə

Yaxşı adlar seçməyin ən çətin tərəfi yaxşı təsvir bacarıqları və ortaq bir mədəni mənbə tələb etməsidir. Bu texniki, iş və ya idarəetmə sualından daha çox doktrinal sualdır. Heç kim ad verməkdə yaxşı deyil, xüsusən də son tarixə çatmağa tələssəniz.

İnsanlar digər inkişaf etdiricilərin etiraz edəcəyindən qorxaraq şeylərin adını dəyişdirməkdən də qorxurlar. Bu qorxunu bölüşmürük və adlar dəyişdikdə minnətdarıq (yaxşılığa doğru)

Əgər mövcud deyilsə, adlandırma qurultayınızı tezliklə işə salın və bir az təmiz kod işlədin. Kodlamada əylənin!