operators etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
operators etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

27 Ağustos 2012 Pazartesi

Operatörler - 2

Merhaba, bu yazıda operatörlere devam edelim ve sonrakinde eğlenceli işlere bir giriş yapalım artık.

Mantıksal Operatörler

Burada anlatacağım operatörler, ilişkisel operatörler gibi, karşılaştırma işini yapacak ve ardından bize bir boolean değeri verecek (true veya false). Biz de, programımızın akışını buna göre değiştirmeye veya devam ettirmeye karar vereceğiz. Bize boolean değeri döndürecek olmalarının anlamı nedir? Bu sorunun cevabı için mantıksal operatörlerin bir listesini verip ardından boolean değeri döndürmelerinin bize ne kattığını görmek için bir kaç satır kod yazalım.

&    Mantıksal AND (VE) - İki koşul doğru ise true, biri bile yanlış ise false döndürür.
|      Mantıksal OR (VEYA) - İki koşul yanlış ise false, diğer türlü true döndürür.
^     Mantıksal XOR - İki ifade doğru veya ikisi de yanlış ise false, en az biri yanlış ise true döndürür.
!      Mantıksal NOT (DEĞİL) - boolean değerinin tersini verir.

Bunları bu şekilde ezberlemeye vs. gerek yok tabi ki. 2-3 satırlık kodla hepsini deneyebiliriz:


  boolean deger;
  deger = false|false;
  System.out.println(deger);


Yukarıdaki kodda deger = false|false; ifadesini istediğiniz şekilde değiştirip çıkan sonucu görebilirsiniz.

Bir de koşullu VE(&&) ve koşullu VEYA(||) vardır. Bunları kullanırsak, Java sonucu soldaki değerden belirleyebilirse, sağdakini incelemez. Bu ne demek oluyor?

& ve | operatörlerini düşünelim: A&B ve A|B ifadelerimiz olduğunu varsayalım. & operatörü eğer A false ise, sonucun false olacağını bilir. Ama buna rağmen diğerini de hesaplar. Aynı şekilde, | operatörü, eğer A true ise, false'u hesaplamasına gerek olmadan değeri true döndürebilir (çünkü en az birinin true olması sonucun true olması için yeterlidir). Buna rağmen ikinci ifadeyi de inceler. Bu durum, && veya || operatörlerinde yoktur.

Belki de şu anda bunun ne gibi yararlar veya hatalar getirebileceğini bilmiyoruz, ama şunu bir kenara not edelim: Programımız kodlar düzgün olduğu halde istediğimiz şekilde çalışmıyorsa, daha derin çözümler aramadan ve çıkmaza gelip programdan bıkmadan önce, mantıksal ve ve mantıksal veya ifadelerimizi koşullu ve ve koşullu veya ile değiştirmeyi (aynı şekilde tam tersi durum da geçerli) düşünebiliriz.

&=, ^=, |= ifadeleri de atama yapıyor. Bunları denemek için ise, şu kodları yazıp sonucuna bakalım:


boolean d = false;
boolean m = true;
d &= m;   
System.out.println(d);


Yukarıda m ve d değerlerini ve alttaki işlemi değiştirerek değişik durumlar için sonuçları görebiliriz.

? Operatörü

Bütün operatörler iki operand alırken bu 3 tane alır. Daha sonra bahsedeceğim if döngüsünün kısa ve basit halidir. Kullanımı şu şekildedir;
Koşul?ifade1:ifade2;
Eğer koşul doğru ise ifade1, değil ise ifade2 çalıştırılır. Burada çok önemli bir ayrıntı vardır, ifade1 ve ifade2 void dışında bir tipe sahip bir değer döndürmelidir ve ikisi de aynı tip döndürmelidir. Örneğe bakalım;


 int a = 10, b = 12, c;
 c = a > b ? a+b:a-b;
 System.out.println(c); 


a, b'den küçük olduğu için ikinci ifade çalışır. a'nın değerini 20 yapıp tekrar denediğimizde ikinci ifade çağrılır.


Bit operatörleri hakkında şimdilik bir şey paylaşmamaya karar verdim. Çünkü uzun bir süre (yapacağımız programlara göre belki de hiç) kullanmamıza gerek yok. Zamanımızı daha temel ve önemli şeyler üzerinde değerlendirirsek, kullanmamız gerektiği zaman öğrenmemiz belki de yarım saatimizi bile almayacaktır.
Bit operatörleri, adlarından da anlaşıldığı gibi, bitler üzerinden işlem yapıyor. Yani, String değişkenimize uygulamaya çalışsak bile, String değil onun bitlerine göre işlem yapacak.

Devamını oku...

26 Ağustos 2012 Pazar

Operatörler - 1

Merhaba.
Bu yazıda biraz operatörlerden bahsedelim. Bunlar aritmetik, bit tabanlı, mantıksal ve ilişkisel operatörler olarak dörde ayrılır.
Aslında oldukça basit bir konudur ve vakit geçtikçe o kadar aşina olacağız ki, belki siz bu yazıyı okuduğunuz ben de yazdığım süreye acıyacağız.
İşin aslına bakarsak, bunları bir liste halinde verip, üzerinde konuşulmaya değer olanları konuşmak yeterli olacak gibi duruyor. O zaman aritmatik operatörlerden başlayalım;

Aritmetik Operatörler

+, -, / ve * operatörlerinin anlamları gayet açık. Bu sebeple bunlardan özellikle bahsetmeye gerek yok diye düşünüyorum.
% işareti, mod için kullanılır. Mod, bir sayının diğerine bölümünden elde edilen kalandır. Yani, 10%3 işleminin sonucunu bir değişkene atarsak, değişkenin değeri 1 olacaktır.
++ ve -- işaretleri ise, değişkenin değerine 1 ekleyen veya çıkartan operatörlerdir. Bunları, değişkenin önünde veya sonunda kullanmak arasında büyük bir fark vardır. Bu farkı anlamak için kısa bir kod yazıp çalıştıralım.


int sayi = 10;
int sayi2 = 5;
System.out.println("İlk sayı: "+ sayi +"Operatör değişkenin sonuna eklenince: "+ sayi++); System.out.println("Şimdi sadece kendisini yazalım: "+sayi);
System.out.println("İlk sayı: "+ sayi2 +"Operatör değişkenin sonuna eklenince: "+ ++sayi2);
System.out.println("Şimdi sadece kendisini yazalım: "+sayi2);

Gördüğünüz gibi, ++ operatörünü değişkenden sonra koyarsak, önce değişkeni kullanıyor, sonra değerini arttırıyor. Böylece bir sonraki kullanımda değerine 1 eklenmiş halde oluyor. Eğer önce koyarsak, bu sefer önce değerini arttırıp sonra kullanıyor. Böylece ++sayi yazdıktan sonra orijinal değeri hiç kullanmamış oluyoruz.
Başka bir grup aritmetik operatörler ise, basit dört işlemin işareti ile eşittir işaretini bir arada kullanan operatörlerdir (+=, -=, /=, *= ve %=). Bunlar ise, sol taraftaki değer ile sağ taraftaki değeri işler, ardından sonucu sol taraftaki değere atar. Dediğimi anlamak için yukarıdaki koda şunları ekleyelim;


  System.out.println("+= operatörünü kullanarak sayi ile sayi2'yi toplayıp değeri sayi'ya atamaya çalışalım:");
  sayi += sayi2;
  System.out.println(sayi);

Burada bu kodların çıktılarını vermeme gerek yok, çünkü zaten siz de deniyorsunuz şu anda :) Yalnız sizden bir ricam var, %= operatörünü kendiniz deneyin. Benim açıklamamı düşününce oradan çıkan sonucun sizi şaşırtma ihtimali var çünkü.

İlişkisel Operatörler

Bunlar bizim karşılaştırma yapacağımız operatörler. Döngülerde vs. en çok bunları kullanacağız. Liste şeklinde yazalım;
==  Eşittir
!=   Eşit değil
<    Küçük
>    Büyük
<=  Küçük eşit
>=  Büyük eşit

== operatörüne dikkat çekmek istiyorum çünkü döngülerde bir kısmımız bunun yerine = operatörünü kullanacak ve neden hata verdiğini merak edeceğiz :)
== operatörü, iki değeri birbiriyle karşılaştırırken, = operatörü atama yapar. Yukarıdaki kodumuza şunu ekleyerek durumu görelim isterseniz;


  System.out.println("= kullanarak sayi = sayi2 yazalım ve iki sayının değerlerini görelim.");
  System.out.println("Şu anda sayi: " + sayi + " ve sayi2: " + sayi2);
  sayi = sayi2;
  System.out.println("İşlemden sonra ise durum şu;");
  System.out.println("sayi: " + sayi + " sayi2: " + sayi2);

Mantıksal operatörleri biraz uzun olduğu için yeni bir yazıda ele alalım.

Şu anda bu operatörlerle yapacak pek bir şeyimiz yok. Hatta, şimdiye kadar öğrendiklerimizle ilgili yapacak bir şey yok. Ama hepsi döngüleri ve koşul ifadelerini öğrendiğimiz zaman işimize yaramaya başlayacak. İşe yarar daha kaliteli programlar için ise, sınıflar, kalıtım ve polimorfizm konularını öğrenmemiz gerekecek.
Devamını oku...