Təmiz Kod: Başqalarına necə kömək etmək olar.

Bir gün bir başlanğıc şirkətində çox ağıllı keçmiş iş yoldaşı Andy tərəfindən yazılmış bir funksiya haqqında bir-biri ilə mübahisə edənlər azdır. Thomas səhvin keçmişdə işləyən bəzi riyazi prosesi edən, lakin bəzi dəyişikliklər səbəbiylə səhv buraxmasına səbəb olan bir neçə xətdən qaynaqlandığına inanır. Bununla birlikdə, Jessie, riyazi proses haqqında deyil, riyazi prosesə girməmişdən əvvəl verilənlərin əvvəlcədən işlənməsi metodu olduğuna inanır.

Problemləri uzun bir gün tapdıqdan sonra nəhayət səbəbləri tapdılar. Səhv yazılmış bir dəyişkəndir. Eyni anda rahatlandı və soyuldu, çünki Andy bütün dəyişənləri yalnız "a", "b" və "c" hərfləri ilə deyil, daha yaxşı adlarla adlandırsa səhv olmaz.

"Bir doğulan uşağa ad verdiyiniz eyni qayğıdan istifadə edərək dəyişən adlandırmalısınız." - Robert C. Martin

Yalnız Andy əvvəl bu ifadələri bilsəydi, təmiz kod haqqında daha çox məlumat əldə edəcək və bu hekayə heç vaxt yayımlanmayacaq.

Təmiz kod nədir?

computerciencegeeks-dən görüntü

Orada istənilən problemi həll edə biləcək çox sayda böyük proqramçı var, məsələn Andy. Bu kodla, minlərlə və ya milyonlarla istifadəçiyə fəaliyyətlərini həyata keçirməyə kömək edə bilər. Lakin, o, artıq digər inkişafçılara kömək edirmi? ya da heç olmasa kodu istifadə edən ya da komanda yoldaşı? Təmiz kod tətbiq edərsə, bunun hamısı lazım olmayacaqdır.

Beləliklə, təmiz kod nədir? Təmiz kod haqqında daha yaxşı başa düşməyinizə kömək edəcək bir sitat budur.

“Təmiz kod sadə və birbaşa. Təmiz kod yaxşı yazılmış nəsr kimi oxunur. Təmiz kod dizaynerin niyyətinə heç vaxt mane olmur, əksinə xırtıldayan abstraksiyalar və birbaşa nəzarət xətləri ilə doludur. " - Grady Booch

Hələ qarışıqsınız? Budur başqa bir sitat.

"Təmiz kod anlamaq asan və dəyişdirmək asan olan koddur." - Gary Woodfine

Bu sitatlar təmiz kodun məqsədləridir. Bu kod digər insanların asanlıqla istifadə edə və dəyişdirə bilməsi üçün asanlıqla başa düşəcəkləri kodu yaratmaqdır. Bir şeyi xatırlamaq lazımdır, yazdığımız kod yalnız özümüzə aid deyil.

“Təmiz kod bir sıra qaydalara riayət etməklə yazılmır. Evristikanın siyahısını öyrənərək bir proqram sənətkarı olmursunuz. Peşəkarlıq və sənətkarlıq fənləri yaradan dəyərlərdən irəli gəlir. ” - Robert C. Martin

Və bu son sitatlar bizə izah etdi ki, təmiz kodun mənimsənilməsi üçün vaxt, təcrübə və təcrübə lazımdır.

Beləliklə, bu andan yazdığımız hər bir sətir kodu üçün təmiz kodu öyrənməli və tətbiq etməliyik.

Bəs niyə?

Tomas və Jessie davasına yenidən baxsaq, Andy təmiz kod tətbiq etmədiyi üçün nə itirirlər? Ən vacib şey vaxtdır. Dəyişən adla qarışıq olmadıqda və səhvini daha tez tapsalar, məhsuldar bir şey edə bilərlər və ya hətta bir şey yarada bilərlər. Bundan əlavə, təmiz kodu tətbiq etsəniz bir neçə üstünlük vardır.

  1. Bir test kompleks kodunu asanlıqla sınamağı çətinləşdirdi. Mükəmməl quruluşla asanlıqla metodumuzu müstəqil şəkildə sınayırıq və eyni zamanda funksional bir test də edə bilərik.
  2. Bir səhv tapmaq daha asan Çətin bir kodda səhv tapmaq çətindir. Təmiz kod kodumuzu daha sadə edir, buna görə səhvlərin olması daha aydın olur.
  3. Baxım üçün daha az xərc "Baxım bahadır". Doğrudur, çünki problemi nəzərdən keçirmək və həll etmək üçün qeyri-müəyyən vaxt tələb olunur. vaxt puldur.

Ən başlıcası, inkişaf etdiricilərin digər inkişaf etdiricilərə kömək etməsi üçün bir yoldur.

Bütün bu üstünlükləri nəzərə alsaq, təmiz kodu tətbiq etməməyimiz üçün heç bir səbəb yoxdur. İndi təmiz kodu ilə kodu daha yaxşı necə düzəltmək olar?

Təmiz kodu necə yazmaq olar?

Layihə qrupumun istifadə etdiyi bu javascript kodu haqqında nə düşünürsünüz? zəhmli?

Xeyr, qarışıqlıqdır. Əgər onu parçalasaq, təmiz kod qaydalarını pozan və insanların funksiyanı başa düşməsinə vaxt ayıran bir neçə pis şeyə rast gələ bilərik. Bu funksiya birdən çox məsuliyyət daşıyan bir çox şeyə də aiddir. İndi kodu nəzərdən keçirək.

bir şey () {...}

Xəttin əvvəlindən səhvini tapdıq. Bir funksiya adı funksiyanın yerinə yetirdiyi bir şeyi təmsil etməlidir. Funksiyaya daha dərindən baxsaq, bir növ çeşidləmə və ya filtrləmə var. Beləliklə, funksiya adını filter və ya filteredList olaraq dəyişdirməliyik, çünki funksiya sort funksiyasını çağırır və istifadə edə bilmirik. Hərəkət edək.

var r = bu.info.filter (x => {...)}

Heyrət! Vay! bir sətirdə iki səhv. onlara diqqət edə bilərsiniz?

İndi dəyişənlərinizə ad seçməklə bağlıdır. Dəyişən bir ad da dəyişənin saxladığı bir şeyi təmsil etməlidir. Dəyişənliyin nəyi dəyişdiyini və dəyişən adını təyin etmək üçün nə etdiyini yenidən nəzərdən keçirməliyik. "r" son nəticəni qənaət etmək kimi görünür, buna görə də "nəticə" adlandırmaq daha çox ehtimal olunur. Digəri, "x" bir obyekti saxlamaq üçün istifadə olunur və "yerin adı" adlı bir atributu var ki, bunun bir yer olduğunu düşünə və adını "yer" olaraq dəyişdirə bilərik. İndi başqa bir xəttə keçin.

... qoy placenamefiltered = x.placeName ...

Bu dəyişən əslində nə saxladığını təsvir edən mükəmməl addan istifadə etmişdir. Ancaq, xətdən düzəldə biləcəyimiz bir şey var, deyəsən? Heç camelCase haqqında eşidirsinizmi? OnunLikeWritingTheNameUsingThisFormat. Bəs niyə? javascript-də və ya hətta proqramlaşdırma dilində bir dəyişənin adlandırılması üçün boş yerdən istifadə edə bildiyimiz üçün, altdan ("_") boşluq kimi istifadə etmək və ya camelCase-dən istifadə etmək kimi 1-dən çox söz olan bir dəyişənin adlandırılması üçün bir çox metoddan istifadə edə bilərik. Hər hansı bir adlandırma metodundan istifadə etməməkdənsə, sözü daha sürətli ayırmağımıza kömək edir. Beləliklə, dəyişənimizin adını "placeNameFiltered" olaraq dəyişdirə bilərik. Davam edək.

... əgər (this.orderBy! = "") {r = r.sort ((a, b) => {var c = 0; var d = 0; a.cameras.forEach (cihaz => {c + = cihaz.peopleCount;}); b.cameras.forEach (cihaz => {d + = cihaz.peopleCount;}); qayıt c - d;}); if (this.orderBy == "aşağı") {return r.reverse (); }} ...

Bu şərti dövlət çox şey edir və funksiyanı vahid prinsip məsuliyyətini pozur. İndi həmin xəttin nə etdiyini daha dərindən araşdıraq.

... r = r.sort ((a, b) => {var c = 0; var d = 0; a.cameras.forEach (cihaz => {c + = cihaz.peopleCount;}); b.cameras .forEach (cihaz => {d + = cihaz.peopleCount;}); qayıt c - d;}); ...

Bilirik ki, bu "r" və ya "nəticə" son nəticəni tutdu və indi içərisindəki funksiya ilə əmələ gətirən bir parametr ilə sort funksiyası adlanır. Parametr yaradan funksiyanı mütləq "FilteredList" funksiyasından ayıra bilərik. Beləliklə, bu kodu əldə edə bilərik.

