Aylık Arşiv: Haziran 2013

PL/SQL 3: İsimlendirme Standartları

Merhabalar.

Pek çok dil gibi PL/SQL’de de değişkenleri isimlendirmede belli standartların gözetilmesi, kodun anlaşılabilirliği açısından önemlidir.

PL/SQL’de isimlendirme için, ORACLE’ın önerdiği aşağıdaki standartları kullanmakta fayda var.

isimlendirme

 

Kendinize çook iyi davranın.

 

Bu sayfa 1451 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr

Refactoring 2: Yeni Metod Oluşturma(Extract Method) Yöntemi

Merhabalar.
Refactoring yöntemlerini incelemeye başlıyoruz. İlk olarak Extract Method yöntemi:

Nedir?

void printOwing(double amount) {
    printBanner();

    //print details
    System.out.println ("name:" + _name);
    System.out.println ("amount" + amount);
}

graphics/arrow.gif

void printOwing(double amount)
{
     printBanner();
     printDetails(amount);
}
void printDetails(double amount)
{
     System.out.println ("name:" + _name);
     System.out.println ("amount" + amount);
}

 

Neden?

* Mümkün olduğunca uzun ve commente(yorum satırı) ihtiyaç duyan kod parçalarından kaçınmak lazım.
* Bunun yerine kısa ve güzel isimlendirilmiş metodlar kullanılmalı. Çünkü:
– Küçük(core sayılabilecek) metodlar ihtiyaç duyulan başka yerlerde de kullanılabilir.
– Küçük metodları(kodu) okumak commenti okumaktan daha kolaydır.

Nasıl?

* Yeni bir metod oluşturulup(create), ne yaptığını(nasıl yaptığını değil) anlatan güzel bir isim verilir.
– Ayıklanacak kod kısaysa ve anlamlı bir isim konulamayacaksa ayıklanmaması daha iyidir.
* İlgili kod yeni metoda kopyalanır.
* Kodun içinde değişken olup olmadığına bakılır.
– Daha önceden tanımlanmış, alınacak kodun sonrasında da kullanılan değişkenler parametre olarak verilebilir.
– Sadece seçilen kısımda kullanılan değişkenler, oluşturulan metodun içinde tanımlanır.
– Seçilen kodda değişkenin değeri değişiyorsa, metodda return edilebilir.
* Kullanılan tüm değişkenler tarandıktan sonra, kod silinip, söz konusu bçlümde yeni metod çağırılır.
* Derleme ve test.

Örnek

Aşağıdaki java konsol uygulaması üzerinden mevzuyu örneklemeye çalışayım:

“Refactoring” adında bir adet sınıf oluşturuyorum. “Main” metodunda, bir kitapçıdaki kitapların isim ve fiyatlarını konsolda listeliyor:


public class Refactoring {

 public static void main(String[] args) {

 ArrayList kitapListe=new ArrayList();

 double[] satisFiyat=new double[3];
 double kar = 0.25;

 // başlığı yaz
 System.out.println ("**************************");
 System.out.println ("******** Kitaplar ********");
 System.out.println ("**************************");

 // kitaplar ekleniyor
 kitapListe.add(new Kitaplar( "Dublörün Dilemması",10.0));
 kitapListe.add(new Kitaplar( "Aşkın Gözyaşları",5.0));
 kitapListe.add(new Kitaplar( "Kime Emanet",6.0));

 // kitapların fiyatları hesaplanıyor
 for(int i=0;i<3;i++)
 {
 satisFiyat[i]=kitapListe.get(i).gelisFiyat*(1+kar);
 }

 // Kitap listesi yazdırılıyor
 for(int i=0;i<3;i++)
 {
 System.out.println(kitapListe.get(i).isim+" "+satisFiyat[i]+" TL");
 }
 }
}

Bir tane de “Kitaplar” sınıfı oluşturuyorum. Kitabın ismi ve kitapçıya geliş fiyatını barındırıyor.

public class Kitaplar
{
 String isim;
 Double gelisFiyat=0.0;

 public Kitaplar(String isim, double gelisFiyat)
 {
 this.isim=isim;
 this.gelisFiyat=gelisFiyat;
 }

 public String getIsim() {
 return isim;
 }

public void setIsim(String isim) {
 this.isim = isim;
 }

public Double getGelisFiyat() {
 return gelisFiyat;
 }

public void setGelisFiyat(Double gelisFiyat) {
 this.gelisFiyat = gelisFiyat;
 }

}

 

Şimdi adım adım Extract Method yöntemimizi uygulayalım:
1-) Yukarıda belirtildiği gibi, yorum satırına(comment) ihtiyaç bırakmayacak şekilde başlık kısmını güzel isimlendirilmiş bir metoda çıkarıyorum(main metodum static olduğu için diğer metodları da static oluşturuyorum):

static void basligiYazdir()
	{
	    System.out.println ("**************************");
        System.out.println ("******** Kitaplar ********");
        System.out.println ("**************************");
	}

2-) Sonra kitapları ArrayList‘e eklemek için bir metod oluşturuyorum.. ama ArrayList kodun devamında da kullanılacağı için “return” etmem gerekiyor:

static ArrayList kitaplariListeyeEkle()
	{
		ArrayList kitapListe=new ArrayList();

		kitapListe.add(new Kitaplar( "Dublörün Dilemması",10.0));
        kitapListe.add(new Kitaplar( "Aşkın Gözyaşları",5.0));
        kitapListe.add(new Kitaplar( "Kime Emanet",6.0));

        return kitapListe;
	}

Kodları çıkardığım yerlerden bu metodları çağırınca main metodu aşağıdaki gibi oldu:

public static void main(String[] args) {

 ArrayList kitapListe=new ArrayList();

 double[] satisFiyat=new double[3];
 double kar = 0.25;

 basligiYazdir();

 kitapListe=kitaplariListeyeEkle();

 // kitapların fiyatları hesaplanıyor
 for(int i=0;i<3;i++)
 {
 satisFiyat[i]=kitapListe.get(i).gelisFiyat*(1+kar);
 }

 // Kitap listesi yazdırılıyor
 for(int i=0;i<3;i++)
 {
 System.out.println(kitapListe.get(i).isim+" "+satisFiyat[i]+" TL");
 }
 }

3-) Fiyat hesaplamaları için de bir metod oluşturabilirim. Main kısmı olduğu için ne kadar “extract method” yapsam kardır.
Fiyat hesaplama kısmında kitapListe ArrayList’i kullanılıyor ve herhangi bir değişikliğe uğramıyor. O zaman bunu parametre olarak gönderebilirim.
satisFiyat dizisinin ise hem burada içeriği oluşturuluyor, hem de kodun devamında kullanılıyor. O halde “return” edebilirim bu değeri.
Son olarak ise kar değişkenine baktığımda sadece bu kısımda kullanıldığını görüyorum. O halde bu değişkeni yeni metodun içinde de tanımlasam olur. Yani:

static double[] fiyatlariHesapla(ArrayList kitapListe)
	{
		double[] satisFiyat=new double[3];
		double kar = 0.25;

		for(int i=0;i<3;i++)
        {
        	satisFiyat[i]=kitapListe.get(i).gelisFiyat*(1+kar);
        }

		return satisFiyat;
	}

4-) Son olarak listeyi konsola yazdırma kısmını da metoda çıkaralım. Bu kısımda kitapListe ArrayList‘imiz ve satisFiyat dizimiz kullanılıyor ve sadece değerleri görüntüleniyor. O zaman bunları parametre olarak göndermem yeterli:

static void kitapListesiniYazdir(ArrayList kitapListe, double[] satisFiyat)
	{
		for(int i=0;i<3;i++)
        {
        	System.out.println(kitapListe.get(i).isim+"   "+satisFiyat[i]+" TL");
        }
	}

..ve işte sınıfımızın son hali:

public class Refactoring {

	public static void main(String[] args) {

        ArrayList kitapListe=new ArrayList();
        double[] satisFiyat=new double[3];

        basligiYazdir();

        kitapListe=kitaplariListeyeEkle();

        satisFiyat=fiyatlariHesapla(kitapListe);

        kitapListesiniYazdir(kitapListe, satisFiyat);

    }

	static void basligiYazdir()
	{
		System.out.println ("**************************");
        System.out.println ("******** Kitaplar ********");
        System.out.println ("**************************");
	}

	static ArrayList kitaplariListeyeEkle()
	{
		ArrayList kitapListe=new ArrayList();

		kitapListe.add(new Kitaplar( "Dublörün Dilemması",10.0));
        kitapListe.add(new Kitaplar( "Aşkın Gözyaşları",5.0));
        kitapListe.add(new Kitaplar( "Kime Emanet",6.0));

        return kitapListe;
	}

	static double[] fiyatlariHesapla(ArrayList kitapListe)
	{
		double[] satisFiyat=new double[3];
		double kar = 0.25;

		for(int i=0;i<3;i++)
        {
        	satisFiyat[i]=kitapListe.get(i).gelisFiyat*(1+kar);
        }

		return satisFiyat;
	}

	static void kitapListesiniYazdir(ArrayList kitapListe, double[] satisFiyat)
	{
		for(int i=0;i<3;i++)
        {
        	System.out.println(kitapListe.get(i).isim+"   "+satisFiyat[i]+" TL");
        }
	}
}

Kendinize çook iyi davranın.

Kaynak: http://sourcemaking.com/refactoring/extract-method

 

Bu sayfa 1375 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr

Refactoring 1: Refactoring Nedir?

Merhabalar.
Refactoring, Türkçe’ye genelde “kod düzenleme” diye çeviriliyor.

Yazılan bir kodun zamanla değiştirilerek optimize edilmesi, kodu daha anlaşılır hale getirme, kodu adam etme vs. pek çok tanım yapılabilir.

Yazılan kodların üzerinden zaman geçtikten sonra(mesela 6-7 ay), hangi kodun ne ifade ettiği unutulabilir. Dolayısıyla anlamak için kodu okumak gerekir. Kod ne kadar karışıksa, yapılan işi anlamak da o kadar zorlaşır-velev ki kendi yaptığımız iş olsun- ve dolayısıyla o kadar zaman alır. Dahası bir kurumda çalışıyorsak, başkasının kodlarını okumamız da gerekecektir ve kodlar karışıksa bu durumun içinden çıkmak iyice zorlaşacaktır.

Peki yapılması gereken nedir?

Kodlamayı yaptıktan sonra veya başkasının yaptığı kötü bir kodlamayı gördükten sonra (kötü kodlamayı %95 başkaları yapar zaten:)), refactoring yapmak. Yani kodu elden geçirip kullanım yanlışlıklarını ve karışıklıkları gidermek. Mesela 3 satırlık bir kod 2-3 yerde tekrar ediyorsa o scripti, metod haline getirmek.  Veya 3 satırlık bir kodun ne yaptığını anlamak için comment(yorum satırı) yazmak gerekiyorsa, scripti metod haline getirip, ne yaptığını anlatan güzel bir isim vermek vs.

Tabi yaptığımızın refactoring olduğunu bilmeden, refactoring yaptığımız olmuştur. Refactoring yöntemlerini incelerken, siz de “aa ben refactoring yapıyormuşum” diyebilirsiniz.

Ayrıca şurada hangi durumlarda ve ne tür yöntemlerle refactoring yapılacağı güzel bir tabloyla gösterilmiş.

Ben peyderpey sourcemaking sitesindeki refactoring yöntemlerini, oradan çıkardığım notlarla(bi nevi özetler) yazmaya çalışacağım. Hem benim daha iyi kavramam hem de varsa burayı okuyan birileri, onların yararlanması açısından faydalı olacağını düşünüyorum.

Kendinize çook iyi davranın.

 Bu sayfa 1918 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr

PL/SQL 1: Giriş

Merhabalar.
Dilim döndüğünce PL/SQL’in ne olduğundan bahsetmeye çalışacağım. Devamındaki yazılarda da konu konu ilerlemeye çalışacağım.
PL/SQL:
* ORACLE veritabanında SQL sorgularını çalıştırmaya ve yorumlamaya yarayan bir programlama dilidir.
* Temel SQL tanımlarına yapısal dil özellikleri eklenerek oluşturulmuştur.
* Blok yapısında bir dildir.
* Değişkenler oluşturulabilir, prosedürler ve fonksiyonlar yazılabilir.
* IF-THEN-ELSE, CASE-WHEN gibi koşul yapıları, WHILE Loop, FOR Loop gibi döngüler kullanılabilir.
* Exception(hata/istisna) yönetimi vardır.

 

Bu sayfa 1592 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr

PL/SQL 2: Temel Blok Yapısı-Anonim Blok

Merhabalar.
Peyderpey PL/SQL’i öğrenmeye yönelik yazılar yazmaya çalışacağım. Vira bismillah deyip ilk adımı atıyorum.

PL/SQL’de aşağıdaki gibi temel bir blok yapısı vardır. Bu basit yapıya anonim blok da denir:

DECLARE
    --Değişkenler
BEGIN
    --İşlemler
EXCEPTION
    --İstisna yönetimi
END;

DECLARE kısmında değişkenler(cursor dahil) tanımlanır. Opsiyoneldir.
BEGIN kısmında yapılacak işlemler bulunur.
EXCEPTION kısmı hata yönetimi içindir ve opsiyoneldir.

En temel şekliyle şöyle kullanabiliriz:

BEGIN
dbms_output.put_line('Merhaba Dünya');
END;

Sonuç:
plsqlders1

NOT: (SQL Navigator’da)Eğer dbms_output kullandığınızda herhangi bir hata olmamasına rağmen ekrana yazdıramıyorsanız, aşağıdaki simge aktif değil demektir. Onu aktif ettiğinizde sorun düzelecektir.

dbms

Değişken Kullanımı

Değişkenler hakkında şuradan detaylı bilgi edinebilirsiniz.

Basit şekliyle aşağıdaki gibi kullanabiliriz:

DECLARE
    sayi1   NUMBER := 2;
    sayi2   NUMBER := 5;
    toplam  NUMBER := 0;
    carpim  NUMBER := 0;
    toplam_str VARCHAR(20) := 'Toplam: ';
    carpim_str VARCHAR(20) := ' Çarpım: ';
BEGIN
    toplam := sayi1 + sayi2;
    carpim := sayi1 * sayi2;
    DBMS_OUTPUT.put_line (toplam_str || toplam || carpim_str || carpim);
END;

Sonuç:

plsqlders1_2

Kendinize çook iyi davranın.

 

Bu sayfa 2322 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr