Hatırlanması gereken en önemli şey, bunların kurallar değil, kurallar olduğudur.
Bir yöntemin basitçe bir argüman alması gereken durumlar vardır . +
Örneğin sayılar için yöntemi düşünün . Veya add
bir koleksiyon yöntemi.
Aslında, bir hatta iki numara eklemek için ne anlama geldiğini ℤ örn, bağlam bağlı olduğunu iddia edebilir 3 + 3 == 6
, ama ℤ içinde | 5 3 + 3 == 2
, bu yüzden gerçekten toplama operatörü götüren bir bağlam nesne üzerinde bir yöntem olmalıdır iki a argümanlar yerine bir argüman alan sayılar üzerinde yöntem.
Benzer şekilde, iki nesneyi karşılaştırmak için bir yöntem, ya bir nesneyi diğerini bağımsız değişken olarak alan bir yöntem ya da bağlamın bir yöntemi, iki nesneyi bağımsız değişken olarak alarak olmalıdır, bu nedenle birden az argüman.
Bununla birlikte, bir yöntemin argüman sayısını azaltmak için yapılabilecek birkaç şey var:
- Yöntemin kendisini küçültün : Belki, yöntemin bu kadar çok argümana ihtiyacı varsa, çok fazla şey yapıyor?
- Eksik bir soyutlama : Eğer argümanlar birbiriyle yakından ilişkiliyse, belki de birbirlerine aittirler ve kaçırdığınız bir soyutlama var mı? (Kurallı ders kitabı örneği: iki koordinat yerine bir
Point
nesne iletin veya kullanıcı adı ve e-posta iletmek yerine bir IdCard
nesne iletin.)
- Nesne durumu : Bağımsız değişkene birden çok yöntem gerekiyorsa, belki de nesne durumunun bir parçası olmalıdır. Bu yöntemlerden sadece bazıları için gerekliyken diğerleri için gerekli değilse, belki de nesne çok fazla şey yapıyor olabilir ve gerçekten iki nesne olmalıdır.
Bir yol, argümanları yeni bir sınıfa çıkarmaktır, ancak bu kesinlikle sınıfların patlamasına neden olur mu?
Etki alanı modelinizde çok farklı şeyler varsa, kodunuz çok farklı türde nesnelerle sonuçlanır. Bunda yanlış bir şey yok.
Ve bu sınıfların muhtemelen bazı adlandırma kurallarını ("Veri" veya "Bilgi" vb. İle biten) ihlal eden isimlerle mi sonuçlanacağı?
Doğru bir ad bulamazsanız, ya çok fazla argümanı bir araya getirdiniz ya da çok az argüman oluşturdunuz. Yani, ya sadece bir sınıfın parçasına sahipsiniz ya da birden fazla sınıfınız var.
Başka bir teknik, birden fazla işlev tarafından kullanılan değişkenleri, bunları geçirmekten kaçınmak için özel bir üye değişken yapmaktır, ancak bu, değişkenin kapsamını genişletir, muhtemelen gerçekte ihtiyaç duymayan işlevlere açık olacak şekilde.
Hepsi aynı argümanlar üzerinde çalışan bir yöntem grubunuz ve olmayan başka bir yöntem grubunuz varsa, belki de bunlar farklı sınıflara aittir.
"Belki" kelimesini ne sıklıkla kullandığımı not et. Bu yüzden bunlar kural değil kurallardır. Belki 4 parametreli yönteminiz gayet iyi!