Metotlar Neden Vardır
Metot, adını çağırdığında çalıştırabileceğin, adı olan bir kod bloğudur. Aynı satırları tekrar tekrar yazmak yerine onları bir metodun içine bir kez yazar ve gerektiği kadar çağırırsın. Bu, programları daha kısa, daha okunaklı ve düzeltmesi çok daha kolay hale getirir; mantığı tek bir yerde değiştirirsin ve onu çağıran herkes güncellemeyi alır.
Aslında zaten metot çağırıyordun: System.out.println(...) bir metot çağrısıdır, list.size() de öyle. Şimdi kendi metotlarını yazacaksın.
Bir Metodu Tanımlamak ve Çağırmak
Bir metot tanımının dört parçası vardır: bir dönüş tipi, bir ad, bir çift parantez (parametreler için) ve süslü parantezler içinde bir gövde. İşte en küçük kullanışlı örnek: biraz iş yapan ve hiçbir şey döndürmeyen bir metot:
static void printGreeting() ifadesinin parçalarını oku:
static:main'in bir nesne oluşturmadan onu doğrudan çağırmasını sağlar (bununla ilgili ayrıntı aşağıda).void: bu metot hiçbir değer döndürmez.printGreeting: onu çağırmak için kullandığın ad.(): boş parantezler hiçbir girdi almadığı anlamına gelir.
Bir metodu, adını yazıp ardından parantez koyarak çağırırsın. main içindeki iki çağrı gövdeyi iki kez çalıştırır, dolayısıyla bu, selamlamayı iki kez yazdırır.
Bir Değer Döndürmek
Çoğu metot bir şey hesaplar ve onu return ile geri verir. Addan önceki dönüş tipi, dışarı ne tür bir değerin çıkacağını söyler; burada int:
square(5) ifadesi 25 olarak değerlendirilir; bunu bir değişkende saklayabilir, yazdırabilir ya da daha büyük bir ifadenin içinde kullanabilirsin; bir metot çağrısı, döndürdüğü değerin yerine geçer. return çalıştığı anda metot biter ve denetim çağırana geri döner. Aynı yol üzerinde bir return'den sonra gelen herhangi bir kod asla çalışmaz.
Dönüş tipi ile döndürülen değer eşleşmelidir. int bildirip return "text"; denemek bir derleme hatasıdır; derleyici bu sözleşmeyi zorunlu kılar.
void ile Bir Dönüş Tipi Karşılaştırması
Ayrım basittir: çağıran bir değere ihtiyaç duyduğunda gerçek bir dönüş tipi kullan, metot yalnızca bir şey yaptığında (yazdırır, kaydeder, durumu günceller) ise void kullan.
void logMessage(String msg) // iş yapar, hiçbir şey döndürmez
int add(int a, int b) // çağıranın kullandığı bir değer hesaplar
Yaygın bir başlangıç hatası, bir void metodun "sonucunu" kullanmaya çalışmaktır:
int x = printGreeting(); // derleme hatası: printGreeting() void döndürür
Atanacak bir değer olmadığı için bu derlenmez. Kendini bir void metodun sonucunu isterken bulursan, bu, onun bir şey döndürmesi gerektiğinin işaretidir.
Dallanan ve Erken Dönen Metotlar
Birden fazla yerden return yapabilirsin. Cevabı öğrenir öğrenmez erken dönmek, her şeyi else içinde iç içe yuvalamaktan çoğu zaman daha açık okunur:
Her return hemen çıktığı için, eşleşen ilk koşul kazanır. Yalnızca, değer döndüren bir metottaki her yolun bir return ile bittiğinden emin ol; bir dal hiçbir şey döndürmeden geçebiliyorsa, derleyici "missing return statement" diyerek şikâyet eder. Buradaki son return "F"; bu geçiş durumunu karşılar.
static Burada Ne Anlama Gelir
Yukarıdaki her metodun static olduğunu fark etmiş olabilirsin. Bir static metot, herhangi bir nesneye değil, sınıfın kendisine aittir, bu yüzden (kendisi de static olan) main onu doğrudan adıyla çağırabilir. static olmadan, metot bir örneğe aittir ve onu çağırmak için bir nesneye ihtiyacın olur.
Şimdilik, mantığı main ile birlikte duran küçük programlar yazarken, yardımcı metotlarını aynı şekilde çağrılabilmeleri için static olarak işaretle. Kendi sınıflarını ve nesnelerini oluşturmaya başladığında, statik olmayan (örnek) metotlar da yazacaksın; o, sınıflar bölümüyle gelir.
Yerel Değişkenler Metodun İçinde Kalır
Bir metodun içinde tanımlanan değişkenler yalnızca orada var olur. Metot çalıştığında oluşturulurlar ve metot döndüğünde yok olurlar; çağıran onları asla görmez:
total ve i tamamen sumTo'nun içinde yaşar. Metottan dışarı çıkan tek şey return ettiğin değerdir. Bu yalıtım bir avantajdır: her metot, geçici değişkenlerinin dışarı sızmasından ya da başka bir yerdeki adlarla çakışmasından endişe etmeden üzerine düşünebileceğin, kendi kendine yeten bir birimdir.
Sırada: Metot Parametreleri
Buradaki metotların her biri ya hiç girdi almadı ya da tek bir değer aldı. Asıl güç, veriyi içeri aktarmaktan gelir ve Java'nın argümanların nasıl aktarıldığı, nesnelerle ilkellerde neyin farklı olduğu ve bir parametreye varsayılana benzer bir yedek değer nasıl verileceği konusunda belirli kuralları vardır. Sıradaki sayfa bununla ilgili.
Sıkça Sorulan Sorular
Java'da metot nedir?
Metot, adını çağırarak istediğin zaman çalıştırabileceğin, adı olan bir kod bloğudur. Bir işi tek bir yerde toplar, böylece aynı satırları tekrarlamak yerine onu yeniden kullanabilirsin. Bir metot girdiler (parametreler) alabilir ve bir sonuç (dönüş değeri) geri verebilir ya da işini yapıp hiçbir şey döndürmeyebilir (void).
Java'da bir metot nasıl oluşturulur ve çağrılır?
Onu bir dönüş tipi, bir ad ve parantezlerle tanımla: static int square(int n) { return n * n; }. Sonra parantez içinde argümanlarla adını yazarak çağır: int result = square(5);. Hiçbir şey döndürmeyen bir metot void kullanır ve printGreeting(); gibi bağımsız bir deyim olarak çağrılır.
Java metodunda void ne anlama gelir?
void, metodun hiçbir değer döndürmediği anlamına gelir; işini yapar (örneğin yazdırır) ve çağırana hiçbir şey geri vermez. Bir void metodun sonucunu bir değişkene atayamazsın. Bir metot, çağıranın kullanacağı bir değer üretmeliyse, ona int ya da String gibi gerçek bir dönüş tipi ver ve bunun yerine return kullan.