İnkişafda hardkod: bu nədir, risklər və necə qarşısını almaq

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

“Mıxla vurmaq” vę “hardkod etmək” – dəyərləri parametrlərə və ya konfiqurasiyaya çıxarmaq əvəzinə birbaşa proqram kodunda sərt şəkildə təsbit edən jarqon terminlərdir. Hardkod proqramlaşdırmada ən tanınmış anti-nümunələrdən biridir, çünki o kodun çevikliyini və təkrar istifadə olunma qabiliyyətini azaldır. Refactoring Guru-nun məlumatlarına görə, hardkod test etməni, dəstəyi və tətbiqin müxtərif mühitlərə uyğundaşdırılmasını çətinləşdirir. Düşünülmüş şəkildə hardkod əvəzinə konstantlardan istifadə etmək yetkin arxitekturanın əlamətidir.

Başlıca

  • Hardkod etmək – konkret dəyəri birbaşa mənbə kodunda yazmaq
  • Hardkod çeviklik itkisi və dəstək çətinliyi səbəbindən anti-nümunə hesab olunur
  • İstisnalar: riyazi konstantlar, massiv ölçüləri, standart dəyərlər
  • Alternativlər: konfiqurasiya faylları, ətraf mühit dəyişənləri, resurslar
  • Hardkodun refaktorinqi kodun test edilməsini və genişləndirilməsini yaxşılaşdırır

“Mıxla vurmaq” və “hardkod etmək” nə deməkdir

Hardkod etmək (mıxla vurmaq) – konkret dəyəri proqram koduna elə yerləşdirmək ki, onu dəyişmək üçün mənbə kodunu redaktə etmək və tətbiqi yenidən kompilyasiya etmək lazım olacaq. “Mıxla vurmaq” metaforası mahiyyəti dəqiq əks etdirir: dəyər möhkəm şəkildə təsbit olunub və onu koddan ayırmaq yalnız səylə mümkündür.

Hardkod nümunəsi – funksiyanın gövdəsində birbaşa sətir kimi yazılmış server URL-i. Server başqa ünvana köçərsə, proqramçı koddakı sətri tapmalı, onu dəyişməli, tətbiqi yenidən qurmalı və buraxılışı təqdim etməlidir. Düzgün arxitekturaya malik tətbiqdə belə bir URL konfiqurasiya faylına, ətraf mühit dəyişəninə və ya konfiqurasiya xidmətinə çıxarılardı.

“Mıxla vurmaq” termini daha emosional çalara malikdir: dəyərin möhkəm şəkildə vurulduğunu və sürətli dəyişdirilməsinin mümkün olmadığını vurğulayır. Azərbaycan dilində hər iki ifadə tam sinonim kimi mənfi çalarla işlədilir. Bəzən hardkodu istehza ilə “konstantdan ayrı konstanta çıxarılmış konstant” adlandırırlar.

Niyə hardkod anti-nümunə hesab olunur

Hardkod anti-nümunədir, çünki o kodun saxlanıla bilmə, test edilə bilmə və genişləndirilə bilmə prinsiplərini pozur. Dəyərlərin “mıxla vurulduğu” koddakı hər hansı bir mühit, dizayn və ya məntiq dəyişikliyi mənbələrdə əl ilə axtarış və dəyişdirmə tələb edir. Bu, səhv riskini artırır və inkişafı yavaşaldır.

Tipik bir mobil tətbiq nümunəsində hardkodun konkret nəticələrini nəzərdən keçirək. Bütün dümələrin girintisi koddakı rəqəmlə göstərilirsə, resurs vasitəsilə deyil – dizayn dəyişikliyi bütün halların tapılmasını və dəyişdirilməsini tələb edəcək. Endpoint URL-i sərt şəkildə yazılıbsa – mühitlər (dev, stage, prod) arasında keçid etmək yenidən kompilyasiya olmadan mümkün deyil.

NəticəTəsvirKritiklik səviyyəsi
Dəstək çətinliyiDəyişiklik bütün kodun axtarılmasını tələb edirYüksək
Köçürmə səhvləriBütün hallar tapılmır və dəyişdirilmirYüksək
Test etmənin qeyri-mümkünlüyüTest məlumatlarını əvəz etmək olmurOrta
Lokallaşdırma problemləriKoddakı mətnlər tərcümə edilmirOrta
Code-review-in çətinləşməsiYoxlayan şəxs bütün kontekstləri yadda saxlamalıdırAşağı

Pis hardkod nümunəsi

Sehrli rəqəmlər və sərt yazılmış sətrlərdən istifadə edən funksiya hardkodun klassik nümunəsidir. Bir aydan sonra müəllif 18, 0.07 və 2.5-in nə demək olduğunu xatırlamayacaq. Bir ildən sonra – komandada heç kəs məntiqi pozmaq qorxusundan bu rəqəmləri dəyişməyə cəsaret etməyəcək. Dəyərləri adlandırılmış konstantlara çıxarmaq kodu özünü sənədləşdirən edir.

kotlin
// Pis: sehrli rəqəmlər və sətirlər
fun calculatePrice(base: Double): Double {
    val tax = base * 0.07
    val tip = base * 0.15
    val discount = if (base > 100) 10 else 0
    return base + tax + tip - discount
}

Test etməyə təsiri

Hardkod edilmiş verilənlər bazası URL-i yerli in-memory verilənlər bazasında testləri işə salmağa imkan verməyəcək. Proqramçı tam hüquqlu server qaldırmalı və ya test etməzdən əvvəl kodu dəyişməlidir. Konfiqurasiyanı koddan çıxarmaq problemi həll edir: testlər test parametrlərindən, istehsalat – istehsalat parametrlərindən istifadə edir və kod dəyişmir.

Hardkod nə vaxt əsaslandırılır: qaydalardan istisnalar

Hardkod anti-nümunədir, lakin sərt yazılmış dəyərin nəinki yol verilən, həm də üstünlük verilən olduğu qanuni istisnalar mövcuddur. Sərhəd dəyişkənlik oxu boyunca keçir: əgər dəyər tətbiqin həyat dövüründə heç və ya demək olar ki, heç vaxt dəyişmirsə, onu hardkod etmək olar. Potensial olaraq dəyişə bilərsə – konfiqurasiyaya çıxarın.

Riyazi və fiziki konstantlar – Pi sayı, sərbəst düşmə təcili, saniyədəki millisaniyələrin sayı – hardkod üçün təhlükəsizdir. Onlar təbiət və ya standartlarla müəyyən edilir və dəyişməyəcək. Konstant massivlərin ölçüləri də spesifikasiya ilə müəyyən edilmiş şəkildə sərt təsbit edilə bilər, ancaq rəqəmin mənşəyi barədə şərh ilə.

Əsaslandırılmış hardkod nümunəsi

Saniyədəki millisaniyələrin sayı zaman standartı ilə müəyyən edilmiş sabit konstantdır. Onu konfiqurasiyaya çıxarmağın mənası yoxdur, çünki o heç vaxt dəyişməyəcək. Lakin hətta belə konstantları başa düşülən adla bəyan etmək daha yaxşıdır ki, kod “sehrli rəqəmlər” ehtiva etməsin: 1000 əvəzinə MILLISECONDS_IN_SECOND yazmaq.

kotlin
// Əsaslandırılmış hardkod: sabit konstantlar
private const val MILLIS_IN_SECOND = 1000
private const val LOGIN_TIMEOUT_SECONDS = 30

fun formatDuration(ms: Long): String {
    val seconds = ms / MILLIS_IN_SECOND
    return "${seconds} sec."
}

Hardkoda alternativlər: konfiqlər, ENV, DI

Hardkoddan qaçmağın bir neçə sınaqdan keçmiş üsulu var, hər biri öz dəyər növü üçün uyğundur. Alternativin seçimi dəyərin nə qədər tez-tez dəyişməsindən və onu kimin dəyişməsindən asılıdır: proqramçı, devops və ya son istifadəçi.

Konfiqurasiya faylları

Server URL-ləri, API açarları və funksiya flagları üçün JSON, YAML və ya TOML formatlarında konfiqurasiya fayllarından istifadə edin. Android-də bu build.gradle buildConfigField və ya res/values/config.xml ilədir. iOS-da – Info.plist və ya xcconfig. Konfiqlər tətbiqlə birlikdə yığılır, lakin müxtəlif qurma sxemləri üçün fərqli ola bilər.

Ətraf mühit dəyişənləri

Sirrlər (tokenlər, şifrələr) və ətraf mühit parametrləri üçün ətraf mühit dəyişənlərindən istifadə edin. Onlar repozitoriya daxil olmur və dev, stage və prod serverlərində fərqli ola bilər. Mobil inkişafda ətraf mühit dəyişənləri tez-tez Xcode qurma sxemləri və ya Gradle-də build flavor-ları vasitəsilə emulyasiya olunur.

Tətbiq resursları

Sətrlər, rənglər, ölçülər, şəkillər resurs fayllarına çıxarılmalıdır: Android-də strings.xml, iOS-da Localizable.strings, Flutter-də ARB faylları. Bu lokallaşdırmanı, müxtəlif ekranlara uyğundaşdırmanı və qaranlıq rejimi asanlaşdırır. Resurslarda sətrin dəyişdirilməsi kodun yenidən yazılmasını tələb etmir.

xml
<!-- Android: res/values/strings.xml -->
<resources>
    <string name="app_name">MyApp</string>
    <string name="api_base_url">https://api.example.com</string>
</resources>

Asılılıqların daxil edilməsi (DI)

Xidmətlər və təminatçılar üçün Android-də Dagger, Hilt və ya Koin, iOS-da Swinject vasitəsilə Dependency Injection-dan istifadə edin. DI çərçivələri testlər, müxtəlif mühitlər və müxtəlif istifadəçilər üçün implementasiyaları anında dəyişməyə imkan verir. Bu, dəyərin “mıxla vurulmasının” kənardan daxil edilmə ilə əvəz olunduğu ən yüksək abstraksiya səviyyəsidir.

Hardkod edilmiş kodu necə refaktor etmək

Hardkodun refaktorinqi – sərt yazılmış dəyərləri konfiqurasiyaya və ya resurslara çıxarma prosesidir. Bu, metodik şəkildə yerinə yetirilərsə, refaktorinqin ən təhlükəsiz əməliyyatlarından biridir. Aşağıda təsvir edilmiş ardıcıllıq istənilən dil və platforma üçün uyğundur.

Addım 1: bütün sehrli rəqəmləri və sətrləri tapın

Axtarış IDE (Search in Project) və ya skript vasitəsilə edilə bilər. Sətrləri, URL-ləri, ədədi literalları, ölçüləri, vaxt limitlərini axtarın. Xüsusi diqqət – təkrarlanan dəyərlərə: əgər eyni rəqəm beş yerdə görünürsə, bu konstantaya çıxarma üçün namizəddir. Grep və ya IDEA / Xcode daxili axtarışından istifadə edin.

Addım 2: adlandırılmış konstantlarla əvəz edin

Hər tapılan dəyər üçün mənalı adı olan konstant yaradın. Konstantları modullara və ya siniflərə görə qruplaşdırın. Ad dəyərin nə demək olduğunu izah etməli, necə istifadə olunduğunu yox: API_TIMEOUT, TIMEOUT_30 yox. Əvəz etdikdən sonra koddakı heç bir rəqəm izahsız qalmamalıdır.

swift
// Əvvəl: sehrli rəqəm 0.4
let cardHeight = screenHeight * 0.4

// Sonra: adlandırılmış konstant
private let cardHeightRatio: CGFloat = 0.4
let cardHeight = screenHeight * cardHeightRatio

Addım 3: konfiqurasiyaya və ya resurslara çıxarın

Əgər dəyər qurmalar və ya mühitlər arasında dəyişə bilərsə – onu konfiqurasiya faylına və ya tətbiq resurslarına çıxarın. Sətrlər üçün lokallaşdırma fayllarından istifadə edin. URL üçün – build config və ya xcconfig. Ölçülər üçün – resurs faylları (Android-də dimens.xml). Çıxarmadan sonra tətbiqin yığıldığını və düzgün işlədiyini yoxlayın.

Addım 4: test yazın

Refaktorinqdən sonra konfiqurasiyanın düzgün yükləndiyini və dəyərlərin gözlənilənə uyğun olduğunu yoxlayan test yazın. Gələcəkdə kimsə konfiqi dəyişərsə, test uyğunsuzluğu göstərəcək. Konfiqurasiya testi reqressiyanın qarşısını almaq üçün sürətli və etibarlı bir üsuldur.

Addım 5: dublikatları silin

Konfiqurasiyaya çıxardıqdan sonra köhnə dəyərin istifadə olunduğu bütün yerlərin vahid mənbəyə istinad etdiyini yoxlayın. Şerh edilmiş kodu və artıq istifadə olunmayan köhnə konstantları silin. Hansı dəyərlərin hara çıxarıldığını təsvir edən mesajla refaktorinqi commit-lə yekunlaşdırın.

Tez-tez verilən suallar

Proqramlaşdırmada “hardkod etmək” nə deməkdir?

Hardkod etmək – dəyəri konfiqurasiyaya və ya resurslara çıxarmaq əvəzinə birbaşa mənbə kodunda sərt şəkildə yazmaq. Bu kodu daha az çevik və dəstəklənməsi daha çətin edir.

Niyə hardkod pis təcrübə hesab olunur?

Hardkod tətbiqin davranışını dəyişməyi çətinləşdirir, test etməyə mane olur, təkrarlanma yaradır və köçürmə zamanı səhv riskini artırır. Hardkod edilmiş dəyərin dəyişdirilməsi tətbiqin yenidən yığılmasını və yenidən buraxılmasını tələb edir.

Hardkod nə vaxt yol veriləndir?

Yol verilən riyazi konstantlar, tətbiqin həyat dövüründə dəyişməyən sabit dəyərlər və müvəqqəti prototiplər üçündür. İstehsalatda hətta konstantları da adlandırılmış dəyişənlərə çıxarmaq daha yaxşıdır.

Mövcud koddakı hardkodu necə əvəz etmək olar?

Axtarış vasitəsilə bütün sehrli rəqəmləri tapın, onları adlandırılmış konstantlarla əvəz edin və ya konfiqurasiya faylına çıxarın. Konfiqurasiyanın yüklənməsini yoxlayan test yazın. Dublikatları silin və dəyişikliklərin təsviri ilə commit edin.

Konstant və hardkod arasında nə fərq var?

Konstant – koddakı adlandırılmış dəyər, bir yerdə dəyişmək üçün əlçatandır. Hardkod – kod boyu səpələnmiş adsız dəyərlərdir. Yaxşı təcrübə: həmişə mənalı adları olan adlandırılmış konstantlardan istifadə edin.

Nəticələr

  • Hardkod etmək (mıxla vurmaq) – dəyəri sürətli dəyişdirilmə imkanı olmadan koda yazmaq
  • Hardkod – dəstəyi, test etməni və genişləndirməni pisləşdirən anti-nümunə
  • Sehrli rəqəmlər və adsız sətrlər – hardkodun ən geniş yayılmış forması
  • İstisnalar: riyazi konstantlar və sabit standart dəyərlər
  • Alternativlər: konfiqurasiya faylları, resurslar, ENV, DI konteynerləri
  • Hardkodun refaktorinqi dublikatların tapılması və onların adlandırılmış konstantlarla əvəz edilməsi ilə başlayır
  • Refaktorinqdən sonra konfiqurasiyanın yüklənməsi üçün test yazın

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