... nəticə = sortList (nəticə); ...
sortList (nəticə) {return result.sort ((a, b) => {var c = 0; var d = 0; a.cameras.forEach (cihaz => {c + = cihaz.peopleCount;}); b. kameralar.forEach (cihaz => {d + = cihaz.peopleCount;}); qayıt c - d;})}

İndi hər bir funksiya üçün daha yaxşı bir məsuliyyət daşıyırıq. Ancaq yeni funksiyamızda dəyişənləri adlandıran digər eyni problemlərimiz də oldu. "a", "b" və "c" kimi yalnız bir simvolu olan dəyişənlər var. Gəlin düzəldəcək.

Birincisi, "a" və "b". Əsas funksiyadan, yeri bir şeyə görə sıralamaq istədiyimizi güman edə bilərik və indi bunun "PeopleCount" a əsaslandığını bilirdik. "a" və "b" dəyişənləri bir-birimizi müqayisə etmək istədiyimiz yer deməkdir, buna görə adını "aPlace" və "bPlace" olaraq dəyişdirə bilərik. "C" və "d" üçün dəyişənlərin hər "aPlace" və "bPlace" üçün hesablanmış insan sayını tutduğunu güman edə bilərik, buna görə də adını "aTotal" və "bTotal" olaraq dəyişdirə bilərik.

bütün bunlarla birlikdə, nəhayət, "FilteredList" funksiyamız üçün daha yaxşı bir kod əldə edə bilərik və hamısını sararsaq, kodun belə olacağını əldə edə bilərik.

Və hamısı budur! Ancaq, gözləyin. Yazdığımız hər sətir üçün təmiz kodu düşünsək təmiz bir kod hazırlamağımız üçün uzun müddətə ehtiyacımız var deməkdir? Bizim kimi "newbie" nin daha sürətli kodlamağının başqa bir yolu varmı, amma yenə də daha yaxşı təmiz kod var?

Təmiz Kod Fasterini necə yazmaq olar?

Təmiz kod yazmaq üçün vaxtımızı asanlıqla istifadə edə biləcəyimiz bir neçə vasitə var. Layihə qrupumdan nümunələr götürün, javascript kod keyfiyyətimizi qorumaq üçün bir neçə pulsuz vasitədən istifadə etdik.

Gözəldir

Prettier, fikir verilən kod formatlayıcısıdır. Kodunuzu təhlil edərək ardıcıl bir tərz tətbiq edir və lazım olduqda kodu bağlayır, maksimum xətt uzunluğunu nəzərə alan öz qaydaları ilə yenidən çap edir.

Kodun bazanızın ardıcıl bir tərzə sahib olmasını təmin etmək üçün Prettier qazancınıza, əvvəlcədən hazırlanmış bir çəngəldə və ya CI mühitlərdə redaktorunuzda işləyə bilər.

GIF by freeCodeCamp.org orta

ESLint

ESLint açıq mənbəli JavaScript lintinq proqramıdır. Bundan əvvəl Kod lintinqi, müəyyən üslub qaydalarına əməl etməyən problemli nümunələri və ya kodu tapmaq üçün tez-tez istifadə olunan statik analiz növüdür. Çox proqramlaşdırma dilləri üçün kod xətləri var.

ESLint-in əsas məqsədi inkişaf etdiricilərə öz asma qaydalarını yaratmağa imkan vermək idi. ESLint, bütün qaydaları tamamilə şamandıra bilmək üçün hazırlanmışdır. Standart qaydalar hər hansı bir plugin qaydaları olacağı kimi yazılmışdır. Hamısı eyni qaydada, həm qaydalar, həm də testlər üçün istifadə edə bilər. ESLint əvvəldən yararlı hala gətirmək üçün bəzi daxili qaydalarla göndərsə də, istənilən anda qaydaları dinamik şəkildə yükləyə biləcəksiniz.

Nəticə

Təmiz kod seçim deyil, məcburiyyətdir. Kodunuzu bir neçə dəfə nəzərdən keçirməlisiniz, hətta daha çox vaxt tələb olunur. Ancaq təmiz kodu tətbiq etmək üçün artıq uzun müddət sərf etməyimiz yaxşıdır, ancaq yadda saxlamağınız lazım olan şey gələcəkdə daha çox vaxt qənaət etməyinizdir.

istinadlar:

  1. Martin, RC 2009. Təmiz kodu: çevik proqram sənətkarlıq kitabçası. Pearson Təhsil.
  2. https://www.goodreads.com/work/quotes/3779106-clean-code-a-handbook-of-agile-software-craftsmanship-robert-c-martin
  3. https://www.npmjs.com/package/prettier
  4. https://eslint.org/docs/about/