Token Nedir ?
Bir programda boşluk (white space) ve yorumlar (comments) dışında kalan herşey TOKEN (simge) dır.
Simge yada sembol derleyicinin işlediği ve anlamlı olan en küçük program parçasıdır.
Java’nın simgeleri daima unicode dur. (Unicode(Evrensel Kod) = Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standardıdır.)
Java’da 5 farklı tipte Tokenlar vardır;
1- Identifier : (isim ya da belirteç)
i , j , counter , sinif , bulut , renginiBelirleme, enKucukOrtakBolen
Burada i , j , counter , sinif , bulut birer degisken isimleri, renginiBelirleme ve enKucukOrtakBolen ise metod isimlerine birer örnektir.
2- Keywords : (anahtar kelimeler)
new , class , int , double , if , voltality
3- Literals : (sabite , değer ifadeleri)
13 , 4.1452 , true , ‘c’ , “deger”
Değeri sabit olanlardir. degiskenlere atanırlar, fonksiyonlar yani methodlarımıza parametre olabilirler gibi gibi..
4- Sperators : (Ayraçlar)
( ) { } [ ] ; : , . … @ ::
Cümleleri , ifadeleri , dizileri vs vs ayırmakta kullanılır.
5- Operators : (İşlemciler)
= + – * / % == < > >>> ++ ||
Bir methodu biz nasıl oluştururuz ?
Methodumuza bır isim veririz , methodumuzun bir ayraçı olur , içerisinde farklı isimlerde degiskenler olabilir , nesnelerimiz olabilir (new keyword ile olusturursunuz) , koşullarınız olabilir . Değişkenlerimizi anahtar kelımelerımıze atayabiliriz. Butun program bu tokenlardan oluşur.
Neden yazım kurallarına uygun yazmalıyız ?
Compiller (Derleyici) bizim bu tokenlarımızı anlayıp programımızın çalışmasını sağlarlar ve belirli yazım kurallarına gore tasarlanmışlardır. Bizim kodumuzda bir yazım yanlışı yada hata oldugunda derleyicimiz bunu algılayamayacak ve programımızı çalıştıramayacaktır.
Lexical Grammar (Kelime ile ilgili kurallar ):
Bir java programının soz dizimi , yukarıda verdiğimiz 5 tür simge, bu simgeler arasındaki boşluklar ve uygun yerlerde bulunan yorumlardan ibarettir.
Syntatic Grammar (Söz dizimi (yazım) kuralları):
Birden fazla sözcükten anlamlı, devrik olmayan, kurallara uygun yazılmış bir cümle olarak tanımlayabiliriz.
Örnek verecek olursak; Ayraçlarımızı eksik yazarsak veya yazmazsak, koşul durumlarında her hangi bir kosul vermezsek gibi durumlar bunlara örnektir.
Derleyicimiz aşağıda şemasını verdiğim şekilde çalışmaktadır;
Burada derleyicimiz bizim yazdığımız tokenları tek tek ele alıyor; public , class , parantezler ne varsa artık ve bunların kontrolünü sağlıyor. “public” yerine “oublıc” yazdıysak bunu anlamaya çalısıyor ve anlayamadığında ise hata veriyor. Buraya kadar hersey doğruysa söz dizilimi hatalarına bakıyor. cümleyi doğru yazmışmıyız yazmamışmıyız. Semantic analyzer ise bizim yazdığımız cümlelerin anlamlı bir bütün oluşturmuş mu oluşturmamış mı buna bakıyor.
Eğer ki herşeyi doğru yazmışsak işleme aşamasına geçiyor. kodlarımızı derleyip class dosyalarını oluşturuyor ve sonrasında bu dosyaları çalıstırıyor.
Keywords (anahtar Kelimeler) :
Bu keywordleri biz identifier (değişken ismi) olarak kullanamayız. bunlar java tarafından Rezerve edilmiştir. bunların haricinde goto , const , kelimeleri ve null ,true , false javanın literal (sabite , değer) i olduğundan rezerve edilmiştir. Bunları hiçbir şekilde değişken ismi, method ismi olarak kullanamayız.
var – Ayrılmış Kelimesi
- var , Java 10 ile birlikte gelen yeni bir ayrılmış (rezerve edilmiş – reserved*) kelimedir.
- Yerel değişken oluşturmada kullanılır.
- var ile değişken oluşturulurken tip verilmesi gerekmez, Java tip bilgisini ortamdan (context) çıkarır (inference).
- Buna tip çıkarımı (type inference) denir. (ileriki yazılarımızda detaylı olarak ele alınacaktır.)
Comments(Yorumlar):Dökümantasyonlar;
Derleyicimizin (compiller) dikkate almadığı , kendimize veya başkalarının anlamasını, bilmesini istediğimiz kodların açıklama satırlarıdır.
// : (çift slash işareti) (end-of-line comment); bulunduğu yerden itibaren satırı yorum yapar.
**Küçük bilgi: ” CTRL + SHIFT + C ” tuşlarına aynı anda bastığımızda seçtiğimiz satıların hepsini yorum satırları arasına alır.
/* */ : (block/traditional comment); ters slash işareti yıldız ile başlayıp yıldız ters slash işareti ile biten satırlar yorum satırları olarak görülür. Derleyicimiz bunları kod olarak algılamaz ve çalıştırmaz. Vermiş olduğum örneklerde methodların tam olarak ne iş yaptığına odaklanmayın sadece isimlendirme ve comment kısımlarına odaklanın. ileriki yazılarımızda ayrıntılı olarak ele alacağız.
Yorum satıları yazarken de birkaç kuralımız vardır;
- Yorumlar sınıf içerisinde ya da dışında kullanılabilirler. Yukarıdaki resimde “public class” ile “public static void ” arasında veya ” methodlarımızın içerisinde kullanılabilirler.
- İfade içinde “//” olamaz , “/* */ içinde olabilir fakat okunurluğu oldukça bozar. Bu yüzden pek tercih etmeyiniz.
- Karakter ya da Strıng lıteral içinde kullanılırsa yorum olarak görülmezler)
- Yorumlar birbirlerini kesmemelidir.
“//” içinde “/* */” ya da “/* */” içinde “//” hiç bir işlevselliği yoktur, goz kanatır ve oknurluğu çok fazla zedelerler. Lütfen bunları kullanmaktan kaçınınız.
Not: ” /** ” ile başlayıp ” */ ” ile biten bir dökümasyon çeşidi daha vardır. JavaDoc documantation olarak geçer. Kafanıza takılmasın ileride detaylı olarak işlenecektir. Yanlışlıkla 2 yıldız koyarsanız şaşırmayınız diye not olarak eklemek istedim.
Örnek ve Tuhaf yorumlar; (nasıl yapmanız ve yapmamanız gereken örnekler):
Kod yazmak bir sanattır ve sizler de birer sanatçı olma yolunda ilk adımlarınızı atıyorsunuz. Kod yazarken ne kadar mükemmel ve sade yazarsanız sanatınızı okadar güzel icra etmiş olursunuz. Alışkanlık kazanmak zordur ama alıştığınız zaman herseyi akışına bırakacaksınız.
Bunun gibi basit herkesin anlayabıleceği kod satırlarına yorum yazmamalısınız.
Yazılan her dökümantasyon bir özürdür! Özür dileyerek kötü yazılmış kodu anlaşılır yapamazsınız. Özür dilemeyin temiz kod yazın. Anlaşılır kodun dökümantasyona ihtiyacı yoktur.
Yazmanız gereken kısımlar çok fazla komplex durumlar için olmalıdır;
her ne kadar bu method anlaşılır olsa da , ileride yazacağınız çok karmaşık methodlar dışarıdan bakan birisi için okuması ve anlaması zor gelebilir. Bu istemediğimiz bir durum. burada sizin yazdığınız method ismini metodu aciklayici isımde yazmaniz yeterli olacaktır coğu zaman. tıpkı yukarıdaki “topla” isimli methodun isminden methodun ne iş yaptığı anlaşılıyor. Anlaşılmayan methodlarınız için hemen üstünde bir yorum satırı açıp methodun ne iş yaptıgını açıklayabililirsiniz. Son resimdeki yaptığımız açıklama tamamen gereksiz durumda. Örnek olması açısından yazdım. En iyi kod yazım biçimi mümküm olduğunca az comment ve en açıklayıcı yazmak şeklinde olmalıdır. Methodun tam olarak ne iş yaptığını anlatmış oluyoruz. Mümkün olan en kısa şekilde max açıklayıcı isimler kullanmanız gerekmekte. Özellikle büyük projelerde çalışacaksanız bu tür isimlendirmelerde , commentlerde ekstra özenli olmanız gerekiyor. Çünkü sizden beklenen budur ve başkalarının da bu kodu okuyacak ve bu methodu kullanacak olduğudur. Kodunuzun anlaşılır olmaması durumunda zaman kaybına ve aksaklıklara sebebiyet verecektir. Aşağıdaki Sarı arkaplanı olan kodu bu şekilde asla ve asla yazmayin.
Mavi arkaplanda ise ilk koddaki comment çok lüzumsuz, yaptığınız işlem ortada. Açıklama yapmaya gerek yok. 2. kodda ise kötü yazılmış bir kodun açıklama ile anlaşılır hale getirilmeye çalışılmış. 3. kodda ise mükemmel derecede anlaşılır commentsiz kod yazımı görülmektedir. Sizin de yazmanız gereken yöntem budur.
İsimlendirmeler:
Bir programdaki isimlere belirteç( identifier) denir.
Java programındaki belirteçler paket , sınıf, enum , arayüz, metot, blok ve değişken isimlendirmek için kullanılır.
Her dilde olduğu gibi javada da isimlendirme yaparken uyulması gereken kuralları vardır. ve çok önemlidir.
- Büyük küçük harf Ayrımı
Araba ve araba farklı isimlerdir.
Dilde nerede küçük harf nerede büyük harf kullanılması gerektiği genel olarak kodlama geleneği’nin bir parçasıdır.
Java kültüründe detaylı bir kodlama geleneği vardır; - Anahtar kelimeler isim olarak kullanılamazlar.
- İsimler sadece harf ile başlayabilirler.
- İsimler, ” ‘ . , ; : ! ? /\ – \| # & gibi, boşluk dahil, noktalama işaretlerini (punctuation marks) içermez ama “alt çizgi” “_” kullanılabilir.
“İsimler sadece harf ile başlayabilirler “ kuralının iki istisnası vardır;
İsimler, “$”, “£”, “€” gibi para birimi sembolleriye (currency symbols) ile de başlayabilirler.
“$” Java tarafından otomatik oalrak üretilen isimlerin başında kullanıldıgından, kaçınılmasında fayda vardır.
İsimler “alt çizgi” “_” (underscore) ile de başlayabilirler. Ancak javacılar alt çizgi kullanmaktan nefret ederler.
“BU İKİ KULLANIM DA YAYGIN DEĞİLDİR!“
- Java 9’dan itibaren sadece alt çizgi “_” artık bir anahtar kelime olduğundan tek başına isim olarak kulanamazlar.
- Daima anlamlı isimler kullanın; Okunduğunda ne işe yaradığı hakkında olabildiğince çok bilgi veren isim kullanmak önemlidir. İsim uzunluklarında bir sınır yoktur.
Kodlanmış, kısa isimler yerine daha uzun ve anlamlı isimler daha faydalıdır.
prc yerine price
iaca yerine ise interestAccuringCheckingAccount
gibi kullanımlara özen göstermeliyiz.
- İsimlerin İngilizce oalrka yazılması pek çok açıdan daha uygun olacaktır.
İsimlendirme örnekleri;
KOD GELENEĞİ: (code conventions)
Bıir dili kullanankar tarafından üzerinde hem fikir olunmuş ve kodun iekilsel olarak nasıl yazılacağını, büyük – küçük harfö boşlukö satır gibi görüntüsel/estetik durumlarını belırleyen kurallar bütünüdür.
İsimlendirme kod geleneğinin bir parçasıdır.
Java’da “Camel Case” yaklaşımı kullanılır.
“Camel Case” in 2 türü vardır.
1-) Upper Camel Case > İlk harfi büyük
LimitedLiabilityCompany
InterestAccruingCheckingAccount
2-) Lower Camel Case> ilk harfi küçük
limitedLiabilityCompany
interestAccuruingCheckingAccount
Literals (sabiteler):
Programlarda kullanılabilecek olan ve değişmeyen değer ifade eden kelimelerdir.
Java’da 4 farklı tipte sabite vardır:
1- Sayı(Number) >> 2000 -7 0.5 3.1415 1.6E-19
2- Karakter(Character)>> ‘a’ ‘*’ ‘ş’ >> tek tirnak icerisinde gosterilir.
3- Sıfır ya da daha fazla karakter dizisi, metin (string) >> “Java” “3.14587” ” ” >> cift tirnak icerisinde gosterilir.
4- Mantıksal sabiteler (logical literals)>> dogruluk degerini gosterirler ve dogru ve yanlisa karsilik gelecek sekilde sadece iki tanedir. true ve false.
5- null >> sadece referanslara atabilen null sabitesi vardir. hic bir degeri yok, hic bir nesneyi ifade etmez anlaminda kullanilir.
Bir sonraki yazımızda Java’nın kaynak kod yapısı ele alınacaktır. Amacımız kaynak kod yapısının temel ozellliklerini ksıaca anlatmak olacaktır. Böylece vereceğimiz kod örneklerine daha kolay alışacaksınız.
Yazar : Erkan Köse.