Dersin diğer kalan kısmında artık sayılardan biraz sıkıldığımızdan dolayı yeni bir tür değişken göstermiştim: char. char'lar sadece tek bir karekteri tutmak için kullandığımız değişkenler. Bu karakter 'a', 'b', 'c' gibi küçük harfler, 'A', 'B', 'C' gibi büyük harfler, '?', '*', '$' gibi noktalama işaretleri ve diğer her sembol olabilir. Hatta '7', '8', '9' gibi rakamlar bile olabillir, sonuç olarak onlar da birer karekter.
Örneğin aşağıdaki programa bakalım:
char e = 'A'; char t = 'C'; char u = 'M'; System.out.print(e); System.out.print(t); System.out.print(u);
Bu program çıktı olarak ekrana ACM basacaktır. Burada dikkat ederseniz System.out.println(); yerine System.out.print(); kullandık. .println()'in sonundaki ln'in anlamı line. Yani her çıktıdan sonra bir aşağı satıra geçiyor. println(), yerine print() yapınca aşağı satıra geçmiyor, böylece yanyana basıyor.
Peki bu harfleri tek seferde yanyana bastırmak mümkün mü?
Örneğin söyle yaparsak:
System.out.println(e + t + u);
Çıktımız sizce ne olur ?
İlginç bir şekilde çıktımız, 209 oldu. Şimdi gelin bu sayının nereden geldiğine bir bakalım. Daha önceden de bahsettiğimiz gibi bilgisayarlarda aslında her şey 1 ve 0'lar yani fiziksel olarak voltajın olma ve olmama hali olarak tutuluyor. Shakespeare'inde dediği gibi "olmak ya da olmamak, işte bütün mesele bu". Aslında istenseydi, bilgisayarlarda her şey 0, 1 ve 2 kullanılarak da tutulabilirdi. O zamanda fiziksel olarak voltajın olmaması, biraz olması ve çok olmasıyla karşılanabilirdi (Hassasiyet sorunları olabilirdi ama sonuç olarak imkansız değil). Bilgisayarlar da sadece 0 ve 1'in kullanılmasının asıl nedeni, sadece 0 ve 1'in yeterli olması. Eğer bu konuya (information theory) ilgi duyuyorsanız, size şu playlisti önerebilirim. Özellikle şu videoyu izlersenin ne demek istediğimi daha iyi anlaybilirsiniz.
Şimdi gelelim karakterlerin nasıl tutulduğuna 1 ve 0'lar la 2'lik taban kullanarak doğal sayıları tutabildiğimizden dolayı, (negatif sayıların nasıl tutulduğunu merak eden varsa 2'nin tümleyenine bakabilir) her karekter bir sayıyla eşleştirilebilir. Peki hangi sayıya ? Zamanında ASCII adıyla hangi karakterin, hangi sayıya denk geleceği kararlaştırılmış. İşte tablo şu şekilde:
Eğer binary'de (ikilik tabanda) okumak gibi gereksiz ve geeky bir yeteneğe sahip olmak istiyorsanız., şu videoya ya bir göz atmanız yeterli.
Artık heralde 209 sayısının nerden geldiğini anlamışsınızdır: 65 + 67 + 77 = 209. Gördüğünüz gibi sayılardan kaçma çabamız başarısızlıkla sonuçlandı. Sadece charlar değil, bilgisayardaki her şey sayılarla tutulur: renkler, sesler, programlar aklınıza gelebilecek her ne varsa. Pisagor'un da 2500 yıl önce dediği gibi "herşey sayıdır".
char c = 65; System.out.println(c); int i = 'A'; System.out.println(i);
Gördüğünüz gibi istersek char yerine bir doğal sayı (negatif sayı girersek hata verir), int yerine de bir karakter girebiliriz. Ama yukarıdaki programı çalıştırdığımızda çıktı olarak ilk önce A, daha sonra 65 verecektir. Bunun ilkine sayı girsek bile tipinin, formatın hala char olması, ikincisi içinde aynı şey geçerli.
Ama istersek type casting denilen bir yöntemle bunu değiştirebiliriz.
char c = 65; System.out.println((int)c); int i = 'A'; System.out.println((char)i);
Bu bize c'yi char olarak bastır dediğimiz için 65 ve i'yi char olarak bastır dedğimiz için A çıktısını vercektir.
Peki diyelim ki elimizde de tek başına bir karakter değilde bütün bir kelimeye, cümleyi hatta bir paragrafı tutmak istiyoruz. Yani istediğimiz sayıda peş peşe char dizesini.
Bunun için String adında bir tip var ve şu şekilde işliyor.
String etu = "ACM"; System.out.println(etu);
Sınıflar ile int, boolean, char gibi temel değişken tiplerininin (primitive types) arasındaki fark, temel değişken tiplerinin direk bilgisayarın donanımına gömülmüş olmasıdır. Örneğin tam sayıların, ya da henüz bahsetmediğim double gibi virgüllü sayıların nasıl tutulacağı, nasıl toplanıp çıkarılacağı ya da ve, veya gibi mantıksal işlemler direk bilgisayarın donanımında mevcuttur. Ama sınıflar String sınıfında gördüğünüz gibi birileri tarafından programlanmıştır. Bu da demek oluyor ki aslında sadece temel değişken tiplerini kullanarak herşeyi yapmak mümkün ama tekerleği baştan icat etmeye gerek yok.
Gördüğünüz gibi String sınıfının içerisinde "The value is used for character storage" yazan kısımın altında String'deki karakterleri tutan bir yapı var. Bunlara array deniyor ve gelecek hafta bunlardan bahsedeceğiz, (bu kursta göreceğimiz en önemli kısımlardan biri).
Eğer String sınıfının içine baktıysanız, bir kelime tutabilmek için tam tamına 3014 satır kod mu yazmışlar diye düşünüp şaşırmış olabilirsiniz ama sınıflar temel değişkenlerin aksine sırf veri tutmaya yaramaz.
* Bu arada sınıflardan oluşturulan değişkene benzeyen bu şeylere nesne deniyor, Java'ya nesne tabanlı(object oriented) denmesinin sebebide bu.
Şimdi eclipse adındaki ide(integrated development environment) da bir String değişkeni oluşturduktan sonra, noktaya(.) basınca olanlara bakalım.
Gördüğünüz gibi karşımıza birden bir yığın seçeneğın olduğu bir liste çıktı, sağ tarafta ise bunların açıklamaları var. Örneğin attığım resimde length() isimli seçeneğin bana stringin uzunluğunu döneceği belirmiş. length(): int - String yazan kısımda ise açıklamada yazdığı gibi bir int döneceği ve bu şeyin String sınıfının içinde olduğu anlamına geliyor. Ve cidden de String sınıfının içine bakarsak length diye bir bölüm bulabilirsiniz.
Bu size bizim her kodun başında yazdığımız main methoduna çağrıştırabilir. Evet, aslında bu da bir method. Ama bunları ileriki haftalarda daha ayrıntılı görücez. Şimdi laf ebesini bırakıp şu length nasıl çalışıyomuş bir görelim.
int l = etu.length(); System.out.println(l); etu = etu.toLowerCase(); System.out.println(etu); char c = etu.charAt(1); System.out.println(c);
Yukarıda length ile beraber, başka birkaç methodunda nasıl kullanıldığını gösterdim. İsimlerinden de ne yapacağı anlaşılabiliyor genelde. Ama daha ayrıntılı bilgi için şu linke bakın. Bunlara javadoc deniyor ve javada hazır bulunan her sınıf için mevcut. Bu dökümanlar da o sınıftaki methodların neler olduğunu ve neler yaptıklarını okuyabilirsiniz. Bu dosyalar genelde birşeye ihtiyaç duyulduğunda referans olarak bakılır, bunları ezberlemenize falan kesinlikle gerek yok.
Dersin bu son kısımları(sınıflar ve mothodlar) yine gelecek haftalardaki dersler hakkında fikriniz olması içindi, bunlara tekrar geri dönecez.
Hiç yorum yok:
Yorum Gönder