Kodunuz Koklayabilir! Nasıl düzeltilir

  • Lesley Fowler
  • 0
  • 1363
  • 317
reklâm

bir kod kokusu kod temelinin genel yapısında ve tasarımında daha derin bir sorun olduğunu gösterebilecek gibi görünen bir kod parçası veya genel kodlama modelidir..

Bir kod bölümünün yeniden düzenlenmesi gerektiğini gösteren herhangi bir işaret olarak bir kod kokusunu düşünün. Kodun hatalı ya da işlevsel olmadığı durum değildir - çoğu zaman, koklama kodunun iyi çalıştığı - ancak koklama kodunun bakımı ve uzatılması zordur, bu da teknik sorunlara neden olabilir (özellikle daha büyük projelerde).

Bu yazıda, en yaygın 10 kod kokusundan, ne arayacağımızdan ve kokuları nasıl gidereceğinizden bahsedeceğiz. Yeni bir programcısınız Eğer Stres Olmadan Programlama Nasıl Öğrenilir Tüm Stressiz Programlamayı Öğrenmek Belki bir kariyer için veya bir hobi olarak programlama yapmaya karar verdiniz. Harika! Ama belki bunalmış hissetmeye başladın. Çok iyi değil. İşte yolculuğunuzu kolaylaştırmak için yardım. , bunlardan kaçının ve kodunuz daha iyi olacaktır!

1. Sıkı Kavrama

Sorun
Sıkı bağlanma, iki nesnenin birbirinin verisine ve / veya birinin değiştirilmesinin diğerinin değiştirilmesini gerektiren fonksiyonlara bağlı olması durumudur. İki nesne çok sıkı bir şekilde birleştiğinde, kodda değişiklik yapmak bir kabus olabilir ve her değişiklikte hatalar ortaya çıkması daha olasıdır.

Örneğin:

işçi sınıfı Bisiklet bisikleti = yeni Bisiklet (); genel boşluk commute () bike.drive (); 

Bu durumda, İşçi ve Bisiklet sıkıca birleştirilmiştir. Ya bir gün, gidip gelirken Bisiklet yerine Araba kullanmak istersen? Worker sınıfına girmeniz ve Bisikletle ilgili tüm kodları Araba ile ilgili kodla değiştirmeniz gerekir. Dağınık ve hatalara eğilimli.

Çözüm
Bir soyutlama katmanı ekleyerek kaplini gevşetebilirsiniz. Bu durumda, İşçi sınıfı sadece Bisiklet sürmek istemez, aynı zamanda Otomobiller ve belki de Kamyonlar, hatta Scooters bile. Bunların hepsi Araçlar, değil mi? Böylece istediğiniz şekilde farklı Araç tiplerini takmanıza ve değiştirmenize izin veren bir Araç arayüzü oluşturun:

işçi sınıfı Taşıt aracı; halka açık geçersiz değişiklikVarçacık (Araç v) araç = v;  public void commute () vehicle.drive ();  arayüz Araç void sürücü ();  sınıf Bisiklet Araç public void drive ()  uygular sınıfı Araç \ araç public void drive ()  uygular

2. Tanrı'nın Nesneleri

Sorun
God nesnesi, çok fazla değişken ve fonksiyon içeren masif bir sınıf / modüldür. O “çok fazla şey biliyor” ve “çok yapar,” bu iki nedenden dolayı sorunludur. İlk olarak, diğer sınıflar / modüller veriler için bu konuya aşırı güvenir (sıkı bağlantı). İkincisi, programın genel yapısı çamurlu hale gelir, çünkü her şey aynı yere sıkıştırılır.

Çözüm
Bir God nesnesini alın, verilerini ve işlevlerini çözecekleri sorunlara göre ayırın, ardından bu grupları nesnelere dönüştürün. Bir Tanrı nesnesiniz varsa, daha küçük nesnelerin bileşimi olarak daha iyi olabilir..

Örneğin, korkunç bir kullanıcı sınıfınız olduğunu varsayalım:

sınıf Kullanıcı public String kullanıcı adı; public Dize şifresi; Genel Dize adresi; public Dize posta kodu; public int age;… public String getUsername () return kullanıcı adı;  public void setUsername (Dize u) kullaniciadi = u; 

