Kokuyor çünkü düzenlenebileceği veya iyileştirilebileceği birçok durum var.
Bu kokuların çoğu, yanlış olabilecek bir şeyin ipuçlarıdır. Dolayısıyla bunların kendiliğinden düzeltilmesi gerekmez… (Yine de araştırmalısınız.)
Önceki tüm kod kokularını (Bölüm i - XXXIII) burada bulabilirsiniz.
Devam edelim...
Önemli hata: Yakalanmayan Hata: 'logs_queries_web' sınıfı /var/www/html/query-line.php:78 dosyasında bulunamadı
Yığın izleme: #0 {main}, 718. satırdaki /var/www/html/query-line.php dosyasına atıldı
TL;DR: Hatalarınızı yakalayın. Hiç beklemediklerin bile.
Üst düzey bir işleyici kullanın.
Dönüş kodlarını tercih eden dillerden kaçının.
Veritabanı ve düşük düzeyli hataları bekleyin.
2022'de bile sıradan kullanıcılara bir yığın veya hata ayıklama mesajı gösteren "ciddi" web sitelerini görebiliriz.
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
Sorunları simüle etmek ve bunların doğru şekilde ele alınıp alınmadığını görmek için mutasyon testini kullanabiliriz.
Olgunlaşmaya devam etmemiz gerekiyor.
Çözümlerimiz özensiz olmamalıdır.
Ciddi yazılım mühendisleri olarak itibarımızı artırmamız gerekiyor.
Kod Kokuları sadece benim görüşüm .
Unsplash'ta jesse orrico'nun fotoğrafı
Sorunlarımın yüzde 80'i basit mantık hatalarından oluşuyor. Geriye kalan sorunların yüzde 80'i işaretçi hatalarıdır. Geriye kalan sorunlar zordur.
Mark Donner
Yazılım Mühendisliği Harika Sözler
Hashing, iki nesnenin farklı olduğunu garanti eder. Aynı olduklarından değil.
TL;DR: Karmayı kontrol ederseniz eşitliği de kontrol etmelisiniz
7 Ekim 2022'de daha büyük blockchainlerden birinin durdurulması gerekti.
Bu haber şok ediciydi çünkü çoğu blockchain tanımı gereği merkezden dağıtılmıştı.
Makalenin tamamını buradan okuyabilirsiniz:
Bir Hacker Kod Kokusunu Kullanarak 566 Milyon Doları Nasıl Çaldı?
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
Birçok linter'ın hash ve eşitliğin yeniden tanımlanmasına yönelik kuralları vardır.
Mutasyon testi ile farklı nesneleri aynı hash ile tohumlayabilir ve testlerimizi kontrol edebiliriz.
Her performans iyileştirmesinin dezavantajları vardır.
Önbellekler ve çoğaltmalar dikkate değer örneklerdir.
Bunları dikkatli kullanabiliriz (kullanmalıyız).
Code Smell 150 - Eşit Karşılaştırma
Kod Kokuları sadece benim görüşüm .
Bu bazı okuyucularınızı şaşırtacak, ancak benim asıl ilgi alanım bilgisayar güvenliği değil. Öncelikle amaçlandığı gibi çalışan bir yazılım yazmakla ilgileniyorum.
Wietse Venema
Yazılım Mühendisliği Harika Sözler
Bazı değişiklikler yapmamız gerekiyor. Nedenini açıklığa kavuşturmamız gerekiyor
TL;DR: Tasarım veya uygulama kararlarınız konusunda açıklayıcı olun.
Bazen keyfi kuralların o kadar kolay test edilemeyeceğini görüyoruz.
Başarısız bir test yazamıyorsak, yorum yerine mükemmel ve bildirimsel bir isme sahip bir fonksiyona ihtiyacımız var.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
Bu anlamsal bir koku.
Yorumları tespit edip bizi uyarabiliyoruz.
Kod düzyazıdır. Ve tasarım kararları anlatısal olmalıdır.
Code Smell 05 - Suistimalcilere Yorum Yapın
Code Smell 75 - Bir Yöntemin İçindeki Yorumlar
Kod Kokuları sadece benim görüşüm .
Unsplash'ta Goh Rhy Yan'ın fotoğrafı
İnsanlar gibi programlar da yaşlanır. Yaşlanmayı önleyemeyiz ama nedenlerini anlayabilir, etkilerini sınırlayabilir ve hasarın bir kısmını tersine çevirebiliriz.
Mario Fusco
Yazılım Mühendisliği Harika Sözler
Aynı anda iki veya daha fazla şey yapmayın.
TL;DR: Yöntemlerinizde mümkün olduğunca atomik olmaya çalışın
https://maximilianocontieri.com/refactoring-002-extract-method
Bir yöntemi 'Ve' ile adlandırırsanız, muhtemelen bir çıkarma ve kırma yöntemi fırsatını kaçırıyorsunuz demektir.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Bazı linterler 've' terimini içeren yöntemler konusunda bizi uyarabilir.
Yöntemleri oluştururken plastik ördek hikayesi oynamak ve işleri doğru yapıp yapmadığımızı kendimize söylemek çok önemlidir.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Kod Kokuları sadece benim görüşüm .
Unsplash'ta Scott Sanker'in fotoğrafı
Diğer disiplinlerin çoğunda olduğu gibi programlama sanatını öğrenmek de önce kuralları öğrenmek, sonra da bu kuralları ne zaman çiğnemeniz gerektiğini öğrenmekten oluşur.
Joshua Bloch
Gelişmek harika. yeniden düzenleme şaşırtıcı. Aynı anda yapmayın
TL;DR: İşlevsel olarak değişiklik yapmayın ve aynı anda yeniden düzenleme yapmayın.
Bazen daha fazla gelişme için yeniden düzenlemenin gerekli olduğunu tespit ederiz.
Biz öğrenme konusunda uzmanız.
Çözümümüzü beklemeye almalıyız. Yeniden düzenleme üzerinde çalışın ve çözümümüze devam edin.
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
Bu yeniden yapılanma kokusu.
Fiziksel bir belirteç kullanmalıyız.
Ya yeniden düzenleme aşamasındayız ya da geliştirme aşamasındayız.
Kod Kokuları sadece benim görüşüm .
Unsplash'ta Dannie Jing'in fotoğrafı
Kod çalışırken, yeniden düzenleme beni normalde özleyeceğim daha yüksek düzeyde anlayışa yönlendiriyor. Anlamanın yeniden düzenlenmesini kodla gereksiz bir şekilde uğraşmak olarak görenler, kafa karışıklığının arkasında saklı fırsatları asla göremediklerinin farkında değiller.
Martin Fowler
Yakında 5 kod kokusu daha geliyor…