Logic (Mantık)
Anlamlı ve kullanılabilir her kod, bir tür mantıksal işlem içerir. Şifrenizle giriş yapmanız gereken bir sitenin şifrenizin doğru olup olmadığını algılayamadığını düşünün. Ya da kullanıcı adınızı girdikten sonra şifreniz doğru olmasa bile hesabınıza giriş yapabildiğinizi düşünün. Ne kadar da saçma olurdu, öyle değil mi?
Neden true-false?
Kesin bilgiler ile oluşturulan koşullar her zaman ya doğrudur ya da yanlıştır. 6, 5’ten kesinlikle büyüktür; “belki” daha büyük değildir. Nerede üretildiği bilinen bir ürün ya Edirne’de üretilmiştir ya da üretilmemiştir.
Aynı şekilde kodlama dillerinde bir ifade ya doğrudur ya da değildir. Javada da bir karşılaştırmanın veya boolean’ın değeri ya true ya da false olabilir.
Karşılaştırma (Comparison)
Kendi tanımladığımız ve değer atadığımız değerlerin nelerden büyük ve nelerden küçük olduğunu bilebiliriz. Ama bu koşulları kodu yazarken bilemeyeceğimiz durumlar vardır, örneğin kullanıcının bir değer girmesi gereken kodlarda ne yapacağız? Karşılaştırma operatörlerini kullanacağız.
Karşılaştırma operatörler, iki değeri karşılaştırmamızı sağlar. Karşılaştırma doğruysa operatörün sonucu da true olur, karşılaştırma yanlışsa operatörün sonucu da false olur.
== operatörü, iki değerin birbirine eşit olup olmadığını kontrol eder. Sonucu, eşitlerse true değillerse false olur. İki eşittir kullanılması önemlidir çünkü tek eşittir değer atamada kullanılır; çift eşittir ise karşılaştırmada kullanılır.
Aşağıdaki kod == operatörünü nasıl kullanabileceğimize dair birkaç örnek içeriyor. Sonuçlarının ne olacağını tahmin edebilir misin?
true
false
true
true
false
true
true
true
true
false
!= operatörü, iki değerin eşit olup olmadığını kontrol eder ancak == operatörünün aksine birbirlerine eşit değillerse true olur. Eşitlerse false olur.
Aşağıdaki kod öncekiyle aynı sayılır, sadece == operatörü yerine != kullandık. Şimdi sonucu ne olacak?
false
true
false
false
true
false
false
false
false
true
Bir değer diğerinden büyük mü küçük mü diye kontrol etmek için kullandığımız semboller, matematikte kullandıklarımızla aynıdır. Sadece büyük-eşittir ve küçük-eşittir, iki karakter olarak (yani büyüktür-eşittir >= ve küçüktür-eşittir <= olarak) yazılır.
>= ve <= operatörlerinde karakterlerin sırası önemlidir. Bu sıralama okunuşlarıyla aynıdır (>= büyük-eşittir, <= küçük-eşittir).
Tüm bunların kullanıldığı bir örneğe bakalım:
false
true
false
true
true
true
false
true
Şimdi sıra sizde. Aşağıdaki kodda karşılaştırma operatörlerinin olması gereken yerlerde boşluklar var. Bu boşlukların hepsine hangi operatörü koyarsak hepsinin sonucu true olur?
>=
.equals()
Aşağıdaki örneğe bakalım.
Sonucu beklediğimiz gibi true false false oldu. Peki ya aşağıdaki kod bizden input istediğinde doğru bir şekilde “Hello World.” girersek ne olacak?
İkisinin de true çıkmasını bekliyorduk ancak false çıktılar. Peki neden?
Java’da String değişkenler diğer değişkenlerden farklı şekilde saklanır. Bu saklama biçiminden dolayı Scanner ile değer ataması yapılan String değişkenler, başka bir String değişkenle aynı içeriğe sahip olsalar bile == operatörü tarafından farklı olarak algılanır. .equals() bu sorunu çözmemize yarar. Diğer tür değişkenler için ve iki tane Scanner olmadan oluşturulan String değişkeni karşılaştırırken .equals() kullanmamıza gerek yoktur.
Aşağıdaki kod .equals() kullanarak bu sorunu nasıl çözebileceğimizi gösterir.
Şimdi sıra sizde. Aşağıdaki örnekte println ifadesinin içi boş bırakılmış. İlk boş bırakılan println ifadesi, input a String’ine eşit olduğu zaman; ikincisi ise input “No.” ifadesine eşit olduğu zaman true yazdıracak şekilde .equals() ifadeleriyle içini dolduralım.
input.equals(a)
input.equals("No.")
Mantıksal Operatörler (Logical Operators)
Başka koşulların değerlerine bağlı olan ifadelerin değerlerini nasıl belirleyeceğiz? Veya birden fazla ifadenin doğru olup olmadığını nasıl kontrol edeceğiz? Mantıksal operatörler ile kontrol edeceğiz.
Mantıksal operatörler, koşulların değerlerine göre başka değerler türetmemize yararlar. Onlar sayesinde birden fazla koşulun değerinden farklı şekillerde tek bir koşul değeri elde edebiliriz.
! (NOT) operatörü, önüne konulduğu ifadenin değerinin tersini alır. Yani true olan bir ifadenin önüne konulursa, ! ifadesinin sonucu false; false olan bir ifadenin önüne konulursa, ! ifadesinin sonucu true olur.
Şimdi aşağıdaki örneğe bakalım. Sizce bu kod nasıl bir çıktı verir?
false
true
false
true
&& (AND) operatörü, iki veya daha fazla ifadenin arasına konulur. Eğer bu ifadelerin hepsi true ise, && ifadesinin sonucu da true olur. Eğer sadece biri bile false ise && ifadesi de false olur.
Şimdi aşağıdaki örneğe bakalım. Bu örnek, ! operatörünü && ile nasıl birlikte kullanabileceğimizi de gösteriyor. Sizce bu kod nasıl bir çıktı verir?
false
true
true
true
false
true
|| (OR) operatörü, iki veya daha fazla ifadenin arasına konulur. Eğer bu ifadelerin en az biri true ise, || ifadesinin sonucu da true olur. Eğer hiçbiri true değilse, || ifadesinin sonucu false olur. İkiden fazla ifadenin arasında olduğu zaman hepsini değerlendirir, parantezlerle bu ifadeler ayrılabilir.
Şimdi aşağıdaki örneğe bakalım. Bu kod; &&, ||, ve ! operatörlerini nasıl birleştirebileceğimize dair birkaç örnek içeriyor. Sizce aşağıdaki kod nasıl bir çıktı verir?
true
false
false
true
true
true
false
^ (XOR - Exclusive OR) operatörü, iki veya daha fazla ifadenin arasına konulur. Eğer bu ifadelerin hepsi false ise ^ ifadesinin sonucu da false olur. En az biri true olduğu zaman ^ ifadesinin de sonucu true olur. Ama hepsi true ise ^ ifadesinin değeri false olur. İkiden fazla ifadenin arasında olduğu zaman hepsini değerlendirir, parantezlerle bu ifadeler ayrılabilir.
Şimdi aşağıdaki örneğe bakalım. Sizce bu kod nasıl bir çıktı verir?
true
false
false
false
true
false
true
Şimdi sıra sizde. Aşağıdaki kodda e boolean’ına değer verilmemiş. Değeri ne olursa ekrana true yazdırılır?
false
Bu bölümde yazdığmız tüm kodlara bu linkten ulaşabilirsiniz.