Bunu aşağıdakilerden oluşan bir bileşime dönüştürebilirsiniz:

sınıf Kullanıcı Kimlik bilgileri kimlik bilgileri; Profil profili;… sınıf Kimlik bilgileri public String kullanıcı adı; public Dize şifresi;… public Dize getUsername () return username;  public void setUsername (Dize u) kullaniciadi = u; 

Giriş prosedürlerini bir daha değiştirmeniz gerektiğinde, Credentials sınıfı daha yönetilebilir olduğundan, büyük bir User sınıfında gezinmeniz gerekmez!

3. Uzun İşlevler

Sorun
Uzun bir işlev tam olarak göründüğü gibidir: çok uzun süren bir işlev. Ne kadar kod satırı için belirli bir numara olmasa da “çok uzun” Bir işlev için, onu gördüğünüzde bildiğiniz şeylerden biridir. Neredeyse tanrı nesne sorununun daha dar kapsamlı bir versiyonu - uzun bir fonksiyonun çok fazla sorumluluğu var.

Çözüm
Uzun işlevler, her bir alt işlevin tek bir görevi veya sorunu ele almak üzere tasarlandığı birçok alt işleve bölünmelidir. İdeal olarak, orijinal uzun işlev kodun daha temiz ve okunmasını kolaylaştıracak şekilde alt işlev çağrılarının listesine dönüşür.

4. Aşırı Parametreler

Sorun
Çok fazla parametre gerektiren bir işlev (veya sınıf yapıcısı) iki nedenden dolayı sorunludur. İlk olarak, kodu daha az okunabilir hale getirir ve test edilmesini zorlaştırır. Fakat ikincisi ve daha da önemlisi, işlevin amacının çok belirsiz olduğunu ve çok fazla sorumluluk üstlenmeye çalıştığını gösterebilir..

Çözüm
Süre “çok fazla” Bir parametre listesi için subjektiftir, 3'ten fazla parametreye sahip herhangi bir fonksiyona karşı temkinli olmanızı öneririz. Elbette, bazen 5 hatta 6 parametresiyle tek bir işleve sahip olmak mantıklıdır, ancak bunun için gerçekten iyi bir neden varsa.

Çoğu zaman, bir tane olmaz ve kod bu işlevi iki veya daha fazla farklı işleve ayırmakta daha iyi olur. Aksine “Uzun İşlevler” kod kokusu, bu yalnızca kodu alt işlevlerle değiştirerek çözülemez - işlevin ayrı sorumlulukları kapsayan ayrı işlevlere bölünmesi ve parçalanması gerekir.

5. Kötü Adlandırılmış Tanımlayıcılar

Sorun
Bir veya iki harfli değişken isimleri. Düzensiz işlev isimleri. Aşırı süslenmiş sınıf isimleri. Değişken adlarını türleriyle işaretleme (örneğin, bir boole değişkeni için b_isCounted). Ve hepsinden kötüsü, farklı adlandırma şemalarını tek bir kod tabanında karıştırmak. Bunların tümü, okunması zor, anlaşılması zor ve bakımı zor kodlarla sonuçlanır..

Çözüm
Değişkenler, işlevler ve sınıflar için iyi adlar seçmek çok zor bir beceridir. Mevcut bir projeye katılıyorsanız, araştırın ve mevcut tanımlayıcıların nasıl adlandırıldığını görün. Bir stil rehberi varsa, ezberleyin ve ona uygun. Yeni projeler için, kendi stil rehberinizi oluşturmayı düşünün ve ona bağlı kalın.

Genel olarak, değişken isimleri kısa fakat açıklayıcı olmalıdır. İşlev isimleri tipik olarak en az bir fiil içermeli ve işlevin sadece isminden ne yaptığı hemen belli olmalı, fakat çok fazla kelime kullanmaktan kaçının. Aynısı sınıf isimleri için de geçerli.

6. Sihirli Sayılar

Sorun
Birilerinin yazdığı (umarım) bazı kodlara göz atıyorsunuz ve bazı sabit kodlanmış sayıları görüyorsunuz. Belki if-if ifadesinin bir parçası ya da bir anlam ifade etmeyen bazı arcane hesaplamalarının bir parçası. İşlevi değiştirmeniz gerekir, ancak sayıların ne anlama geldiğini bir türlü anlayamazsınız. Cue kafa çizilmemesi.

Çözüm
Kod yazarken, bunlar “sihirli sayılar” ne pahasına olursa olsun kaçınılmalıdır. Kodlanmış sayılar yazıldığı zaman anlamlıdır, ancak hızlı bir şekilde tüm anlamlarını kaybedebilir - özellikle de başkası kodunuzu korumaya çalıştığında.

Çözümlerden biri, sayıyı açıklayan yorumlar bırakmaktır, ancak daha iyi seçenek sihirli sayıları sabit değişkenlere (hesaplamalar için) veya numaralandırmalara (koşullu ifadeler ve anahtar ifadeleri için) dönüştürmektir. Sihirli numaralara bir ad vererek, kod bir bakışta kademesiz olarak daha okunaklı olur ve buggy değişikliklerine daha az eğilimli hale gelir.

7. Derin Yerleştirme

Sorun
İç içe geçmiş kodla baş etmenin iki ana yolu vardır: döngüler ve koşullu ifadeler. Derinden iç içe geçmiş kod her zaman kötü değildir, ancak sorunlu olabilir, çünkü ayrıştırılması zor olabilir (özellikle değişkenler iyi adlandırılmamışsa) ve değiştirmesi daha zor olabilir.

Çözüm
Kendinizi ikili, üçlü ve hatta dörtlü bir döngü yazarken bulursanız, kod bulmak veri bulmak için kendisinin dışına çıkmaya çalışıyor olabilir. Bunun yerine, hangi nesne veya modül veri içeriyorsa onu bir işlev çağrısı yoluyla istenecek veri için bir yol sağlayın.

Öte yandan, derinlemesine yerleştirilmiş koşullu ifadeler, genellikle tek bir işlev veya sınıfta çok fazla mantık kullanmaya çalıştığınızın bir işaretidir. Aslında, derin yuvalama ve uzun işlevler el ele gitme eğilimindedir. Kodunuzda büyük anahtar ifadeleri varsa veya if-else-else ifadeleri iç içe geçmişse, bunun yerine bir Devlet Makinesi veya Strateji modeli uygulamak isteyebilirsiniz..

Derin yuvalanma, deneyimsiz oyun programcıları arasında özellikle yaygındır. 5 Kendi Oyunlarını Yapmak İçin Ücretsiz Oyun Geliştirme Yazılım Araçları 5 Kendi Oyunlarını Yapmak İçin Ücretsiz Oyun Geliştirme Yazılım Araçları Ücretsiz oyun geliştirme yazılımı, video oyunu yapımına başlamak için harika bir yoldur. Piyasadaki en iyi oyun yazılımını derledik. !

8. İşlenmeyen İstisnalar

Sorun
İstisnalar güçlüdür ancak kolayca kötüye kullanılır. Yanlış atma ifadeleri yanlış kullanan tembel programcılar, imkansız olmasa bile hata ayıklamayı katlanarak zorlaştırabilir. Örneğin, görmezden gelmek veya gömmek istisnalar dışında.

Çözüm
Yakalanan istisnaları yok saymak veya gömmek yerine, en azından istisnanın yığın izini yazdırın, böylece hata ayıklayıcıların çalışacak bir şeyi olur. Programınızın sessizce başarısız olmasına izin vermek, gelecekteki baş ağrıları için bir reçetedir, garantili! Ayrıca, genel istisnalar dışındaki özel istisnaları yakalamayı tercih edin. İstisnaların doğru şekilde nasıl ele alınacağı hakkında daha fazla bilgi edinin. Java İstisnalarının Doğru Bir Şekilde Nasıl Yapılacağını Öğrenin Java İstisnalarının Doğru Bir Şekilde Nasıl Kullanıldığını Bu makalede, Java istisnalarının ne olduğunu, neden önemli olduklarını öğreneceksiniz. önlemek için bunları ve genel hataları kullanın. .

9. Yinelenen Kod

Sorun
Aynı kesin mantığı, programınızın ilgisiz birçok alanında uygularsınız. Daha sonra, bu mantığı değiştirmeniz gerektiğinin farkındasınız, ancak uyguladığınız tüm yerleri hatırlamıyorsunuz. Sonucu 8 yerden sadece 5'inde değiştirmekle sonuçlanır, buggy ve tutarsız davranışlarla sonuçlanır.

Çözüm
Yinelenen kod, bir işleve dönüştürülmek için birincil bir adaydır. Örneğin, bir sohbet uygulaması geliştirdiğinizi ve şunu yazdığınızı varsayalım:

String queryUsername = getSomeUsername (); boolean isUserOnline = yanlış; (dize kullanıcı adı: onlineUsers) if (username.equals (queryUsername))) isUserOnline = true;  if (isUserOnline) …

Kodda başka bir yerde, aynı işlemi yapmanız gerektiğinin farkındasınız “bu kullanıcı çevrimiçi mi?” Kontrol. Döngüyü kopyalayıp yapıştırmak yerine, bir işleve çıkartabilirsiniz:

public boolean isUserOnline (String queryUsername) for (String kullanıcı adı: onlineUsers) if (username.equals (queryUsername))) return true;  false döndürmek; 

Şimdi kodunuzun herhangi bir yerinde, isUserOnline () kontrolünü kullanabilirsiniz. Bu mantığı değiştirmeniz gerekirse, yöntemi çimdikleyebilirsiniz ve çağrıldığı her yere uygulanabilir..

10. Yorum eksikliği

Sorun
Kodun hiçbir yerde kesinlikle yorumu yok. İşlevler için dokümantasyon blokları, sınıflar için kullanım genel bakışları, algoritmalar açıklamaları vb. Yok. Birisi, iyi yazılmış kodun yorumlara ihtiyaç duymadığını iddia edebilir, ancak gerçek şu ki, en iyi yazılmış kodun bile hala zihinsel enerji harcadığı söylenebilir. İngilizceden anlayın.

Çözüm
Bakımı kolay bir kod tabanının amacı, yazmaması için yeterince iyi yazılmış bir kod olmalıdır. gerek yorum, ama hala onları var. Ve yorumlar yazarken, açıklayan yorumları hedefleyin. niye ya açıklamak yerine bir kod snippet'i var ne yapıyor. Yorumlar ruh ve akıl sağlığı için iyidir. Onları ihmal etmeyin.

Kokusuz Kod Yazma

Göründüğü gibi, çoğu kod kokusu, iyi programlama ilkeleri ve kalıplarının yanlış anlaşılmasından veya ihmal edilmesinden kaynaklanmaktadır. 10 Temel Programlama İlkeleri Her Programcı Uyması Gereken 10 Temel Programlama İlkesi Her Programcı Uymalıdır Her zaman sonlandırabilecek herkes tarafından tutulan kodu yazın yazılımınız üzerinde çalışmaya başlayabilirsiniz. Bu amaçla, burada eyleminizi temizlemenize yardımcı olacak birkaç programlama ilkesi bulunmaktadır. . Örneğin, DRY ilkesine sağlam bir bağlılık çoğu kod kopyalamayı ortadan kaldırırken, Tek Sorumluluk ilkesinin ustalığı canavarca Tanrı objeleri yaratmayı neredeyse imkansız hale getiriyor.

Ayrıca, temizleyici kodunun nasıl yazılacağı ile ilgili makalemizi de okumanızı öneririz. 10 Temizleyici ve Daha İyi Kod Yazmanın Püf Noktaları 10 Temizleyici ve Daha İyi Kod Yazmanın Püf Noktaları Temiz kod yazmak aslında olduğundan daha kolay görünüyor, ancak faydaları buna değer. İşte bugün temizleyici kodunu yazmaya başlayabilirsiniz. programlamanın daha pratik bir tarafına bakar. Kendi kodunuzu okuyamıyor ve bir bakışta anlayamıyorsanız başkası nasıl olacak? Temiz kod kokusuz koddur.

Programlamaya gelince, en çok ne ile mücadele ediyorsunuz? Aşağıdaki yorumlarda bizimle paylaşın!

Resim Kredisi: SIphotography / Depositphotos




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.