Anti-kalıplara giriş

Anti-kalıplar, kalıpların tam tersidir. Tasarım kalıplarının iyi programlama uygulamalarına, yani belirli problemleri çözmek için kullanılan kalıplara örnek olduğunu hatırlayın. Ancak anti-kalıplar tam tersidir, yani çeşitli problemleri çözerken yapılan hata kalıplarıdır.

İyi programlama uygulamasının bir kısmı, kesinlikle anti-kalıplardan kaçınmaktır. Bunun bu kadar anlaşılmaz bir teorik çöp olduğunu düşünmeyin - bunlar, hemen hemen her geliştiricinin karşılaştığı belirli sorunlardır. Kim bilir, silahlı!

Yeni başlayanlar arasında yaygın olan birkaç anti-kalıplara bakalım:

  • Sihirli sayılar ve diziler
  • tanrı sınıfı
  • erken optimizasyon
  • bisikletin icadı
  • Tek tekerlekli bisikletin icadı

Sihirli sayılar ve diziler

Sihirli bir sayı, bir şey için kodda kullanılan bir sabittir (çoğunlukla veri tanımlama), sayının kendisi karşılık gelen bir yorum olmadan hiçbir anlam ifade etmez. Sayılar kesinlikle anlam taşımaz.

Projenizin kodunda anlamı belli olmayan rakamlar belirmeye başladığında, bu çok kötü. Böyle bir kodun yazarı olmayan bir programcı, nasıl çalıştığını açıklamakta zorluk çekecektir. Zamanla, sihirli sayılarla kodun yazarı bile açıklayamayacak.

Sayılar, kodun anlaşılmasını ve yeniden düzenlenmesini zorlaştırır. Bu hatanın ana nedenleri, geliştirmedeki acelecilik ve programlama pratiğinin olmamasıdır. Bu anti-patern, geliştirmeye başlamadan önce sayısal sabitlerin kullanımını şart koşarak tomurcuk halinde kırpılmalıdır.

Bu sorunu çözmek için, adı sayısal sabitin amacını açıklayan bir değişken oluşturmanız ve ona istenen değeri atamanız gerekir.

tanrı sınıfı

İlahi nesne, OOP geliştiricileri arasında oldukça yaygın olan bir anti-kalıptır. Böyle bir nesne çok fazla işlev üstlenir ve/veya neredeyse tüm verileri depolar. Sonuç olarak, anlaşılması zor olan taşınabilir olmayan bir kodumuz var.

Ek olarak, tüm sistemin neredeyse tamamen ona bağlı olduğu göz önüne alındığında, bu tür bir kodun bakımı oldukça zordur. Bu hatanın nedenleri: geliştirici beceriksizliği, işin büyük bir bölümünü bir geliştiricinin üstlenmesi (özellikle işin miktarı geliştiricinin deneyim düzeyini aştığında).

Görevleri, farklı geliştiricilerin başa çıkabileceği alt görevlere bölerek bu yaklaşımla başa çıkmak gerekir.

erken optimizasyon

Erken optimizasyon , programcının nerede ve nasıl yapılacağı hakkında bilinçli kararlar vermek için gereken tüm bilgilere sahip olmadan önce gerçekleştirilen optimizasyondur.

Pratikte darboğazın nerede oluşacağını tahmin etmek zordur. Ampirik sonuçlar elde etmeden önce optimize etme girişimleri, kodun karmaşıklığına ve hataların ortaya çıkmasına yol açacaktır, ancak herhangi bir fayda sağlamayacaktır.

Nasıl kaçınılır? İlk olarak, iyi bilinen ve kanıtlanmış algoritmaları ve araçları kullanarak temiz, okunabilir, çalışan kodlar yazın. Gerekirse darboğazları bulmak için profil oluşturma araçlarını kullanın. Tahminlere ve varsayımlara değil, ölçümlere güvenin.

Örnekler ve özellikler

Profil oluşturmadan önce önbelleğe alma. Matematiksel olarak doğru algoritmalar yerine karmaşık ve kanıtlanmamış buluşsal yöntemler kullanmak. Yük altında hatalı davranabilecek yeni, denenmemiş çerçevelerden oluşan bir seçki.

zorluk nedir

Optimizasyonun ne zaman erken olduğunu belirlemek kolay değildir. Önceden büyüme için yer bırakmak önemlidir. Kolayca optimize etmenize ve büyümenize olanak tanıyan çözümler ve platformlar seçmeniz gerekiyor. Ayrıca bazen erken optimizasyon, kötü kod için bir bahane olarak kullanılır. Örneğin, yalnızca algoritma O(n) daha zor olacağı için bir O(n2) algoritması alırlar.

bisikletin icadı

Bu anti-patern'in anlamı, programcının çözümleri zaten mevcut olan bir soruna kendi çözümünü ve genellikle çok daha başarılı olanları geliştirmesidir.

Geliştirici kendini daha zeki olarak görüyor, bu nedenle öncekilerin deneyimine rağmen her görev için kendi çözümünü bulmaya çalışıyor. Çoğu zaman, bu yalnızca zaman kaybına ve programlayıcının verimliliğinde bir azalmaya yol açar. Sonuçta, eğer bulunursa, çözüm muhtemelen yetersiz olacaktır.

Elbette, bağımsız bir çözüm olasılığını tamamen göz ardı edemezsiniz, çünkü bu, doğrudan kopyala-yapıştır programlamaya yol açacaktır. Geliştirici, hazır çözümleri kullanarak veya kendi çözümlerini icat ederek yetkin bir şekilde çözmek için önünde görünebilecek görevlerde gezinmelidir.

Çoğu zaman, bu anti-kalıpın nedeni basit bir zaman eksikliğidir. Ve vakit nakittir.

Kare tekerlekli bisikletin icadı

Bu anti-patern, tekerleği yeniden icat etmekle çok yakından ilgilidir - daha iyi bir çözüm varken kendi kötü çözümünüzü yaratmak.

Bu anti-kalıp iki kat zaman alır: ilk olarak, kendi çözümünüzü icat etmek ve uygulamak için zaman harcanır ve ardından onu yeniden düzenlemek veya değiştirmek için zaman harcanır.

Programcı, belirli görev aralıkları için çeşitli çözümlerin varlığından haberdar olmalı , avantaj ve dezavantajlarına göre yönlendirilmelidir.

Bir programcı olarak karşılaşacağınız tüm sorunlar iki bölüme ayrılabilir:

  • akıllı insanlar bu sorunu 30 yıl önce çözdü
  • akıllı insanlar bu sorunu 50 yıl önce çözdü

Programlama problemlerinin çoğu siz doğmadan önce başarıyla çözüldü . Hiçbir şey icat etmeye gerek yok - sadece diğer insanların deneyimlerini inceleyin (kitaplar bunun için yazılır).

2022'de aşağıdaki doğum günlerini kutlayabiliriz:

  • Programlama dilleri
    • C dili 50 yaşına giriyor (1972)
    • Java dili 27 yaşına bastı (1995)
    • Python 31 yaşında (1991)
  • Bağlantı
    • İnternet 39 yaşına girdi (1983)
    • Cep telefonu 49 yaşına girdi (1973)
    • İlk SMS 30 yıl önce gönderildi (1992)
  • desenler
    • MVC modeli 44'e döndü (1978)
    • SQL 48 yıl önce icat edildi (1974)
    • Java Fasulyesi 26 yıl önce icat edildi (1996)
  • kütüphaneler
    • Hibernate 21 yıl önce icat edildi (2001)
    • Bahar 20 yıl önce icat edildi (2002)
    • Tomcat 23 yıl önce yayınlandı (1999)
  • işletim sistemi
    • Unix 51 yıl önce yayınlandı (1971)
    • Windows 37 yıl önce gün ışığını gördü (1985)
    • Mac OS 21 yıl önce yayınlandı (2001)

Ve tüm bunlar sadece icat edilmedi, o zamanlar çok yaygın ve alakalı olan sorunlara çözüm olarak geliştirildi.