Dasturlashda gavnokod: bu nima, belgilari va qanday toza kod yozish

Muallif: IT Sectr Nashr etilgan: 2026-07-26 O'qish vaqti: 10 daq

Gavnokod — bu past sifatli manba kodining jargon nomi: o‘qib bo‘lmaydigan, yomon tuzilgan va saqlash qiyin bo‘lgan kod. Stripe (2022) hisobotiga ko‘ra, dasturchilar ish vaqtining 40% gacha yomon yozilgan kodni o‘qish va tushunishga sarflashadi. Rus tilidagi jamiyatda bu atama shunchalik keng tarqalganki, dasturchilar ayniqsa yorqin holatlar misollarini e‘lon qiladigan maxsus govnokod.ru sayti mavjud.

Asosiy

  • Gavnokod — funksionallikni buzish xavfisiz o‘qish, tushunish va o‘zgartirish qiyin bo‘lgan kod
  • Asosiy belgilar: nusxa ko‘chirish, ma’nosiz nomlar, sehrli raqamlar, chuqur joylashish
  • Gavnokodni saqlash narxi sifatli koddan 3–4 baravar yuqori
  • Refaktoring va kod ko‘rib chiqish — gavnokodga qarshi kurashning asosiy vositalari
  • DRY, KISS va SOLID tamoyillari yomon kod paydo bo‘lishining oldini olishga yordam beradi

Dasturlashda gavnokod nima

Gavnokod — bu minimal sifat standartlariga javob bermaydigan kodning subyektiv, ammo umumiy qabul qilingan tavsifidir. Robert Martin „Toza kod” (2008) kitobida yomon kodni „nima qilayotganini tushunishga to‘sqinlik qiladigan” kod deb ta‘riflaydi. Gavnokod sintaktik jihatdan to‘g‘ri va hatto ishlashi mumkin, ammo uni saqlash jamoa uchun dahshatli tushga aylanadi.

Gavnokod atamasi aynan rus tilidagi jamiyatda keng tarqalgan. Ingliz tilida rasmiyroq atamalar ishlatiladi: spaghetti code, dirty code, technical debt code. Biroq, gavnokodning hissiy bo‘yog‘i dasturchilarning bunday kodga munosabatini — g‘azab, jirkanish va kasbiy xafagarchilik aralashmasini — aniqroq ifodalaydi.

McKinsey (2023) tadqiqotiga ko‘ra, yuqori texnik qarzi bo‘lgan kompaniyalar — va gavnokod uning asosiy tarkibiy qismidir — yangi funksiyalarni ishlab chiqishga 20–40% ko‘proq resurs sarflaydi. Kod sifati biznes ko‘rsatkichlariga bevosita ta‘sir qiladi va bu metafora emas, balki tasdiqlangan haqiqatdir.

Gavnokod va normal kod o‘rtasidagi chegara

Ob'ektiv metrikalar mavjud emas, ammo amaliy mezonlar bor: agar dasturchi 20 qatordan iborat funksiyani tushunish uchun 5 daqiqadan ko‘proq vaqt sarflasa — bu gavnokod. Agar bitta qatorni o‘zgartirish uchta bog‘liq bo‘lmagan modulni buzsa — bu gavnokod. Agar kodni to‘liq qayta yozmasdan testlar bilan qoplab bo‘lmasa — bu gavnokod.

Gavnokodning asosiy belgilari

Nusxa ko‘chirish (copy-paste programming) — eng yorqin va oson aniqlanadigan belgilardan biri. Xuddi shu kod bloki minimal o‘zgarishlar bilan bir necha joyda takrorlansa, bu shunchaki gavnokod emas, balki kelajakdagi xatolar manbaidir. Bir joyda tuzatib, boshqasida o‘tkazib yuborish — odatiy hol.

Ma’nosiz o‘zgaruvchi nomlari — klassika. `a`, `b`, `x`, `data`, `temp`, `tmp`, `result`, `list`, `obj` kabi nomlardagi o‘zgaruvchilar o‘z maqsadi haqida hech qanday ma’lumot bermaydi. Kod o‘quvchisi o‘zgaruvchida nima saqlanganini tushunish uchun butun funksiyani tahlil qilishga majbur. Robert Martin buni „nomdagi yolg‘on” deb ataydi — nom ma’lumot va‘da qiladi, lekin bermaydi.

Chuqur joylashish — shartlar, sikllar va xatolarni boshqarish 5+ darajali konstruksiya yaratganda. Bunday kodni yonma-yon aylantirmasdan yoki barcha darajalarni aqlan kuzatmasdan o‘qib bo‘lmaydi. Bu xatolarga to‘g‘ri yo‘l: mantiqiy operatorlarni osongina adashtirish mumkin, yopuvchi qavslarni esa payqamaslik mumkin.

BelgiGavnokod misoliToza kod
Nusxa ko‘chirishBitta blok 5 marta ko‘chirilganFunksiyaga ajratilgan
Nomlar`var a = getData()``var userList = getData()`
Joylashish6 daraja if/for2–3 daraja return early bilan
Funksiyalar300 qatorlik funksiya3–5 metodga bo‘lingan
Izohlar`i++ // increment i`Izohsiz tushunarli kod

Yashirin belgilar

Dead code — hech qayerda ishlatilmaydigan funksiyalar, o‘zgaruvchilar, sinflar. Bu kod hajmini oshiradi, dasturchini chalg‘itadi va tizim imkoniyatlari haqida yolg‘on taassurot yaratadi. Magic numbers — kontekstsiz raqamlar. God-sinflar — hamma narsani birdaniga bajaradigan, yagona mas’uliyat tamoyilini (SOLID: S) buzadigan sinflar.

Nega gavnokod paydo bo‘ladi

Vaqt yetishmasligi — eng keng tarqalgan sabab. Muddati yaqinlashganda, dasturchilar tezlik foydasiga sifatni qurbon qiladi. Taktik jihatdan bu oqlanishi mumkin, ammo strategik jihatdan — bu texnik qarzning to‘planishidir. Muammo shundaki, ‘vaqtinchalik’ gavnokodni tuzatishga kamdan-kam qaytadilar.

Kod ko‘rib chiqishning yo‘qligi — ahamiyati bo‘yicha ikkinchi sabab. Kod hamkasblar tomonidan tekshirilmasdan yolg‘iz yozilganda, yomon namunalar mustahkamlanadi va ko‘payadi. Code review shunchaki sifat nazorati emas, balki jamoa ichida bilim almashishdir. Ko‘rib chiqishsiz loyihalar muqarrar ravishda gavnokodga aylanadi.

Dasturchining past malakasi yoki mentorlikning yo‘qligi. Nazoratsiz qolgan junior dasturchilar tabiiy ravishda gavnokod yozadi — bu o‘rganish jarayonining bir qismidir. Muammo bu kod ko‘rib chiqish va refaktoring siz ishlab chiqarishga tushganda yuzaga keladi.

Madaniy omillar

‘Ishlaydi — yaxshi’ shiori bo‘lgan jamoalarda gavnokod gullab-yashnaydi. Kodlash standartlari, test talablari va ko‘rib chiqish jarayonlarining yo‘qligi kod sifati hech kimni qiziqtirmaydigan muhit yaratadi. Bunday loyihalar tezda „legacy” — tegishga qo‘rqadigan kodga aylanadi.

Yomon kodning loyiha uchun oqibatlari

Asosiy oqibat — rivojlanishning sekinlashishi. Yomon kodning paradoksi shundaki, u birinchi versiyani tez yozishga imkon beradi, ammo har bir keyingi tuzatish ko‘proq vaqt oladi. Rivojlanish tezligining kod sifatiga bog‘liqlik grafigi eksponensialdir — ma’lum chegaradan keyin yangi funksiyalarni qo‘shish amalda imkonsiz bo‘ladi.

Kadrlar almashinuvi — bilvosita, ammo jiddiy oqibat. Dasturchilar, ayniqsa tajribalilar, gavnokod bilan ishlashni xohlamaydi. Stack Overflow Developer Survey 2024 ga ko‘ra, dasturchilarning 47% ish joyini tanlashda kod bazasi sifatini asosiy omillardan biri deb biladi. Yomon kodli loyihalar eng yaxshi xodimlarni yo‘qotadi.

Xavfsizlik — gavnokodning yana bir qurboni. Yomon yozilgan kod ko‘proq zaifliklarni o‘z ichiga oladi: ishlanmagan istisnolar, SQL-injection, XSS, xotira oqishi. Unit-testlar va kod ko‘rib chiqish bilan sifatli kod bu muammolarning aksariyatini ishlab chiqarishga chiqmasdan ushlaydi.

Texnik qarz metrika sifatida

SonarQube va shu kabi vositalar texnik qarzni odam-soat yoki kunlarda baholay oladi. Masalan, nusxa ko‘chirish haqida 500 ogohlantirish, sehrli raqamlar haqida 200 va chuqur joylashish haqida 50 — 30 kunlik texnik qarzni bildiradi. Bu raqamlarni refaktoringni asoslash uchun rahbariyatga ko‘rsatish mumkin va kerak.

Gavnokod o‘rniga toza kod qanday yoziladi

DRY (Don't Repeat Yourself) tamoyili — birinchi joriy qilinishi kerak bo‘lgan. Mantiqning har bir qismi yagona nusxada bo‘lishi kerak. Nusxa ko‘chirish o‘rniga — takrorlanuvchi kodni alohida funksiya, sinf yoki modulga ajrating. Sehrli raqamlar o‘rniga — nomlangan konstantalar. Uzun funksiyalar o‘rniga — bir nechta kichik funksiyalar.

KISS (Keep It Simple, Stupid) tamoyili haddan tashqari murakkablikdan himoya qiladi. Agar vazifani 10 qatorda hal qilish mumkin bo‘lsa — 50 qator yozmang. Agar sikl streamdan soddaroq bo‘lsa — sikl dan foydalaning. Agar oddiy funksiya dekoratordan tushunarliroq bo‘lsa — funksiya yozing. Oddiylik — oson saqlanadigan kodning asosiy sifatidir.

Boy Scout Rule tamoyili — „kodni topganingizdan yaxshiroq qoldiring”. Har bir o‘zgarishdagi kichik yaxshilanishlar ham vaqt o‘tishi bilan gavnokodni munosib kodga aylantiradi. O‘zgaruvchini qayta nomlash, katta funksiyani bo‘lish, test qo‘shish — har qanday yaxshilanish muhimdir.

javascript
// yomon kod — nusxa ko‘chirish, sehrli raqamlar, yomon nomlar
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;
}

// toza kod — aniq nomlar, DRY, konstantalar
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);
}

Gavnokodni refaktoring qilish misollari

Keling Python dagi odatiy misolni ko‘rib chiqaylik. Funksiya buyurtmalarni qayta ishlaydi, ammo yomon: 80 qator, chuqur joylashish, sehrli raqamlar, takrorlanish. Refaktoring dan so‘ng kod o‘qiladigan, sinovdan o‘tkaziladigan va oson saqlanadigan bo‘ladi.

python
# yomon kod — bitta funksiya hamma narsani bajaradi
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

# toza kod — ajratilgan funksiyalar va konstantalar
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 uchun uch qator qoidasi

Yaxshi funksiya bitta ishni bajaradi va uni yaxshi bajaradi. Agar funksiya uch xil harakatni bajarsa — uni bo‘ling. Agar funksiya 20 qatordan ortiq bo‘lsa — uni bo‘lish mumkin. Agar funksiyada ikki darajadan ortiq joylashish bo‘lsa — refaktoring kerak.

Gavnokodni aniqlash vositalari

Statik kod analizatorlari — gavnokodga qarshi birinchi himoya chizig‘i. ESLint (JavaScript), Pylint (Python), SonarQube (ko‘p tilli), Checkstyle (Java) avtomatik ravishda nusxa ko‘chirish, sehrli raqamlar, bo‘sh catch bloklari, juda uzun funksiyalar va yuzlab boshqa anti-naqshlarni aniqlaydi.

Code style va formatlovchilar — ikkinchi himoya darajasi. Prettier, Black, gofmt kodni avtomatik formatlaydi, bo‘shliqlar, joylashish va qavslar bilan bog‘liq muammolarni bartaraf qiladi. Jamoada yagona stil kodni kim yozganidan qat’i nazar o‘qiladigan qiladi. Formatlash bo‘yicha tortishuvlar avtomatlashtirilishi kerak.

Kod ko‘rib chiqish — uchinchi va eng muhim daraja. Hech bir analizator yechim arxitekturasi noto‘g‘ri ekanligini yoki dasturchi noto‘g‘ri yondashuv tanlaganini ko‘radigan odamni almashtira olmaydi. Samarali ko‘rib chiqish vaqt talab qiladi, ammo gavnokod miqdorini bir necha marta kamaytirish bilan o‘zini oqlaydi.

  • ESLint — JavaScript va TypeScript uchun complexity, max-lines, max-nested-callbacks qoidalari bilan
  • Pylint — Python uchun kod metrikalari va sifat bahosi bilan (-10 dan 10 gacha)
  • SonarQube — texnik qarzni dinamikada kuzatish uchun
  • CodeClimate — har bir faylning maintainability indeksini baholash uchun
  • Better Code Hub — toza kodning 10 tamoyiliga muvofiqligini tekshirish uchun

Tez-tez beriladigan savollar

Gavnokod oqlanishi mumkinmi?

Juda kamdan-kam. Prototiplash yoki hakatonlarda tezlik sifatdan muhimroq, ammo bunday kod vaqtinchalik deb belgilanishi va refaktoring siz ishlab chiqarishga tushmasligi kerak. Ishlab chiqarishda gavnokod uchun oqlanish yo‘q — hozirgi vaqtni tejash kelajakda ko‘p martalik yo‘qotishlarga aylanadi.

Gavnokodni yangi boshlovchi kodidan qanday farqlash mumkin?

Yangi boshlovchining kodi — tajribasiz, ammo ko‘pincha samimiy kod bo‘lib, mahorat oshishi bilan yaxshilanadi. Gavnokod — bu sifatga ongli yoki loqayd e’tiborsizlikdir. Yangi boshlovchi optimal bo‘lmagan, ammo o‘qiladigan kod yozishi mumkin. Gavnokod esa printsipi jihatdan o‘qilmaydi — uning muallifi boshqalar uni tushunadimi yoki yo‘qmi, farqi yo‘q.

Gavnokodni boshdan qayta yozishga arziydimi?

Qayta yozish — eng so‘nggi chora. Bosqichma-bosqich refaktoring xavfsizroq: modulni ajratasiz, testlar bilan qoplaysiz, qismma-qism qayta yozasiz. To‘liq qayta yozish xavfli — eski kodda to‘plangan biznes mantig‘ini, jumladan hech kim hujjatlashtirmagan chekka holatlarni yo‘qotishingiz mumkin.

Menejerni refaktoring uchun vaqt ajratishga qanday ishontirish mumkin?

Metrikalardan foydalaning: SonarQube texnik qarzni soatlarda ko‘rsatadi. Eski koddagi xatolarga qancha vaqt sarflanayotganini ko‘rsating. Loyihaning „toza” va „kir” qismlarida yangi funksiyalarni ishlab chiqish tezligini solishtiring. Biznes tiliga tarjima qiling: vaqt — pul, gavnokod esa pulga tushadi.

Toza kod haqidagi asosiy kitob qaysi?

„Toza kod” Robert Martin (2008) — sifatli dasturlashning Injilidir. Unda nomlash, formatlash, xatolarni boshqarish va test qilish tamoyillari tasvirlangan. Qo‘shimcha: „Mukammal kod” Steve McConnell, „Refaktoring” Martin Fowler, „To‘rtlik guruhi” dizayn naqshlari haqida. Ushbu kitoblarni har bir dasturchi o‘qishi kerak.

Xulosa

  • Gavnokod — o‘qish, saqlash va o‘zgartirish qiyin bo‘lgan past sifatli kod
  • Asosiy belgilar: nusxa ko‘chirish, ma’nosiz nomlar, sehrli raqamlar, chuqur joylashish
  • Sabablari — muddatlar, kod ko‘rib chiqishning yo‘qligi va past malaka
  • Oqibatlari — rivojlanishning sekinlashishi, texnik qarzning oshishi va jamoaning yo‘qolishi
  • DRY, KISS va SOLID tamoyillari — toza kodning asosi
  • Statik tahlil vositalari avtomatik ravishda gavnokodni aniqlaydi
  • Kod ko‘rib chiqish — yomon kod paydo bo‘lishining oldini olishning eng samarali usuli

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing