Proqramlaşdırmada gövnokod: bu nədir, əlamətləri və daha təmiz kod necə yazılmalı

Müəllif: IT Sectr Dərc olunub: 2026-07-26 Oxuma vaxtı: 10 dəq

Gövnokod — bu aşağı keyfiyyətli mənbə kodunun jarqon adıdır: oxunmayan, zəif strukturlaşdırılmış və çətin saxlanılan. Stripe (2022) hesabatına görə, proqramçılar iş vaxtının 40%-nə qədərini pis yazılmış kodu oxumaq və anlamaq üçün sərf edirlər. Rusdilli icmada bu termin o qədər geniş yayılmışdır ki, proqramçıların xüsusilə parlaq nümunələri dərc etdiyi ixtisaslaşdırılmış govnokod.ru saytı mövcuddur.

Başlıca

  • Gövnokod — funksionallığı pozmaq riski olmadan oxumaq, anlamaq və dəyişdirmək çətin olan koddur
  • Əsas əlamətlər: kopyala-yapışdır, mənasız adlar, sehrli rəqəmlər, dərin iç-içə yerləşmə
  • Gövnokodun saxlanma xərci keyfiyyətli koddan 3–4 dəfə yüksəkdir
  • Refaktorinq və kod revyu — gövnokodla mübarizənin əsas alətləri
  • DRY, KISS və SOLID prinsipləri pis kodun yaranmasının qarşısını almağa kömək edir

Proqramlaşdırmada gövnokod nədir

Gövnokod — bu minimal keyfiyyət standartlarına cavab verməyən kodun subyektiv, lakin ümumi qəbul edilmiş xarakteristikasıdır. Robert Martin „Təmiz kod” (2008) kitabında pis kodu „nə etdiyini anlamağa mane olan” kod kimi təyin edir. Gövnokod sintaktik cəhətdən düzgün və hətta işləyə bilər, lakin onun saxlanması komanda üçün kabusa çevrilir.

Gövnokod termini məhz rusdilli icmada geniş yayılmışdır. İngilis dilində daha formal terminlər istifadə olunur: spaghetti code, dirty code, technical debt code. Lakin gövnokodun emosional çaları proqramçıların belə koda münasibətini — qıcıq, ikrah və peşəkar inciklik qarışığını — daha dəqiq çatdırır.

McKinsey (2023) tədqiqatına görə, yüksək texniki borcu olan şirkətlər — və gövnokod onun əsas tərkib hissəsidir — yeni funksiyaların hazırlanmasına 20–40% daha çox resurs sərf edirlər. Kod keyfiyyəti biznes göstəricilərinə birbaşa təsir edir və bu metafora deyil, təsdiqlənmiş faktdır.

Gövnokodla normal kod arasındakı sərhəd

Objektiv metrikalar yoxdur, lakin praktiki meyarlar var: əgər proqramçı 20 sətirlik funksiyanı anlamaq üçün 5 dəqiqədən çox vaxt sərf edirsə — bu gövnokoddur. Əgər bir sətirin dəyişdirilməsi üç əlaqəsiz modulu pozursa — bu gövnokoddur. Əgər kodu tam yenidən yazmadan testlərlə əhatə etmək mümkün deyilsə — bu gövnokoddur.

Gövnokodun əsas əlamətləri

Kopyala-yapışdır (copy-paste programming) — ən parlaq və asan aşkarlanan əlamətlərdən biridir. Eyni kod bloku minimal dəyişikliklərlə bir neçə yerdə təkrarlanırsa, bu sadəcə gövnokod deyil, həm də gələcək səhvlərin mənbəyidir. Bir yerdə düzəldib digərini buraxmaq — tipik haldır.

Mənasız dəyişən adları — klassika. `a`, `b`, `x`, `data`, `temp`, `tmp`, `result`, `list`, `obj` adlı dəyişənlər öz məqsədi haqqında heç bir məlumat daşımır. Kod oxuyucusu dəyişəndə nəyin saxlandığını anlamaq üçün bütövlükdə funksiyanı təhlil etməli olur. Robert Martin bunu „adda yalan” adlandırır — ad məlumat vəd edir, amma vermir.

Dərin iç-içə yerləşmə — şərtlər, dövrlər və xəta idarəetməsi 5+ səviyyəli abzas yaratdıqda. Belə kodu yan sıçrayışsız və ya bütün səviyyələri zehni olaraq izləmədən oxumaq mümkün deyil. Bu səhvlərə birbaşa yoldur: məntiqi operatorları asanlıqla qarışdırmaq olar, bağlayıcı mötərizələri isə görməmək olar.

ƆlamətGövnokod nümunəsiTəmiz kod
Kopyala-yapışdırBir blok 5 dəfə köçürülübFunksiyaya çıxarılıb
Adlar`var a = getData()``var userList = getData()`
Yerləşmə6 səviyyə if/for2–3 səviyyə return early ilə
Funksiyalar300 sətirlik funksiya3–5 metodlara bölünüb
Komentarlar`i++ // increment i`Şerhsiz başa düşülən kod

Gizli əlamətlər

Dead code — heç yerdə istifadə olunmayan funksiyalar, dəyişənlər, siniflər. Bu kodun həcmini artırır, proqramçını yayındırır və sistemin imkanları haqqında yalan təsɟ6vür yaradır. Magic numbers — kontekstsiz rəqəmlər. God-siniflər — hər şeyi birdən edən, tək məsuliyyət prinsipini (SOLID: S) pozan siniflər.

Gövnokod niyə yaranır

Vaxtın çatışmazlığı — ən tez-tez rast gəlinən səbəb. Son tarixlər yaxınlaşdıqda, proqramçılar sürətin xeyrinə keyfiyyətdən qurban verirlər. Taktiki olaraq bu əsaslandırıla bilər, lakin strateji olaraq — bu texniki borcun yığılmasıdır. Problem ondadır ki, „müvəqqəti” gövnokodu düzəltməyə nadirən qayıdırlar.

Kod revyusunun olmaması — əhəmiyyətinə görə ikinci səbɨb. Kod həmkarlar tərəfindən yoxlanılmadan tək yazıldıqda, pis nümunələr möhkəmlənir və çoxalır. Code review sadəcə keyfiyyətə nəzarət deyil, həm də komanda daxilində bilik ötürülməsidir. Revyusuz layihələr qaçınılmaz olaraq gövnokoda çevrilir.

Proqramçının aşağı ixtisası və ya mentorluğun olmaması. Nəzarətsiz qalan junior proqramçılar təbii olaraq gövnokod yazır — bu öyrənmə prosesinin bir hissəsidir. Problem bu kodun revyu və refaktorinq olmadan produksiyaya düşməsi ilə yaranır.

Mədəni amillər

İşləyir — yaxşıdır” şüarı olan komandalarda gövnokod çiçəklənir. Kodlaşdırma standartlarının, test tələblərinin və revyu proseslərinin olmaması kod keyfiyyətinin heç kimi maraqlandırmadığı mühit yaradır. Belə layihələr tez bir zamanda „legacy” — toxunmağa qorxduqları koda çevrilir.

Pis kodun layihə üçün nəticələri

Əsas nəticə — inkişafın yavaşlaması. Pis kodun paradoksu ondadır ki, ilk versiyanı tez yazmağa imkan verir, lakin hər sonrakı düzəliş getdikcə daha çox vaxt aparır. İnkişaf sürətinin kod keyfiyyətindən asılılıq qrafiki eksponensialdır — müəyyən həddən sonra yeni funksiyaların əlavə edilməsi praktiki olaraq qeyri-mümkün olur.

Kadr dəyişimi — dolayı, lakin ciddi nəticədir. Proqramçılar, xüsusən də təcrübəlilər, gövnokodla işləmək istəmir. Stack Overflow Developer Survey 2024-ə görə, proqramçıların 47%-i iş yeri seçərkən kod bazasının keyfiyyətini əsas amillərdən biri kimi qeyd edir. Pis kodu olan layihələr ən yaxın ışçıları itirir.

Təhlükəsizlik — gövnokodun daha bir qurbanı. Pis yazılmış kod daha çox zəiflik ehtiva edir: idarə olunmayan istisnalar, SQL-injection, XSS, yaddaş sızıntıları. Unit testlər və kod revyu ilə keyfiyyətli kod bu problemlərin əksəriyyətini produksiyaya çıxmamışdɑn yaxalayır.

Texniki borc metrik kimi

SonarQube və oxşar alətlər texniki borcu adam-saat və ya günlə qiymətləndirə bilir. Məsələn, kopyala-yapışdır haqqında 500 xəbərdarlıq, sehrli rəqəmlər haqqında 200 və dərin iç-içə yerləşmə haqqında 50 — 30 gün texniki borc deməkdir. Bu rəqəmləri refaktorinqi əsaslandırmaq üçün rəhbərliyə göstərmək olar və lazımdır.

Gövnokod əvəzinə təmiz kod necə yazılmalı

DRY (Don't Repeat Yourself) prinsipi — ilk tətbiq edilməli olan. Məntiqin hər bir parçası tək nüsxədə olmalıdır. Kopyala-yapışdır əvəzinə təkrarlanan kodu ayrıca funksiyaya, sinifə və ya modula çıxarın. Sehrli rəqəmlər əvəzinə — adlandırılmış sabitlər. Uzun funksiyalar əvəzinə — bir neçə kiçik funksiya.

KISS (Keep It Simple, Stupid) prinsipi həddən artıq mürəkkəblikdən qoruyur. Əgər tapşırığı 10 sətirdə həll etmək olarsa — 50 yazmayın. Əgər dövrü axından sadədirsə — dövrdən istifadə edin. Əgər adi funksiya dekoratordan daha başa düşüləndirsə — funksiya yazın. Sadəlik — asan saxlanılan kodun əsas keyfiyyətidir.

Boy Scout Rule prinsipi — „kodu tapdığından daha yaxşı burax”. Hər dəyişiklikdə kiçik yaxşılaşdırmalar belə zamanla gövnokodu layiqli koda çevirir. Dəyişəni adlandırmaq, böyük funksiyanı bölmək, test əlavə etmək — hər yaxşılaşdırma əhəmiyyətlidir.

javascript
// pis kod — kopyala-yapışdır, sehrli rəqəmlər, pis adlar
function calc(a, b, c) {
  let x = a * 0.85;
  if (b > 1000) { x = x * 0.9; }
  let y = c * 0.85;
  if (b > 1000) { y = y * 0.9; }
  return x + y;
}

// təmiz kod — aydın adlar, DRY, sabitlər
const DISCOUNT_RATE = 0.85;
const BULK_THRESHOLD = 1000;
const BULK_DISCOUNT = 0.9;

function applyDiscount(amount, quantity) {
  let price = amount * DISCOUNT_RATE;
  if (quantity > BULK_THRESHOLD) {
    price = price * BULK_DISCOUNT;
  }
  return price;
}

function calculateTotal(items, quantity) {
  return items.reduce((sum, item) => {
    return sum + applyDiscount(item, quantity);
  }, 0);
}

Gövnokodun refaktorinq nümunələri

Nəzərdən keçirək tipik Python nümunəsini. Funksiya sifarişləri emal edir, lakin pis edir: 80 sətir, dərin iç-içə yerləşmə, sehrli rəqəmlər, təkrarlanma. Refaktorinqdən sonra kod oxunaqlı, test edilə bilən və asan saxlanılan olur.

python
# pis kod — tək funksiya hər şeyi edir
def process_order(order):
    if order.get("type") == "premium":
        if order["amount"] > 100:
            discount = 0.8
        else:
            discount = 0.9
    else:
        discount = 1.0
    total = order["amount"] * discount
    return total

# təmiz kod — ayrılmış funksiyalar və sabitlər
class OrderProcessor:
    PREMIUM_DISCOUNT_HIGH = 0.8
    PREMIUM_DISCOUNT_LOW = 0.9
    PREMIUM_THRESHOLD = 100

    def get_discount(self, order):
        if order.type == "premium" and order.amount > self.PREMIUM_THRESHOLD:
            return self.PREMIUM_DISCOUNT_HIGH
        return self.PREMIUM_DISCOUNT_LOW

    def calculate_total(self, order):
        return order.amount * self.get_discount(order)

Funksiyalar üçün üç sətir qaydası

Yaxşı funksiya bir şey edir və onu yaxşı edir. Əgər funksiya üç müxtəlif hərəkət edirsə — bölün. Əgər funksiya 20 sətirdən çoxdursa — çox gömrə onu bölmək olar. Əgər funksiyada ikidən çox abzas səviyyəsi varsa — refaktorinq lazımdır.

Gövnokodu aşkarlama alətləri

Statik kod analizatorları — gövnokoda qarşı ilk müdafiə xətti. ESLint (JavaScript), Pylint (Python), SonarQube (çoxdilli), Checkstyle (Java) avtomatik olaraq kopyala-yapışdır, sehrli rəqəmlər, boş catch blokları, çox uzun funksiyalar və yüzlərlə digər anti-nümunələri aşkarlayır.

Code style və formatlayıcılar — ikinci müdafiə səviyyəsi. Prettier, Black, gofmt kodu avtomatik formatlayır, boşluq, abzas və mötərizə problemlərini aradan qaldırır. Komandada vahid stil kodu kimin yazmasından asılı olmayaraq oxunaqlı edir. Formatlaşdırma mübahisələri avtomatlaşdırılmalıdır.

Kod revyu — üçüncü və ən vacib səviyyə. Heç bir analizator həllin arxitekturasının səhv olduğunu və ya proqramçının yanlış yanaşma seçdiyini görən insanı əvəz edə bilməz. Effektiv revyu vaxt tələb edir, lakin gövnokodun miqdarını dəfələrlə azaltmaqla özünü doğruldur.

  • ESLint — JavaScript və TypeScript üçün complexity, max-lines, max-nested-callbacks qaydaları ilə
  • Pylint — Python üçün kod metrikaları və keyfiyyət qiymətləndirməsi ilə ( -10-dan 10-dək)
  • SonarQube — texniki borcun dinamikada izlənilməsi üçün
  • CodeClimate — hər bir faylın maintainability indeksinin qiymətləndirilməsi üçün
  • Better Code Hub — təmiz kodun 10 prinsipinə uyğunluğun yoxlanılması üçün

Tez-tez verilən suallar

Gövnokod əsaslandırıla bilərmi?

Çox nadir hallarda. Prototipləşdirmə və ya hakatonlarda sürət keyfiyyətdən vacibdir, lakin belə kod müvəqqəti kimi qeyd edilməli və refaktorinqsiz produksiyaya düşməməlidir. Produksiyada gövnokod üçün bəraət yoxdur — indiki vaxta qənaət gələcəkdə dəfələrlə itkiyə çevriləcək.

Gövnokodu yeni başlayanın kodundan necə ayırmaq olar?

Yeni başlayanın kodu — təcrübəsiz, lakin çox vaxt səmimi koddur, bacarıqlar artdıqca düzəlir. Gövnokod isə keyfiyyətə şüurlu və ya laqeyd etinasızlıqdır. Yeni başlayan optimal olmayan, lakin oxunaqlı kod yaza bilər. Gövnokod isə qəsdən oxunmazdır — onun müəllifinə digərlərinin onu başa düşüb-düşməyəcəyi vecinə deyil.

Gövnokodu sıfırdan yenidən yazmağa dəyərmi?

Yenidən yazmaq — son çarədir. Tədrici refaktorinq daha təhlükəsizdir: modulu ayırırsınız, testlərlə əhatə edirsiniz, hissə-hissə yenidən yazırsınız. Tam yenidən yazmaq risklidir — köhnə kodda toplanmış biznes məntiqini, o cümlədən heç kimin sənədləşdirmədiyi kənar halların emalını itirə bilərsiniz.

Meneceri refaktorinq üçün vaxt ayırmağa necə inandırmaq olar?

Metrikalardan istifadə edin: SonarQube texniki borcu saatlarla göstərəcək. Köhnə koddakı səhvlərə nə qədər vaxt itirildiyini göstərin. Layihənin „təmiz” və „çirkli” hissələrində yeni funksiyaların hazırlanma sürətini müqayisə edin. Biznes dilinə tərcümə edin: vaxt puldur, gövnokod isə pula başa gəlir.

Təmiz kod haqqında əsas kitab hansıdır?

„Təmiz kod” Robert Martin (2008) — keyfiyyətli proqramlaşdırmanın İncili. Orada adlandırma, formatlaşdırma, xəta idarəetməsi və test prinsipləri təsvir edilir. Əlavə olaraq: „Mükəmməl kod” Steve McConnell, „Refaktorinq” Martin Fowler, „Dördlərin qrupu” dizayn nümunələri haqqında. Bu kitabları hər bir proqramçı oxumalıdır.

Yekun

  • Gövnokod — oxumaq, saxlamaq və dəyişdirmək çətin olan aşağı keyfiyyətli koddur
  • Əsas əlamətlər: kopyala-yapışdır, mənasız adlar, sehrli rəqəmlər, dərin iç-içə yerləşmə
  • Səbəblər — son tarixlər, kod revyusunun olmaması və aşağı ixtisas
  • Nəticələr — inkişafın yavaşlaması, texniki borcun artması və komandanın itirilməsi
  • DRY, KISS və SOLID prinsipləri — təmiz kodun əsası
  • Statik analiz alətləri avtomatik olaraq gövnokodu aşkarlayır
  • Kod revyu — pis kodun yaranmasının qarşısını almağın ən təsirli yolu

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun