Sayfalar

15 Ekim 2015 Perşembe

ETU ACM Java Kursu: 1. Hafta (Hello World and Variables)

Eğer ki dersi kaçırdıysanız ya da tekrar etme ihtiyacı duyarsınız diye her dersten sonra o gün işlediklerimizin kısaca bir özetini burada size aktarmaya çalışacağım. Bu yazılar olabildikçe hızlı bir şekilde size ulaştırmayı amaçladığımdan, kullandığım dilde bazı hatalarda bulunabilirim. Bundan dolayı hepinizden özür diliyorum.



Ön Giriş: 


Bu hafta derse, aslında hepimizin çok iyi bildiğimizi düşündüğümüz bir soruyla başladık.

"Bilgisayar programı nedir?"

Bunu cevaplamanın en kolay yolu heralde bir programı açıp, içinde ne olduğuna bakmaktır. Derste "vig" adında benim yazdığım küçük bir jar (java ile yazılmış bir program) dosyasını açmaya karar verdik. Bu programı açtığımız da karşımaza 3000 satır uzunluğunda bir sayı çıktı.


(!) buradaki sayılar 16'lık tabanda (hexideciamal) yazıldığından dolayı a, b, c, d, e, f harfları sırasıyla 10, 11, 12 ,13 ,14 15 sayılarında denk gelmektedir.


Daha sonra bilgisayarın donanımından biraz bahsettik ve bunun aslında çok şaşılacak bir durum olmadığını çünkü zaten bilgisayarın 1 ve 0'lardan oluşan sayı dizeleri, yani ikilik tabanda sayılar dışında, bir şeyi tutamadığını ve işlemcinin bu sayılara göre bünyesinde bulundurduğu işlemleri yaptığını öğrendik. Daha sonra herkesin, kursa gelme sebebini geri döndük.

 "O halde, biz nasıl program yazabiliriz?" 

 Bundan sonra biraz, machine language'den (yani sadece 1 ve 0) günümüzde kullandığımız Java, C ve benzeri high level languagelerin nasıl geliştiridiğini bahsettik. Ve bizim kod dediğimiz şeyin aslında herhangi bir metin belgesinden bir farkı olmadığının ve compiler (derleyici) denen bir programın bu kodu machine language'e çevirip bilgisayarın çalıştırılabildiği bir hale getirdiğini öğrendik. Kısaca kod dediğimiz şeyin sadece insanların daha rahat program yazabilmek için oluşturdukları bir sistem, aslında bir dil olduğunu ve bilgisayar için compile edilene (derlene) kadar birşey ifade etmediğini konuştuk.

 (!) Eğer bu noktada kafanız karıştıysa önemli değil, bu kısmı programların ve ve progralama dillerinin nasıl çalıştığı hakkında en azından sezgisel bir anlayışınız olması için anlattım.

Merhaba Dünya!: 


Java'da genel olarak diğer programalama dilleri gibi çalışır, bizim daha rahat şekilde program yazmamızı şağlar. Bir java kaynak koduna baktığımız da daha önce hiç program yazmamışsak ne kadar yabancı gelecek olsa da, binlerce satır rakamdan oluşan bir machine language'den daha anlaşılır olduğu kesindir. Örneğin,

public class MerhabaDunya {

 public static void main(String[] args) {
  
  System.out.println("Merhaba dünya!");
 
 }
 
}
yukarıdaki java koduna baktığımızda baktığımızda daha hiçbir şey bilmiyor olsak bile

System.out.println("Merhaba dünya!");

yazan kısımda sistemden(System) dışarı(out) bir şeyler basıldığını(print) tahmin edebiliriz. Ve bu programda aynen onu yapıyor, eğer derleyip çalıştırırsak ekranda Merhaba dünya! yazacaktır.

Yukarıdaki kodu daha da inceler olursak, kodun adının


public class MerhabaDunya 

kısmında geçtiğini ve satırdan sonra bütün kodun küme parentezleri arasında olduğu görülmektedir. Java da her program bunun gibi class adı verilen birimlerde çalışır ve bütün kodun küme parentezleri arasında yer alması gerekir.

 (!) Class'ları çok daha ayrınıtlı olarak ileriki derslerde işleyeceğiz.

classın bir altında ise

public static void main(String[] args)

şeklinde bir yapı dikkat çekmektedir. Bu tarz yapılara method denir ve bunları da çok daha ayrıntılı olarak ileriki derslerde işleyeceğiz, şuan amacımız java hakkında genel olarak bir fikir sahibi olmak. bu methodun adı da tıpkı classlarda olduğu gibi bir yığın ne olduğu belirsiz tuhaf tuhaf şeyden sonra yazılmıştır. Ve adı maindir adı üstünde main(ana) method tüm programın çalışmaya başladığı yerdir ve tıpkı classlar gibi küme parentezleri arasına sınırlandırılmıştır.

main methodun içerisine baktığımız zaman ise en sonunda programızda asıl işi yapan yeri görüyoruz.

System.out.println("Merhaba Dünya");

Bu bir komuttur ve ekrana bir şeyler basmaya yarar. Bu sefer dikkat çekmek istediğim nokta sonunda bir noktalı virgün(;) bulundurmasıdır. Bu birçok programlama dilinde olan bir standartır ve her komutun sonuna konur. Bu şekilde compiler(derleyici) bu kodu machine language'e çevirirken işi daha kolay olur. 

Burda dikkatinizi çekebilecek diğer bir nokta ise kod içerisinde bırakılan tablar ve boşluklar. Bunların teknik olarak hiçbir anlamı ve önemi yoktur ve insanların daha rahat okuyabilmesi için geliştirilen standartlardır sadece. İstersek bütün bir kodu tek satırda hiç tab ve yeni satır kullanmadan da yazabilir ama bu hem bizim için hem kod üzerinde beraber çalıştığımız arkadaşlarımız için büyük bir sıkıntı oluştururdu.

Değişkenler: 


Artık java hakkında genel bir fikrimiz olduğuna göre, onun büyülü dünyasına dalabiliriz. Java'da class ve method gibi yapılardan bahsettik ama bunlardan kursun ilerleyen derslerinde konuşacağız, şimdilik java da en temel yapılara değişkenlere odaklanalım.
Değişkenler onlarca yıllık uzman programcılar olsak da sık sık kullanacağımız ve java'daki daha gelişmiş yapıları anlayabilmek için bilgimiz olması gerek yapılar.
Eğer kendimize bir program yazarak neler yapabiliriz diye sorarsak, değişkenlerin ihtiyacına kısa bir sürede farkedebiliriz. Tabiki de en temel ihtiyaçlarımızdan bazıları bir veriyi saklamak, gerektiğinde tekrar kullanmak, yeni veriler hesaplayıp onları atamak ya da kullanıcıdan direk yeni veriler almaktır. Ve bunların hepsi değişkenlerle yapılır.

Değişkenler kısacası bu verileri tuttuğumuz yapılardır. Veriler farklı tipte olabilceklerinden dolayı (bir tam sayı, bir kelime, bir renk gibi) değişkenlerin de farklı tipleri olmak zorundadır. Bu derste sadece temel değişken tiplerinde bahsedeceğiz (primitive types).

Bu değişken tiplerinden en çok kullandığımız genellikle tam sayılardır: 2, 6, -1, 0, 1729 gibi.

Şimdi geldi sıra bu değişkenleri java'da nasıl tanımlayacağımıza

int x;

değimizde x isimli bir tam sayı değişekeni oluşturmuş oluruz. Burada int integer'ın kısaltılmış halidir. İfadenin sonunda (;) olduğuna dikkat edin, daha önceden de bahsettiğimi gibi java'da her komut (;) ile bitirilir.

Şuanda x adında bir değişkenimiz var ama hiçbir değer göstermiyor. Burada değerden kastettiğim 2, 6, 1729 gibi tam sayılar. Bunu tıpkı boş bir sandık gibi düşünebiliriz. Sandığımız var ama içinde hiçbir şey yok.

x = 3;

yazdığımızda ise sandığın içerisine 3 koymuş oluruz. Adı üstünde değişkenlerin içerilerindeki değeri istediğimiz gibi değiştirebiliriz. Örneğin,

x = 7;

yazdığımızda x'in içerisindeki 3 değeri silinip, yerine 7 yazılır. Bir değer değiştirildikten sonra ona geri ulaşmak mümkün olmaz çünkü üzerine yazılır.

Atama işlemi (=)

Değişkenelere değer atarken kullandığımız, = sembolü size matematikten tanıdık gelebilir ama bu yanıltıcıdır. Klavye üzerindeki sembol sayısı sınırlı olduğundan programlama dillerinde bazen böyle yanlış anlaşılmalara neden olunabilir.

= işlemi, ikili bir işlemdir ve bu derste bir toplama, çıkarma, çarpma gibi bir çok diğer ikili işlemi göreceğiz. Belki toplama, çıkarma dediğim zaman içiniz rahatlamıştır çünkü bunlar gayet tanıdık olduğumuz işlemlerdir. Aslında atama işleminin de bu işlemlerden çok farklı değildir. Atama işlemi kısaca:

 = sağındaki değeri, solundaki değişkene atar.

 daha önceki örneklerde bunun iki örneğini görmüştük ama bu sefer daha  farklı bir örnek yapalım.

  int x, y;

  x = 6;
  y = 28;
  x = y;

 Burada öncellikle belirtmem gereken nokta int x, y, z ...;
 şeklinde istediğimiz kadar değişken oluşturabiliriz. Ancak bu kısımdaki
 asıl ilginç kısım şurasıdır.

   x = y

 Burada, yukarıda bahsettği gibi x değişkenine, y değeri atılır.

 Bu noktada "ama y bir değer değil ki, o bir değişken" diye düşünüyorsanız
 doğru soruyu soruyorsunuz demektir.

 Java bu durumda sağdaki değişkenin içindeki değeri bakar ve onu x değişkenine  atar. Buradaki önemli nokta y'nin sadece değerine bakıldığıdır. Yine sandıklar  benzetmesi ile düşünecek olursak, y sandığın içine bakılır içinde ne varsa  aynısı x'e konur. Böylece x'in içindeki sayı değişmiş olur ama y'deki aynı kalır.

Diğer ikili işlemler:

Java'daki bazı diğer işlemleri sayacak olursak.

Hepimizin tanıdık olduğu aritmatik işlemleri:

+ ---> toplama
- ---> çıkarma
* ---> çarpma
/ ---> bölme
% ---> mod (kalan)

Örnek verecek olursak:

x = 3 + 7;
y = x + 9;

şeklinde işlemler yapabliriz, burada x'in değeri 10, y'ninki ise 19 olur.

Eşitsizlik işlemleri:

== ---> eşittir
!=     ---> eşit değildir
> ---> büyüktür
< ---> küçüktür
>= ---> büyük eşittir
<= ---> küçük eşittir

Herhalde bu noktada herkesini kafası bir miktar karışmıştır. Yukarıda
belirtilen işlemler ya doğru yada yanlış sonuç verirler. Örneğin:

10 > 8  doğrudur, ancak 7 == 3 yanlıştır.

peki doğru ya da yanlış olma durumunu nerede tutacağız.

İşte bu noktada yeni bir temel değişken tipine ihtiyaç duymaktayız.

boolean değişkenler:

boolean değişkenler değeri yalnızca doğru yada yanlış olabilen bir değişken tipidir.

boolean p, q;

p = true;
q = false;

sadece doğru ya da yanlış (true, false) olabilen bir değişken ne işimize yaracak diye sorarsanız, yukarıda geçen eşitsizlik ve ileride bahseceğimiz mantıksal işlemlerin sonuçları bu tür değerler verir.

Örneğin:
p = 18 > 9;
q = 7 == 3;

p değerine true, q değerini ise false atar.

Vakti gemişken mantıksal işlemleri de sayalım. Bu hafta vakit kalmadı, gelecek hafta bunlara da değinmeyi planlıyorum.

Mantıksal işlemeler:

! ---> değil
&& ---> ve
|| ---> veya

Bu işlemlere daha önceden lisede, matematik dersinde rastlamış olabilirsiniz.
Bunlarda tıpkı eşitsizlik işlemler gibi boolean sonuçlar verir ancak işlemler
sayılar üzerinde değil boolean değerler üzerinde yapılır.

(!) Burda değil işlemin aslında ikili bir işlem olmadığını belirtmeyi
   unutmayalım. Sadece tek bir değer üzerinde işlem yapar ve onun tersini
   alır.

Örneğin:
p = true && false;
q = !false;

p değerini false, q değerine ise true değeri atılır.

Şuanda öğrendiğimiz bir yığın işlem, gereksizmiş gibi gözükebilir. q = !false yerine direk q = true yazmak daha makuldur. Ancak buradaki asıl amaç sadece tanımların hava da kalmaması için birkaç küçük örnek vermektir. Bu tür işlemler daha dinamik olarak değişen değerler üzerinde yapılır ve programın karar alma sürecinde önemli rol oynar. Her programın belirli noktalarda bir karar alıp, ona göre davranması gerekir. Programcının elinde, programın bir karar almasını sağlamak için en yararlı aletler bu işlemlerdir ve kursun ileriki safalarında biz de bu işlemleri kullanarak, elindeki verilere göre karar alıp, ne yapacağını belirleyen programlar yazacağız.

* Aslında dersin sonunda biraz da if - else statementlarına giriş yaptık ama gelecek ders tekrar üzerinden geçip daha ayrıntılı işlemeyi planladığım için bu haftanın notlarında bahsetmedim.

Hiç yorum yok: