
Dublikat yanlış abstraksiyadan ucuzdur — Sandi Metsin xəbərdarlığı
Sandi Mets 2014-cü ildəki RailsConf çıxışında və 2016-cı il esseyində dublikatın yanlış abstraksiyadan qat-qat ucuz olduğunu əsaslandırdı, ortaq funksiyanın şərtlərlə dolu tələyə çevrilmə yolunu və geri dönüş reseptini izah etdi.
Dublikat yanlış abstraksiyadan qat-qat ucuzdur
Sandi Mets 2014-cü ildə RailsConf-da etdiyi "All the Little Things" çıxışının qısa hissəsini bu gün də proqram komandalarında dolaşan bir iddiaya həsr etdi: dublikat yanlış abstraksiyadan qat-qat ucuzdur. Məsləhəti sərt idi — yanlış abstraksiya yerinə dublikata üstünlük verin. Reaksiya o qədər güclü oldu ki, Mets bu fikri sonradan esseyə çevirdi: mətn əvvəlcə onun Chainline bülleteni üçün yazıldı və 2016-cı ilin yanvarında bloqda yenidən dərc olundu. Bəzi tərtibatçılar ağlını itirdiyini söylədilər; daha çoxu isə təsvir etdiyi nümunənin öz kod bazalarında hər yerdə olduğunu bildirdi.
Yaxşı abstraksiya necə tələyə çevrilir
Mets təkrarlanan bir hekayə təsvir edir. Proqramçı A dublikatı görür, onu ayırır, ad verir — metod, bəzən sinif — və hər nüsxəni yeni abstraksiya ilə əvəz edir. Kod mükəmməl görünür. Vaxt keçir. Abstraksiyanın demək olar uyğun gəldiyi, amma tam uyğun olmadığı yeni tələb yaranır. Proqramçı B onu saxlamağı özünə borc bilir, parametr və şərti məntiq əlavə edir. Növbəti tələb daha bir parametr və daha bir şərt gətirir; dövr kod anlaşılmaz hala gələnə qədər davam edir.
Tələ texniki olduğu qədər də psixoloji bir tələdir. Mövcud kod öz lehinə danışır: varlığı onun doğru və zəruri olduğunu göstərir, kiminsə səyini təmsil edir və o səyi qorumaq istəyi güclüdür. Kod nə qədər qarışıq və anlaşılmazdırsa, onu saxlamaq təzyiqi bir o qədər artır — bu, batmış xərc yanılmasıdır. Növbəti tərtibatçı gələndə ortaq köməkçi funksiya artıq tək bir ideya deyil, anlamaq çətin, sındırmaq asan olan şərtlərlə dolu prosedurdur.
Geri dönüş yolu: içəri qaytar, buda, yenidən çıxar
Resept intuitivliyə ziddir: abstraksiya yanlışdırsa, irəli getməyin ən sürətli yolu geriyə gedir. Abstraktlaşdırılmış kodu hər çağıranın içinə qaytarın, hər çağıranda parametrlərə baxaraq onun həqiqətən hansı hissəyə ehtiyacı olduğunu müəyyənləşdirin və qalanını silin. Beləcə həm abstraksiya, həm şərtlər birlikdə yox olur və hər çağıran yalnız istifadə etdiyi kodla qalır.
Bunu sınayan komandalar tez-tez görürdü ki, çağıranlar əslində heç vaxt eyni işi görməyib. Köhnə abstraksiya getdikdən sonra dublikatı yenidən ayırmaq və öyrənilənlərdən yeni abstraksiyalar çıxarmaq mümkün oldu, yeni funksiyaların əlavə edilməsi isə sürətləndi. Metsin praktik qaydası: əgər ortaq kodda parametr ötürür və şərti yollar əlavə edirsinizsə, abstraksiya səhvdir. Onu erkən buraxmaq müdafiə etməkdən az ağrılıdır. "Abstraksiya yanlış olduqda irəli getməyin ən sürətli yolu geriyə gedir. Bu geri çəkilmə deyil, daha yaxşı istiqamətdə irəliləyişdir," — deyə yazır.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.