Kod icmalları: Həddindən artıq pozuntuların ümumi səbəbləri və onları düzəltmək üçün mübahisələrin qarşısını almaq

Bıçaqlar çəkilir. Bıçaqlar münaqişə üçün itilənir. Tərtibatçılar arasında mübahisə yaranıb. Proqramçıların ehtirası səhv proqramla deyil, olduqca dəqiq və ya geniş kodla oyanır. Bu sətirlər bir hack olduğunu göstərir. Razılaşmayan hər hansı bir proqramçı həvəskardır. Yalnız bir təcrübəsiz açıq şəkildə yaxşı zövqə qarşı olan üsullar və bloklar təklif edəcəkdir. Bununla birlikdə, təbii qanunlar deyil, fərqli üstünlüklər bu qarşıdurmanın və vitriolun mənbəyidir. Bu vəziyyətdə, inkişaf etdiricilər arasında nifrət, fərqli məqsədlər üçün yığcamlığı dəyişmə meyllərinin nəticəsidir. Bu hədəflər və onlara meyl hər bir inkişaf etdirici üçün fərqlidir və bu da müəyyən sahələrdə davamlı qarşıdurmaya səbəb olur. Belə yerlərdən biri açıq və ya qələm kodudur. Mübarizəni minimuma endirmək üçün bir qrup ən təhqiramiz seqmentləri vurğulamaq üçün kod təhlilindən istifadə edə bilər və qrup bir kod bazasının hər sətri və bloku üzərində mübahisə etmək əvəzinə bu hissələr üzərində mübahisə edə bilər.

Bəzi kod konstruksiyaları və ya texnikaları həddindən artıq pozuntularla nəticələnə bilər və bu pozuntuların necə düzəldilməsi barədə mübahisələrə səbəb olur. Bu sui-istifadələrin aradan qaldırılması şiddətli mübahisələrə səbəb olur. Bu fikir ayrılıqları aşağıda sadalanan linqvistik xüsusiyyətlər və üsullar üçün həll edilə bilər və ya ən azı azaldılır.

Şərti operator vs. Əgər bəyanat

Dil elementləri, şərti operator və if ifadəsi, müxtəlif düşərgələrin hər birinin müəyyən əməliyyatlar üçün üstün bir texnika olduğunu iddia edərək mübahisələrə səbəb olur. Bu hərəkətlər müxtəlif üsullarla həyata keçirilə bilər, hər bir texnikanın üstünlükləri və mənfi cəhətləri vardır.

If deyimi: If ifadəsi şərtlər yüksək olduqda olduqca böyük bir kod verməyə kömək edə bilər. Yüksək sıxlıq bir bloku və ya metodu qabarıq göstərir. Bununla birlikdə, əgər ifadələr istifadə edilərsə yazılmış kod da yüksək səviyyədə ayıklanır, çünki bir geliştirici hər sətirdən keçə bilər.

əgər (label1IsRequired) {label1.Color = "red"; } başqa {label1.Color = "qara"; }
əgər (label2IsRequired) {label2.Color = "red"; } başqa {label2.Color = "qara"; }
əgər (label3IsRequired) {label3.Color = "red"; } başqa {label3.Color = "qara"; }

Şərti operator: Şərti operator çoxlu ifadələrin əvəzi olaraq istifadə edildikdə çox qısa sətirlər yarada bilər. Yerləşdirilmiş şərti operatorlar kodun oxunmasını, sınanmasını və ya debugunu son dərəcə çətinləşdirir. Bir çox şərti operatoru olan hər hansı bir blok və ya metod da çox kompaktdır, bu da bir geliştiricinin taramalı olduğu kod miqdarını azaldır.

healthIndicatorColor = (sağlamlıq == "yaxşı")? "Yaşıl": (sağlamlıq == "ədalətli")? "Sarı": (sağlamlıq == "pis")? "Qırmızı": (Sağlamlıq == "Həyata Dəstək")? "Narıncı": "bənövşəyi";

Mümkün həll yolu: Şərti operatorlar if ifadələri ilə tətbiq olunan şərtlərə əsaslanan yüksək dəyər sıxlığını əvəz edərlərsə faydalıdır. Şərti operatorlar, hətta bəzi daxili qərarları əvəz etsələr, dağıdıcıdırlar. Bir sətirə aydın şəkildə sığan imperativlər şərti operatorlar üçün əsas hədəfdir, birdən çox sətir tələb edən şərtlər if ifadələrinin sahəsidir. İf ifadələrinin və ya şərti operatorların hər hansı bir çirkin istifadəsi bu konstruksiyalardan hər hansı birinin düzgün istifadəsini təmin etmək üçün düzəldilməlidir. (Qeyd: Dəyişikliklər əhəmiyyətli dərəcədə yenidən dizayn edilməsini tələb edə bilər.)

əgər (sağlamlıq == “Yaxşı”) {healthIndicatorColor = "yaşıl"; } başqa halda (sağlamlıq == “Ədalətli”) {healthIndicatorColor = "sarı"; } başqa halda (sağlamlıq == “pis”) {healthIndicatorColor = "qırmızı"; } başqa halda (health == “life_support”) {healthIndicatorColor = "orange"; } başqa {healthIndicatorColor = "bənövşəyi"; }
label1.Color = (label1IsRequired)? "Qırmızı Qara"; label2.Color = (label2IsRequired)? "Qırmızı Qara"; label3.Color = (label3IsRequired)? "Qırmızı Qara";

Birdən çox qayıdış hesabatı Bir dönüş ifadəsi

Mübahisələrə gətirib çıxaran iki xüsusi üslub birdən çox qayıdış və tək qayıtmaqdır. Metodların bir qaytarma ifadəsinə sahib olması və ya birdən çox qaytarma ifadəsinin məqbul olub olmaması barədə fikir ayrılığı var. Hər yanaşmanın üstünlükləri və mənfi cəhətləri var.

Birdən çox qaytarma ifadəsi: Birdən çox qaytarma ifadəsi, başa düşülməsi, izlənməsi və sınanması çətin olan kodu əlavə edə bilər. Bununla birlikdə, birdən çox qayıdışa malik olan metodlar, tək qayıdışlı funksiyalardan daha qısa ola bilər.

SomeDataType someMethod (param1, param2, param3) {SomeDataType retVal; if (param1 == null) {retVal = null} if (retVal == null) {return retVal; } əgər (param2! = null) {retVal = param2; } əgər (retVal.Equals (param2)) {return retVal; } retVal = param3; retVal qaytarma; }

Bir qayıdış ifadəsi: Tək bir dönüş ifadəsi uzun metodlara səbəb ola bilər. Bununla birlikdə, bu prosedurların test etməyi və ayıklamanı asanlaşdıran tək bir nöqtəsi var.

SomeDataType someMethod () {SomeDataType retVal; // RetVal kodunun yüzlərlə və ya minlərlə satırı; }

Mümkün Çözüm: Birdən çox qayda kodun anlaşılmamasını, izlənilməsini və uyğunsuz istifadə edildikdə test edilməsini çətinləşdirir. Fərdi qayıdış ifadələri, uzun kod bölmələri tərəfindən işləndikləri təqdirdə uzun metodlara səbəb olur. Bu uzun müddətlər bir əvəzinə bir neçə dönüş ifadəsi istifadə edərək qısaldılmış və ya ən azından oxunaqlı hala gətirilə bilər. Fərdi gəlirlər, qısa kod parçalarını təqib etdikləri təqdirdə mükəmməl şəkildə qəbul edilir. Bir qayıt ifadəsinin və ya birdən çox qaytarışın hər hansı bir aşkar şəkildə sui-istifadəsi, bu üslublardan hər hansı biri üçün qəbul edilmiş istifadə vəziyyətini tətbiq etmək üçün ünvanlanmalıdır. (Qeyd: düzəliş əhəmiyyətli bir yenidən dizayn tələb edə bilər.)

SomeDataType someMethod (param1, param2, param3) {if (param1 == null || param3 == null) {return null; } SomeDataType retVal = boş; if (param2! = null {retVal = param2;} else if (param1! = null) {retVal = param1;} ele if (param3! = null) {retVal = param3;} return retVal;}
SomeDataType someMethod (param1, param2) {SomeDataType retVal = null; üçün (int i = 0; i

Fasilə və davam konstruksiyaları gərgin mübahisələrə səbəb olur. Mübahisənin bir tərəfində, inkişaf etdiricilər qırılma və davam etmənin nəzarət axınını asanlaşdıra biləcəyini iddia edirlər. Digər proqramçılar bu funksiyaların bir proqramın məntiqini çətinləşdirdiyini iddia edirlər. Break and Continue mütləq kodu sadələşdirmək və ya çətinləşdirmək üçün istifadə edilə bilər. Bu xətlər aşkar edilə bilər.

İstifadəni kəsin və davam edin: Elementlər kodu sadələşdirə bilər, həm də lazımsız şəkildə mürəkkəbləşdirə bilər.

SomeDataType someMethod (param1, param2) {SomeDataType retVal = null; üçün (int i = 0; i
SomeDataType someMethod (data, param1) {SomeDataType retVal = null; bir şey et: üçün (int i = 0; i = data.length) {break; } əgər (data [i]. bərabərdir (param1)) {retVal = data [i]; } başqa {davam; }}
if (retVal == null) {data - refreshData (); bir şeyə getmək; }
retVal qaytarma; }

Mümkün həll yolu: Əksər inkişaf etdiricilər kodun idarəetmə axını üçün sadə mexanizmlərdən istifadə etməsinə inanırlar. Hansı konkret mexanizmlərin sadə olması mübahisənin mənbəyidir. Hər bir alət ümumiyyətlə qəbul edilmiş qaydada istifadə edildikdə, bu mübahisə daha az qızdırılır. Qəbul edilmiş yanaşmalar fasilə və davam üçün mövcuddur. İxtilafların qarşısını almaq və nəzarət axınını asanlaşdırmaq üçün bu konvensiyalardan istifadə edin. Bu standartları şiddətlə pozan nəzarətlər müzakirə edilmədən düzəldilməlidir.

SomeDataType someMethod (data, param1) {SomeDataType retVal = null; üçün (int i = 0; i

Müdafiə istisnaları

İstisnalar bir problemi göstərən və ya gələcək problemin qarşısını alan bir vasitədir. Kodun hansı hissələri ilə baş ağrısı göstərilməli və ya önlənməlidir, qızğın mübahisələrə səbəb olur. Razılığın bir sonunda, proqramçılar ardıcıl müdafiə istisnalarının səhvlərin qarşısını aldığını və lokalizasiyanı asanlaşdırdığını iddia edirlər. Bununla birlikdə, bu müdafiə paltarının siyahısı bəzi proqramçıların iddia etdiyi kimi şifrəni şişmiş və başa düşülməsini çətinləşdirə bilər. Müzakirənin hər iki tərəfindəki inkişaf etdiricilərin bir nöqtəsi var. Müdafiə istisnalarının həm üstünlükləri, həm də mənfi cəhətləri var.

Müdafiə istisnalarının üstünlükləri və çatışmazlıqları: Müdafiə istisnaları ilə səhv çatışmazlıqlardan və digər problemlərdən qorunmaq ən az çatışmazlıqlar ilə qarşısı alına bilər. Bu çatışmazlıqlar texnika seçilmədikdə daha da artır.

void someMethod (param1, param2) {if (param1 == null || param2 == null) {yeni bir ArgumentNullException atın ("Bir və ya daha çox parametr yoxdur"); } // metod şeyləri et}
void someMethod (param1, param2) {// onlarla müdafiə nəzarəti ..... // metodun qalan hissəsini et}

Mümkün həll yolu: Müdafiə müstəsna çatışmazlıqları qəbul edilmiş istifadələrdə istifadə edildikdə ən kiçikdir. Bu konvensiyalardan kənarlaşan texnikanın hər hansı bir istifadəsi, məcburi səbəb göstərilmədikdə düzəldilməlidir.

public void someMethod (param1, param2) {// hər bir parametri ümumi metodda yoxlayın, əgər (param1 == null || param2 == null) {yeni bir ArgumentNullException atın ("Bir və ya daha çox parametr yoxdur"); } // etibarsız məlumatların yaratdığı problemləri həll edin, əgər (! IsValid (param1) ||! IsValid (param2)) {Yeni bir InvalidParameterException atın ("Bir və ya daha çox parametr etibarsızdır"); } // parametrlərlə bir şey et}

Bükün

Bu kod konstruksiyaları və texnikaları həm yaxşı, həm də pis inkişaf etdiricilər tərəfindən istifadə olunur. Proqramçılar insanlardır. İnsanlarda meyl var. Bu meyllər kodda özünü göstərir. Bəzən bir inkişaf etdiricinin təkanı onu digər proqramçıların tənqid etməkdə haqlı olduğu kodu yazmasına səbəb olur. Tənqid olunan inkişaf etdirici mütləq pis bir proqramçı deyil. Onu tənqid edən kodlayıcı mütləq yaxşı bir inkişaf etdirici deyil. Yəqin ki, hər iki şəxs bir zaman öz üstünlükləri ilə yanıltılmışdı. Bu istəklər inkişafın bir-birinə atılan tükənməz bir təhqir axınına çevrilməsinə səbəb olmamalıdır. Daha doğrusu, proqramçılar bir-birlərinin kodlarını nəzərdən keçirməli, mübarizələrini ən pis hissələrlə məhdudlaşdırmalı və yuxarıda göstərilən qaydalara əsasən müəyyən mübahisələri həll etməyə razı olmalıdırlar.