Ada Programlama Dili Temelleri

Bölüm 3

Standard Pakette Tanımlanan Öntanımlı Veri Tipleri

Bölüm 3 Sayfa 2

3.1.2 - Boolean Veri Tipi İçin Tanımlı İşlemciler

Ada programlama dilinde, veri tiplerine uygulanabilecek tüm işlemcilerin, tip tanımı ile birlikte belirtilmesi gerekmektedir. Temel (progenitor) veri tipleri Standard pakette belirtilmiştir. Kullanıcı tipi alt veri tiplerinde, temel veri tiplerinin işlemcileri, kalıtımsal yolla alt veri tiplerine de geçer. Aslında, sayılabilir bir veri tipi olmasına rağmen Standart pakette tanımlanmış olduğu için, temel bir bir veri sayılan Boolean veri tipi için tanımlanmış geçerli işlemciler aşağıda yeniden verilmiştir. Bu bölümde Boolean veri tipine uygulanabilecek işlemcilerin uygulama yöntemleri incelenecektir.

   type Boolean is (False, True);
   -- The predefined relational  operators for this type are as follows:
   -- function "="   (Left, Right : Boolean'Base) return Boolean;
   -- function "/="  (Left, Right :  Boolean'Base) return Boolean;
   -- function "<"    (Left, Right : Boolean'Base) return Boolean;
   -- function "<="  (Left,  Right : Boolean'Base) return Boolean;
   -- function ">"    (Left, Right : Boolean'Base) return Boolean;
   -- function ">="   (Left, Right : Boolean'Base) return Boolean;
   -- The predefined logical  operators and the predefined logical
   -- negation operator are as  follows:
   -- function "and"  (Left, Right : Boolean'Base) return Boolean'Base;
   -- function "or"   (Left, Right : Boolean'Base) return Boolean'Base;
   -- function "xor"  (Left, Right : Boolean'Base) return Boolean'Base;
   -- function "not " (Right : Boolean'Base) return Boolean'Base;

İlk olarak ilişkisel işlemcileri inceleyelim. İlişkisel işlemciler, verilerin birbirleri ile karşılaştırılması amacı ile uygulanan işlemcilerdir. Tanımlardan görüldüğü gibi, Boolean veri tipi için tanımlı olan tüm ilişkisel işlemciler, iki işlenenli işlemcilerdir. İki işlenenli işlemciler,

Sağ_İşlenen İşlemci Sol_İşlenen
		

şeklinde uygulanırlar. İlk olarak = (eşitlik) işlemcisinin çalışmasını inceleyelim. Tanımdan görüldüğü gibi, sağ ve sol işlenenler Boolean'Base tipinde olmalıdır. Unutmayalım, Boolean veri tipi için tanımlı olan işlemciler, sadece Boolean veri tiplerinin birbirleri ile ilişkilerinin sorgulanması amacı ile kullanılabilirler. Yani Boolean veri tipinin işlemcilerinin uygulamalarında, işlemcilerin tüm işlenenleri Boolean'Base tipinde olmalıdır. Boolean'Base tipi ise False ve True elemanlarından oluşmaktadır. İlişkisel işlemciler mantıksal önermeler oluştururlar. Mantıksal önermelerin sonucu mantıksal yani olumlu veya olumsuz Mantıksal bir önermernin sonucu olumlu ise dğeri Boolean true, yanlışşa değeri Boolean False olacaktır. Bunun ışığı altında, eşitlik önermesinin sonucu mantıksal bir değer olmalıdır. Yani, iki büyüklük birbirine eşitse, olay gerçek (True), eşit değilse olay yanlış (False) olacaktır. Aşağıdaki uygulamayı izleyelim:

with Ada.Text_IO;

procedure b3_1_2_uyg_1 is

begin

   Ada.Text_IO.Set_Col(To => 40);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 70);
   Ada.Text_IO.Put_Line("= İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True = False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True = False));
    end b3_1_2_uyg_1;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri = İşlemcisi True = False Önermesinin Sonucu : FALSE olmaktadır ve önerme doğrulanmamaktadır.

Yukarıdaki prosedürün sonucu, beklendiği gibi olmaktadır. Prosedürdeki önerme, yanlış = doğru şeklindedir ve doğal olarak sonucu yanlıştır. Çünkü yanlış doğruya eşit değildir.

Eşitlik önermesinin tam karşıtı, eşit değildir önermesidir. Ada programlama dilinde bu önerme /= işlemcisi kullanılarak uygulanır. Eğer işlenenler birbirlerine eşit değilse, önerme doğrulanır, aksi halde önerme sonucu yanlış olarak gerçekleşir. Aşağıdaki programda eşitsizilk önermesi uygulanmıştır.

with Ada.Text_IO;

procedure b3_1_2_uyg_2 is

begin

   Ada.Text_IO.Set_Col(To => 40);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 70);
   Ada.Text_IO.Put_Line("/= İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True /= False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True /= False));
    end b3_1_2_uyg_2;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri / = İşlemcisi True /= False Önermesinin Sonucu : TRUE olmaktadır ve önerme doğrulanmaktadır.

Yukarıdaki prosedürün sonucu da beklendiği gibi olmaktadır. Prosedürdeki önerme, yanlış /= doğru (yanlış eşit değildir doğru) şeklindedir ve doğal olarak sonucu doğru olarak gerçekleşmektedir. Çünkü yanlış doğruya eşit değildir.

Nesnelerin büyüklük karşılaştırmasında, nesnelerin veri tipleri önem taşır. Değişik veri tipleri için farklı kriteryumlar kullanılır. Sayılabilir veri tiplerinin nesneleri için, büyüklük, tanım sırasına bağlıdır. Tanım sırası sonra olan daha büyük olarak kabul edilir. Boolean veri tipi de sayılabilir bir veri tipi olduğundan, elemanlarının büyüklüğü tanım sırasına göre kararlaştırılır. İlk önce tanımlanan False elamanı en küçük, en son tanımlanan True elamanı ise en büyük olarak kabul edilir. Bunun tamamen bir kabul olduğu ve gerçek yaşamla ilgisi olmadığını tekrar edelim. Yine de doğru bir hareketin, yanlış bir harektten daha değerli olduğu tartışılmaz. Aslında, gerçek yaşamda doğru yanıt önemlidir. Bu yanıt doğru veya yanlış olabilir, önemli olan doğru yanıt olmasıdır.

Aşağıdaki programda, Boolean veri tipinde iki nesnenin (zaten sadece iki tane eleman bulunmaktadır) birbiri ile karşılıklı (mutual) büyüklüklerinin karşılaştırılması yapılmaktadır. Önerme, False > True şeklindedir ve doğal olarak doğrulanmayacaktır. Çünkü, True Elemanı, False elemanından daha sonra tanımlanmıştır ve bu nedenle False elemanından daha büyük olarak kabul edilir.

with Ada.Text_IO;

procedure b3_1_2_uyg_3 is

begin

   Ada.Text_IO.Set_Col(To => 40);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 70);
   Ada.Text_IO.Put_Line("> İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("False > True Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(False > True));
    end b3_1_2_uyg_3;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri > İşlemcisi False > True Önermesinin Sonucu : False olmaktadır ve önerme doğrulanmamaktadır.

Büyüktür veya eşittir işlemcisi >= iki işlenenli, gerçekleşebilecek iki olasılılklı bir işlemcidir. Olasılıkların herhangibirisinin gerçekleşmesi durumunda önerme sonucu gerçek olur. İlk olasılık her iki işlenenin birbirine eşit olmasıdır. Bu durumda önerme sonucu gerçek olur. Eğer her iki işlenen birbirlerine eşit değillerse, sağ işlenenin sol işlenene göre büyük olup olmadığı kontrol edilir. Eğer bu olasılık gerçekleşirse, önerme sonucu yine gerçek olur. Önermenin gerçekleşemeyeceği tek durum, sol işlenenin sağ işlenenden daha büyük olmasıdır. Aşağıdaki programda bu işlemcinin uygulanması yapılmıştır.

with Ada.Text_IO;

procedure b3_1_2_uyg_4 is

begin

   Ada.Text_IO.Set_Col(To => 20);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 50);
   Ada.Text_IO.Put_Line(">= İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True >= False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True >= False));
    end b3_1_2_uyg_4;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri >= İşlemcisi True >= False Önermesinin Sonucu : TRUE olmaktadır ve önerme doğal olarak doğrulanmaktadır.

Küçüktür veya eşttit önermesinin yapılabildiği <= işlemcisi de iki işlenleri bir işlemcidir. Örnerme gerçekleşirse iki olasılık gerçekleşmiş olabilir. Birinci olasılık, işlenenler birbirleri ile eşittir. İkinci olasılık sol işlenene sağ işlenenden küçüktür. Eğer önerme gerçkleşmezse, sadece bir tek olasılık vardır ve o da, sağ işlenenin sol işlenenden kesinlikle büyük olmasıdır. Bu işlemcinin uygulanması, aşağıdaki programda yapılmıştır.

with Ada.Text_IO;

procedure b3_1_2_uyg_5 is

begin

   Ada.Text_IO.Set_Col(To => 20);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 50);
   Ada.Text_IO.Put_Line("<= İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True <= False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True <= False));
    end b3_1_2_uyg_5;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri <= İşlemcisi True <= False Önermesinin Sonucu : FALSE olmaktadır ve önerme doğrulanmamaktadır.

Bundan sonra, mantıksal işlemciler incelenecektir. Mantıksal işlemciler, mantıksal sonuçların daha ileri düzeyde sorgulanması için gerekli araçalrı sağlamaktadır. İlk olarak and işlemcisini inceleyeceğiz. Bu işlemci,

(Sol İşlenen) and (Sağ İşlenen)

şeklinde uygulanır. Burada sağ veya sol işlenenler, sonucu Boolean olan tek değer veya ifadeler olabilir. İlişkisel işlemcilerle çalışırken olduğu gibi, ifadeler çok içiçe mantıksal ifadelerden oluşursa, sonucun insanlar tarafından sağlıklı bir şekilde öngörülebilmesi olasığı ortadan kalkar ve program sadece derleyicinin inisyatifine bağlı kalır. En doğrusu basit, sonucu öngörülebilir ifadeler kullanmaktır. Büyük ve karmaşık sorgulama ifadeleri, küçük parçalara bölünerek sonuçları incelenebilir.

Mantıksal and işlemcisinin her iki işleneninin de sonucu True olduğunda önerme doğrulanabilir. Aşağıda görülen prosedürde, bu işlemci uygulanmaktadır.

with Ada.Text_IO;

procedure b3_1_2_uyg_6 is

begin

   Ada.Text_IO.Set_Col(To => 20);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 50);
   Ada.Text_IO.Put_Line("Mantıksal and İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True and False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True and False));
    end b3_1_2_uyg_6;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri Mantıksal and İşlemcisi True and False Önermesinin Sonucu : FALSE olmaktadır ve önerme doğrulanmamaktadır.

Yukarıdaki prosedürde, önerme sonucunun doğrulanmamasının nedeni, sadece bir tek işlenenin sonucunun True olmasından dolayıdır. Mantıksal and işlemcisi içeren önermelerde, önerme sonucunun doğrulanması için, işlenenenlerin sadece bir tanesi değil, her ikisinin de True olması gerekir. Oysa, mantıksal or işlemcisi kullanılan önermelerde, işlenenlerden sadece bir tanesinin sonucunun True olması yeterlidir. Aşağıda görülen prosedürde, mantıksal mantıksal or işlemcisi uygulanmaktadır.

with Ada.Text_IO;

procedure b3_1_2_uyg_7 is

begin

   Ada.Text_IO.Set_Col(To => 20);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 50);
   Ada.Text_IO.Put_Line("Mantıksal or İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True or False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True or False));
    end b3_1_2_uyg_7;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri Mantıksal or İşlemcisi True or False Önermesinin Sonucu : TRUE olmaktadır ve önerme doğrulanmaktadır.

Yukarıdaki prosedürden de görüldüğü gibi, mantıksal or işlemcisinin sonucunun gerçek olması için sadece bir tek işlenin sonucunun gerçek olması yeterlidir. Bu nedenle, derleyiciler, mantıksal or işlemcisinin öenermelerinde, eğer ilk işlenenin sonucu doğrulanırsa, ikincisini incelemezler, çünkü önerme doğrulanmıştır ve ikincisinin sonucu ne olursa olsun, önerme sonucu bundan etkilenmeyecektir.

Mantıksal xor işlemcisinin sonucu, sadece ve sadece bir tek işlenenin sonucu True olursa doğrulanabilir. Aşağıdaki tabloda, xor önermelerinin gerçekleşmesi için, işlenenlerin gereken değerlerini vermektedir.

İşlenen 1 İşlenen 2 Sonuç
True True False
True False True
False True True
False False False

Aşağıda görülen prosedürde, xor mantıksal işlemcisi uygulanmıştır.

with Ada.Text_IO;

procedure b3_1_2_uyg_8 is

begin

   Ada.Text_IO.Set_Col(To => 40);
   Ada.Text_IO.Put_Line(Item => "Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 70);
   Ada.Text_IO.Put_Line("Mantıksal xor İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("True xor False Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(True xor False));
    end b3_1_2_uyg_8;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri Mantıksal xor İşlemcisi True xor False Önermesinin Sonucu : TRUE olmaktadır ve önerme doğrulanmaktadır.

Yukarıdaki prosedürün sonucunun geçerliliği, xor gerçekleşme tablosuna bakılarak kontrol edilebilir.

En son incelenecek mantıksal işlemci, not mantıksal işlemcisidir. Bu tek işlenenli bir işlemcidir ve önüne geldiği işlenenin sonucu doğruysa yanlışa, yanlışsa doğruya dönüştürür. Aşağıda görülen prosedürde, mantıksal not işlemcisi uygulanmaktadır.

with Ada.Text_IO;

procedure b3_1_2_uyg_9 is

begin

   Ada.Text_IO.Set_Col(To => 40);
   Ada.Text_IO.Put_Line(Item => "BÖlüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 70);
   Ada.Text_IO.Put_Line("Mantıksal not İşlemcisi");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Set_Col(To => 10);
   Ada.Text_IO.Put("not(True xor False) Önermesinin Sonucu : ");
   Ada.Text_IO.Put_Line(Boolean'Image(not(True xor False)));
    end b3_1_2_uyg_9;
Bu programın sonucu, Bölüm 3.1.2 - Boolean Veri Tipindeki Nesnelerin İşlemleri Mantıksal not İşlemcisi not (True xor False) Önermesinin Sonucu : FALSE olmaktadır ve önerme doğrulanmamaktadır.

Boolean veri tiinin işlemcilerinin de incelenmesi burada tanmamlanmış olmaktadır. Bu şekilde, öntanımlı Boolean tipinin incelemeleri tamamlanmış olmaktadır. Bu veri tipini artık uygulamalarımızda kullanabiliriz.

Valid XHTML 1.1