emirhan-kartal / customizable-rank-minecraft-plugin

0 stars 2 forks source link

Kendini geliştirmende yardımcı olabileceğini düşündüğüm bir kaç satır yazı #1

Open personinblack opened 6 years ago

personinblack commented 6 years ago

Java'ya yeni başladığını tahmin ediyorum ve sana yaptığın bir kaç hatayı göstermek istiyorum.

  1. Kendi domainin dışarısında paket oluşturmamalısın. Eğer bir başka Spigot/Bukkit eklentisi senin gibi aynı şeyi yaparsa classlarınız çakışır ve sorun çıkar. Paketlerini her ne olursa olsun kendi domainin içerisinde tutmalısın. bknz. Bu durumda listeners ve utils paketleri com/mhawthor/ranks paketi içerisinde bulunmalıdır.

  2. Yazdığın eklentinin tüm işlevlerini tek bir class içerisinde biriktirmemelisin. Bu hem okunabilirliği azaltır hem de seni kısıtlar. Eklentini classlara bölüp nesne yönelimli çalışmayı deneyebilirsin.

  3. Import ile beraber wildcard * kullanmamalısın. bknz

  4. Bir classı tanımlarken classın generic type ını kullanmalısın. Örneğin HashMap<String> myMap = new HashMap<>() yerine Map<String> myMap = new HashMap<>() kullanman daha doğrudur. (Map interface'inde olmayıp, HashMap classında bulunan bir metodu kullanman gerekmiyorsa) bknz. Bunun nedenini öğrenmek için type safety ve liskov substitution principle üzerine araştırma yapabilirsin.

  5. Aynı kodu defalarca kez farklı yerlerde yazmak yerine bu kodu bir metoda çevirip tekrar tekrar kullanabilirsin. Henüz farkına vardın mı bilemiyorum fakat programlama yaparken zamanının çoğu kod yazmaktan ziyade yazdığın kodu okumakla geçer. Dolayısı ile yazdığın kod ne kadar düzenli olursa o kadar verimli çalışırsın.

  6. Bir başka classtan aldığın metodların üzerine @Override annotationını koy ki o metodun başka yerden geldiği belirginleşsin.

  7. Bir metodu okunamayacak kadar uzun tutmamalısın. Gerekirse metodu parçalara bölmeli veya farklı şekillerde yazmayı denemelisin.

  8. Bir satır bu kadar uzun olmamalı. İki farklı proje üzerinde aynı anda çalıştığını ve ikisini yanyana koyduğunu düşün. Bu tarz uzun satırlar bulunurken bunun ne kadar zor olabileceğini anlamışsındır diye düşünüyorum. Aynı satırı şu şekilde yazabilirsin:

    Bukkit.getPlayer(args[0]).sendMessage(
      Chat.colored(
            "&6Rank'ın " + RankMethod.getRankById(rank.get(p)).getName() +
            " rank'ından " + r.getName() + " rankına degistirildi!"
      )
    );
  9. Bir değişken tanımlarken, değişkenin ismini açıklayıcı bir şey olarak belirlemelisin. Sırf daha kısa diye r, s, cfk tarzı kafa karıştırıcı değişken isimlerini kullanmamalısın.

  10. Hiç bir şekilde hiç bir değişkeni null olarak tanımlamamalı, elinden geldiğince null den uzak durmalısın. Çünkü null kullandığında compile sırasında hata almasan bile eklenti çalışırken hata ile karşılaşabilirsin. Bu runtime hataları her zaman farkedilemeyebilir ve büyük sorunlara yol açabilirler.

  11. Sebebi ne olursa olsun public static kullanımından uzak durmalısın. static sözcüğü sen bir şeylere daha rahat erişebil diye bulunmuyor. static sözcüğünün bulunma sebebi bir değişkenin her yerde aynı değere sahip olmasını sağlamak veya bir metodun sürekli ve her kullanımda aynı sonucu döndürdüğünden emin olmaktır.

Bana ulaşmak istersen...

emirhan-kartal commented 6 years ago

Öneriler için teşekkürler. Söylediklerinizin bir kısmı v1.2'de düzeltildi. Değişken isimlerinde haklısınız, üşengeçlik meselesi. Özellikle gece kodlama yaptığım için bazı şeyler gözümden kaçabiliyor, dikkate alacağım teşekkürler.