Ah spagetti, marinara, pesto veya kremalı makarna sosuyla kaplandığında çok lezzetli – ama benim kod satırlarımla bir ilgisi olduğunda berbat. Bu makale, spagetti koduyla olan (aşk?) nefret ilişkime adanmıştır.
Umarım makalenin sonunda siz de benim kadar spagetti kodundan nefret edersiniz ve ortak deneyimlerimizden karşılıklı olarak teselli bulabiliriz. Eğer öyle olmazsa, en azından bir şeyler öğrenmiş olursunuz, hatta belki gülersiniz!
Bu Spagetti Kod Sevgi-Nefret Hikayesinde...
Öyleyse başlayalım, Spaghetti kodu nedir 🙄?
Bu, sağlam yazılım geliştirme uygulamalarına uymayan kod yazdığınızda ortaya çıkan durumdur. Bu makalenin sonunda, spagetti kodun ne olduğu veya en azından neye benzediği (ve ne yapmamanız gerektiği) netleşmiş olacağını umuyorum.
Spaghetti kodunun resmi anlamı, derin veya geniş bağımlılıklar olarak adlandırılan durumlarda ortaya çıkan durumdur. Bununla kastettiğim, kodunuzun doğru çalışması için uygulamanızın çok fazla veya çok az kısmına bağlı olmasıdır.
Ancak spagetti kodun ne olduğunu tanımlayan birçok farklı fikir vardır. Benim en sevdiğim tanım Alex Martelli'ye aittir: "Spagetti kod, uygun yukarıdan aşağıya ayrıştırma kurallarına uymadığınızda ortaya çıkan şeydir."
"Top-down" terimine aşina olmayanlar için, bu konuda Wikipedia'dan bir alıntı yapayım: "Hiyerarşik tasarım olarak da bilinen top-down tasarım, üst düzey modülleri ve ardından alt düzey alt modülleri tanımlayarak başlar ve bireysel rutinler tanımlanana kadar devam eder."
Bu, ideal bir spagetti parçasının şu anda yazılanlardan kodun yapması gerekenlere şu adımları izleyerek geçeceği anlamına gelir:
1) Bu spagetti parçasının ne işe yaradığını belirleyin.
2) Şu anda yaptığı şey olması gereken şey değilse, yapması gereken şeyi yapması için yeniden yazın (bu aşama, kodunuzun yapması gerekenlere bölünebilir).
3) Kodu yazın.
4) Tüm spagetti kodları spagetti olmayan kodlarla değiştirilene kadar bu işlemi tekrarlayın.
Ancak, çoğu zaman insanlar bu 3 ve 4'ü atlayıp doğrudan 2 veya 1'e (genellikle 1'e) geçerler ve ardından temiz kod uygulamalarını hiç dikkate almadan çılgın bilim adamları gibi kodlamaya başlarlar. Birkaç ay sonra, genellikle spagetti kod olarak adlandırılan bir kodla karşı karşıya kalırlar.
Spagetti kodunu nasıl tespit edebiliriz?
İlk olarak, kodunuz takip etmesi zor bir karmaşa gibi görünüyorsa, bu muhtemelen ilk ipucunuzdur. Tanımlanması daha zor spagetti kodları için, işte diğer bazı ipuçları:
- Kodunuzu düzenlemek veya hata ayıklamak size büyük bir sıkıntı veriyorsa, büyük olasılıkla bu spagetti koddur.
- Hiçbir geliştirici belirli bir projede sizinle çalışmak istemiyorsa veya PR isteğinizi incelemek istemiyorsa, büyük olasılıkla bu spagetti koddur.
- Yöneticiniz size rastgele öfke patlamaları yaşıyorsa, büyük olasılıkla çok fazla spagetti kod yazıyorsunuzdur.
Bu örneklerden herhangi biri sizin için geçerliyse endişelenmeyin, önemli olan spagetti kodunuzun nasıl göründüğüne dair sizin düşüncenizdir – şu anda kötü olduğunu düşündüğünüz şey, bu makaleyi okuduktan sonra aslında çok daha kötü görünecektir.
Peki spagetti kodu neye benzer?
Bu, yazdığınız dil ve kullanılan çerçeve/kütüphanelere bağlıdır. Burada, jQuery kullanılarak JavaScript ile yazılmış bazı spagetti kodları örnek olarak göstereceğim:
function KFCSecretMenu() { //yapıcı
this.getKrushers = function() {
} } $(document).ready(function(){ //event listener for DOM Ready $(‘.welcome’).click(function (){ //event listener for click on element with class name of welcome $(‘.menu-item’).addClass(‘active’); //class to be added if the submenu is opened.
$(‘.menu-item’).find(‘.description’).slideDown(); //sliding down effect for description text }) }); function MenuItemClicked (e) { var itemID = $(e.target).parent().attr(‘id’); //gets ID of parent menu item var description = $(e.target).next().text() KFCSecretMenu.getKrushers({‘itemID’:itemID,’description’:description}); //calling function below }
Takip mi? Hayır, bu kesinlikle spagetti! 🕵️
Bu spagetti kodunu bu kadar kötü yapan şeyin ne olduğunu, onu diğerlerinden daha spagetti yapan şeyin ne olduğunu ve bunu düzeltmek için neler yapabileceğinizi inceleyeceğiz. Peki spagetti kodunu bu kadar kötü yapan nedir? Bence spagetti kodunu spagetti kodu yapan en yararlı liste şudur: Yinelenen veya aşırı karmaşık işlevler, yöntemler ve değişkenler Takip etmesi zor ve/veya girintisi olmayan yapılar Takip etmesi zor ve/veya uzun işlevler Okunması zor boşluklar Takip etmesi zor mantık Yorum eksikliği Alışılmadık kodlama stilleri (çok fazla çaba sarf etme) İyi değişken adları.
Kodunuzu karmaşık hale getirecek başka şeyler de vardır, ancak bunlar mutlaka spagetti kod olarak kabul edilmez: Verimsiz algoritmalar Büyük dosya boyutu Kötü tasarlanmış yazılım Test eksikliği Spagetti kod, kullanılan her dil, çerçeve ve kütüphanede farklı görünür – birinde spagetti olan şey, diğerinde spagetti olmayabilir. Bu da spagetti kodun neye benzediğini tanımlamayı zorlaştırır. Yapmanız gereken, birkaç yıl önce sizin için spagetti kodun ne olabileceğini düşünmektir – kodunuzdaki en büyük sorunlar nelerdi? Muhtemelen yukarıdaki listeden bazı hatalar yapmışsınızdır, bu yüzden geçmişteki kod parçalarının kötü yanlarını karşılaştırmaya başlayın ve bu makaleyi okurken bu listeyi aklınızda tutmaya çalışın.
Spagetti kodunuzu belirlediniz, peki bununla nasıl başa çıkacaksınız?
Spagettimizi... yani kodumuzu olması gerektiği hale nasıl dönüştüreceğimizi tartışmaya başlamadan önce dikkat edilmesi gereken bazı önemli noktalar var:
Not 1: Kodunuzu nasıl YAZMAMANIZ gerektiğine dair yüzlerce (belki binlerce) yol vardır. Bunu olabildiğince basit tutmaya çalışıyorum, burada yazdıklarımın bağlamı, kod yazma konusunda çok temel bilgilere sahip olanlar içindir. Sadece biraz boşluk ve yorum ekleyerek neler yapabileceğinize gerçekten şaşıracaksınız!
Not 2: Spagetti kodunu kendiniz düzeltmeye çalışmadan önce ne yaptığınızı anlamanız çok önemlidir – aksi takdirde durumu daha da kötüleştirebilirsiniz! Anlamadıysanız, anlayana kadar bu makaleyi tekrar okuyun – sonra buraya geri dönün.
Not 3: Şu anda spagettinizin neden dağınık olduğunu araştırıyoruz, ancak bunun nedenini araştırmıyoruz (bu nedenle editörümüzü açmadan önce iki kez düşünmeliyiz).
Spaghetti kodunun faydaları nelerdir?
Hiçbir şey. Sıradaki konu!
Gelecekte spagetti kodunu nasıl önleyebiliriz?
İtalya'ya taşınmak ve her kirli kod yazdığınızda çok kızgın bir İtalyan adamın size çiğ spagetti ile kafanıza vurmasını beklemek yerine, şu şeyleri deneyebilirsiniz...
- Spagetti kodunu önlemenin iyi bir yolu, işlevlerinizi ve yöntemlerinizi kısa tutmaktır. Bu, bir işlevin sadece yapması gerekeni yapması gerektiği anlamına gelir. 10 farklı şey yapan veya 100 satırlık bir işlev gereksizdir – gereksiz olanları kaldırın!
- Spagetti kodundan kaçınmak için bir başka ipucu da, yapılanların değiştirilmemesini sağlamaktır. Bununla demek istediğim, döngülerin içinde başka döngüler iç içe geçmemesi, başka bir deyişle, iç içe geçmesi gerekmeyen şeyleri iç içe geçirmemeniz gerektiğidir!
- Kod biçimlendirmeyi de unutmayın, boşluklar ve girintiler spagetti kodunda mucizeler yaratabilir! Kod ne kadar güzel görünürse, okunması da o kadar kolay olur.
- Retros – neyin iyi gittiğini her zaman gözden geçir, böylece bunu takip edebilir ve bir dahaki sefere uygulayabilirsin!
- Alternatif olarak, kodlama becerilerinizi geliştirebilirsiniz.
- Spagetti kodunuzun nasıl görünmesini istediğinizi planlarken son bir ipucu: kodu doğrudan editörünüze yazmak yerine, kodun yapmasını istediğiniz şeyleri grafikler halinde çizmeyi deneyin (yani, her bir fonksiyonun ne yapması gerektiğini, bunları uygulamaya koymadan önce inceleyin). Bu yanlış giderse, bir adım geri atın ve baştan başlayın.
Bu basit kurallara uyarsanız, yazdıklarınızın spagettiye dönüşmeyeceğini neredeyse garanti edebilirim – ama ben ne bilirim ki? Belki de teyzenizin spagetti dediği şey aslında gizli bir spagetti kodudur.
Spagetti kod hakkında son düşünceler
Spagettini kucaklamayı da deneyebilirsin, onu hayatındaki tek mutluluk kaynağı olarak sev! Bu da işe yaramazsa, alternatifini simüle eden bu harika GIF var.
Her şey başarısız olursa, kodlama becerilerinizi geliştirebilirsiniz. Ama cidden, bu yapmanız gereken en son, en son, en son, en son şey olmalı!



