Örnek Fonksiyonlar

Bilgisayar ve Programlamaya Giriş
SözleşmeSayıDoğrulamaYeniden kullanımTest
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Sözleşme

Metodun girdi ve çıktısını belirlemek.

Dönüş

Sonucu uygun türle döndürmek.

Özel durum

Geçersiz girdiyi ele almak.

Test

Metotları bağımsız örneklerle sınamak.

Tasarım

Önce Metot Sözleşmesi

  • Metot adı yaptığı işi açıkça belirtmelidir.
  • Parametrelerin geçerli değer aralığı tanımlanmalıdır.
  • Dönüş değerinin anlamı ve hata davranışı bilinmelidir.

Sayı Metotları

Tek / Çift

static boolean çiftMi(int sayı) {
    return sayı % 2 == 0;
}
  • boolean sonuç kararlarda doğrudan kullanılabilir.
  • Metot ekrana yazmak yerine sonucu döndürür.

Sayı Metotları

Basamak Sayısı

static int basamakSayısı(int sayı) {
    int kalan = Math.abs(sayı);
    if (kalan == 0) return 1;
    int adet = 0;
    while (kalan > 0) { adet++; kalan /= 10; }
    return adet;
}

Sayı Metotları

Rakamlar Toplamı

static int rakamlarToplamı(int sayı) {
    int kalan = Math.abs(sayı), toplam = 0;
    while (kalan > 0) {
        toplam += kalan % 10;
        kalan /= 10;
    }
    return toplam;
}

Sayı Metotları

Tam Sayı Üssü

static long üsAl(int taban, int üs) {
    if (üs < 0) throw new IllegalArgumentException();
    long sonuç = 1;
    for (int i = 0; i < üs; i++) sonuç *= taban;
    return sonuç;
}
  • Sözleşme negatif üssü kabul etmiyor.
  • Taşma ihtiyacı ayrıca değerlendirilmelidir.

Sayı Metotları

Faktöriyel

static long faktöriyel(int n) {
    if (n < 0) throw new IllegalArgumentException();
    long sonuç = 1;
    for (int i = 2; i <= n; i++) sonuç *= i;
    return sonuç;
}

Sayı Metotları

Asal mı?

static boolean asalMı(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= n / i; i++)
        if (n % i == 0) return false;
    return true;
}
  • İlk bölen bulunduğunda erken dönüş yapılır.

Ayrıştırma

Öğrenci Numarası Metotları

  • Her bilgi için ayrı metot tasarlanabilir: kayıtYılı, bölümKodu, sıraNo.
  • Numara başında sıfır olabiliyorsa String parametresi kullanılmalıdır.
  • Uzunluk ve karakter doğrulaması ayrıştırmadan önce yapılmalıdır.

Ayrıştırma

Metinle Ayrıştırma

static int kayıtYılı(String no) {
    if (!no.matches("\d{9}"))
        throw new IllegalArgumentException("9 rakam gerekir");
    return 2000 + Integer.parseInt(no.substring(0, 2));
}

Seriler

Fibonacci Yazdırmak Yerine Üretmek

static long[] fibonacci(int adet) {
    long[] seri = new long[adet];
    for (int i = 0; i < adet; i++) {
        if (i < 2) seri[i] = i;
        else seri[i] = seri[i-1] + seri[i-2];
    }
    return seri;
}
  • Diziyi döndürmek hesaplama ile sunumu ayırır.
  • Çağıran kod sonucu yazdırabilir veya başka işlemde kullanabilir.

Test

Metot Testleri

MetotNormalSınırGeçersiz
basamakSayısı487 → 30 → 1MIN_VALUE
faktöriyel5 → 1200 → 1-1 → hata
asalMı13 → true2 → true1 → false
fibonacci5 eleman0 elemannegatif → hata

Tasarım

Saf Metot ve Yan Etki

  • Aynı girdi için aynı sonucu döndüren ve dış durumu değiştirmeyen metot daha kolay test edilir.
  • Hesaplama metodu ile ekrana yazma metodu ayrılabilir.
  • Gerektiğinde yan etki açıkça adlandırılmalı ve sınırlandırılmalıdır.

Tasarım

Yeniden Kullanım

  • Metot tek bir örneğe değil genel kurala göre yazılmalıdır.
  • Sabit değerler gerektiğinde parametreye dönüştürülür.
  • Benzer kodlar ortak bir metotta birleştirilirken anlam kaybı yaratılmamalıdır.

Özet

Bölüm Özeti

  • Örnek problemler girdi, çıktı ve hata davranışı belirlenerek metoda dönüştürülür.
  • Hesaplama sonucunu döndürmek yeniden kullanımı ve testi kolaylaştırır.
  • Sınır ve geçersiz değerler metot sözleşmesinin parçasıdır.
  • Küçük ve odaklı metotlar daha kolay birleştirilir.

Özet

Kontrol Soruları

  1. çiftMi neden ekrana yazmak yerine boolean döndürüyor?
  2. Faktöriyel metodunda negatif girdi nasıl ele alınır?
  3. Öğrenci numarası ne zaman String olmalıdır?
  4. Fibonacci dizisi döndürmek ne sağlar?
  5. Saf metotlar neden daha kolay test edilir?

Son

Örnek Fonksiyonlar
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt