12 Ocak 2015 Pazartesi

Raspberry Pi Model B+ ile tanıştık



Sipariş ettiğim Raspberry Pi Model B+ (Bundan sonra Raspberry olarak anılacaktır.) Bu gün elime ulaştı. Kargo paketinden 1 adet Raspberry PI , Orjinal Raspberry Şeffaf kutu, Orjinal Raspberry Power Supply (Adaptör), Ön yüklemesi yapılmış Sandisk 8gb micro sdhc, HDMI kablo şeklinde çıkan ürünün kurulumu bu akşam yaptım.

Size zaten internette bulabileceğiniz 100 lerce yazı gibi şöyle kurulur, böyle montelenir diye anlatım yapmayacağım. Bunun yerine Raspberry ile olan maceramı sizinle paylaşacağım. (Daha dakika 1 gol 1 kurulum yaparken internette hiçbir kaynakta bulamadığım bir sorun ile karşılaştım bile. Bu yazının sonunda sorunun ne olduğunu anlatıyorum.)

Denediğim yol ve yöntemleri, ürettiğim çözümleri, geliştirdiğim projeleri elimden geldiğince paylaşmaya çalışacağım. Tabiki bu konuda yazacaklarım tamamen bu yazılara gösterilecek ilgiye göre değişecek.

Zaten bildiğiniz gibi yeterli ilgiyi görmediği takdirde yazıları yazmak yerine uygulamak kısmı ile ilgileniyorum. Lütfen alınganlık yapmayın, onun yerine yorum yapın mesela...

Neyse lafı fazla uzattık, buyrun buradan başladım ;


Öncelikle Raspberry yi kutusuna yerleştirerek başladım.




Daha sonra Raspberry Original Power Supply ile birlikte gelen uçlardan ülkemiz pirizlerine uygun olanı monte ederek güç bağlantısını hazırladım.



Kişisel bilgisayarım ile kullandığım kablosuz Microsoft Fare ve A4Tech KL-5UP model usb klavyemi bağladıktan sonra yine kutudan çıkan HDMI kablo ile 84 ekran ARÇELİK LCD TV bağlantısını yaptım.

En son olarak ön yüklemesi yapılmış Sandisk Micro SDHC kartı takarak sisteme güç verdim. Ön kurulum modunda olduğundan neredeyse hiçbirşey yapmama gerek kalmadan açılarak kurulumunu gerçekleştirdi.



Bir kez reboot yaptıktan sonra KDE olduğunu tahmin ettiğim masa üstü ile açıldı. Sistemi kapatarak yeniden başlattım ve kullanıma hazır Raspery PI tamamen fonksiyonel olarak çalışmaya başladı.


Ve Dakika 1 Gol 1 : Raspberry 1 -  Mesut ASLAN 0


Bu noktada ben çok farklı bir sorun yaşadım ancak sizlerin bunu yaşayacağınızı düşünmüyorum. Benim A4Tech KL-5UP model klavyem F dizilimli olduğundan ne yazıkki Raspberry onu tanımadı. Klavye çalışıyor fakat dizilim Q olduğundan yazmakta çok zorluk çekiyordum. Neyseki çok basit bir iki ayar yaparak F klavye kurulumunu gerçekleştirdim ve beraberliği sağladım.

Bu konu ile ilgili ayrı bir yazı yazacağım. Şimdilik yeni oyuncağım ile oynamak için sabırsızlanıyorum.




23 Ocak 2014 Perşembe

Hangi Framework ???



Ne adamlar var !

Bana soruyorlar: 'Sen hangi IDE/Framework ile site yazıyorsun?' diye.

Site Framework ile mi yazılır?

Şimdi en iyi, en gelişmiş fotoğraf makinesi bende olsa en büyük fotoğrafçı ben mi olurum?

En gelişmiş en süper kamera benim olsa en iyi yönetmen ben mi olurum?

Arkadaş (işaret parmağını şakağına vurarak gösteriyor) program burayla yazılır burayla.

Şunlara bak. Almışlar win8 laptopları, macbook airleri ellerine, iki html kopyalıyorlar, bir jquery ekliyorlar, öbür sitede bir css mi gördüler şak Ctrl+C, Ctrl+V tamam...

Ben bir site yazacaksam html yi tasarlamalıyım. CSS yi kendim sınıflandırmalıyım. JQuery kullanırım elbet ama istediğimi yapan plug-in yoksa yazar onuda ücretsiz yayınlarım.

Ancak ondan sonra bir site için 'Ben Yazdım !!!' diyebilirim.

Mesut Cemil ASLAN.

31 Ağustos 2013 Cumartesi

Android Oyun Programlama Dersleri - Gün 3 - Daha Çok Temel








Android oyun programlama derslerimin 3. gününe hoş geldiniz. Bu gün java konusuna devam ederek değişkenlere yakından bakacağız. Bu konunun sizler için çok faydalı olacağını düşünüyorum. Lütfen atlamadan takip etmeye çalışın.

GÜN 3, DERS 1-0 : Değişkenlere yakından bakış

Daha önce yarattığımız telefon isimli sınıfı hatırlıyorsunuzdur. Hatırlamayanlar için :

public class Telefon{

 // Telefonun özelliklerini tanımlayan değişkenler yaratalım

 int agirlik = 0;
 boolean acildi = false;
 String renk = "turuncu";


      // Bu metod telefonun açılmasını kontrol edecek

 void TelefonuAc(boolean acildi){  
  if(acildi == true){
   acildi = false;
  }else{
   acildi = true;
  }
 }
}

ilk yarattığım üç değişken (agirlik, acildi, renk isimli değişkenler) integer, boolean ve String türünde yaratılmıştır. Bu gün bunların detaylarına bakacağız.

Temelde 4 tip değişken vardır (Değişken = Variable ! Unutmayın değişken, tür yada sınıf değil, değişken ! yani değişebilen şey...)

Temelde 4 tip değişken vardır :

Bir objenin yeniden yaratılmış kopyaları yani instance objeler. Örneğin yukarıdaki Telefon sınıfından türeteceğiniz bir obje, bu sınıfın kopyası yada instance versiyonu olacaktır. Dolayısı ile her üretilen telefon nesnesinin kendi agirlik, acildi, renk değişkenleri oluşacaktır. Ancak biz onları bir kez tanımladık ! Bu değişkenlere değer verdiğinizde sadece o telefon nesnesini etkileyecekler, diğer telefon objelerindeki ikiz kardeşleri bu durumdan etkilenmeyecektir.

Bu durumda şöyle diyebiliriz, bu 4 tip değişken ,

1. Instance Variable (Kopya Değişkenler) : Bir değişken static olarak tanımlanmadığı sürece kopya değişken olarak varsayılacaktır. bu durumda bu kopya değişkenlerden her biri kendi değerini alabilir.

2. Class Variable (Sınıf Değişkeni) : Değişken tanımlamasında static kelimesi kullanıldığında basitce bu değişkenden sadece bir tane olabilir demiş olursunuz. Kullandığınız sınıf birden fazla nesne yaratmış olsa dahi bu değişken tekil olmaya devam edecektir.

public class Telefon{

 // Telefonun özelliklerini tanımlayan değişkenler yaratalım

 static double versiyonNumarasi = 3.1;
 int agirlik = 0;
 boolean acildi = false;
 String renk = "turuncu";


      // Bu metod telefonun açılmasını kontrol edecek

 void TelefonuAc(boolean acildi){  
  if(acildi == true){
   acildi = false;
  }else{
   acildi = true;
  }
 }
}

Örneğin bu telefon sınıfından türetilecek tüm telefon objelerinin versiyon numarası tekil olacaktır. Java (veya başka bir programlama dili) ile gerçek dünyadaki olaylara yakın örnekler kurabiliriz.

Bunu daha gerçekçi bir örnek ile açıklayalım :

Diyelim ki ; Samsung bu gün bizim telefon sınıfımızı kullanarak 10 Android Telefon üretmiş olsun. Yarın 10 kullanıcı bu 10 telefonu satın aldığında telefonları tanıyabilmek için şu şekilde etiketleyelim : Telefon1, Telefon2, Telefon3 ............

Eğer Samsung bir yenileme (update) yayınlarsa bu durumda tüm telefonların versiyon numaralarının güncellenmesini isteyeceğiz. (Gerçekçi bir örnek oldu !)

Bunu java kodu ile anlatmamız gerekirse :

static void TelefonlariGuncelle(){
    versiyonNumarasi = 3.2;
}

(Not : Burada eşittir işareti matematiksel olarak düşündüğünüzde kafanızı karıştırabilir. Eşittir işareti java, c ve türevi programlama dillerinde eşitlik anlamına gelmez, eşit olsun anlamına gelir. Yani versiyonNumarasi 3.2 ye eşit olsun veya versiyonNumarasi 3.2 değerini alsın şeklinde düşünebilirsiniz.)

Dikkat ettiyseniz versiyonNumarasi değişkenimizi static olarak tanımlamıştık. Bu durumda bu değişkeni bir kez değiştirdiğimizde yani değerini yeniden tanımladığımızda tüm kopyalarının değeri tanımlanmış olacaktır. Ancak bir telefon sahibinin başka birinin telefonunu açıp kapatmasına izin vermek istemeyeceğimiz için acildi isimli değişkeni static olarak tanımlamadık.

Peki hangi telefonun açık hangisinin kapalı olacağını nasıl ayarlayacağız  ?
Çok basit, telefonları etiketlemiştik hatırladınız mı ? Bu etiketleri kullanacağız :

static void acmaKapamaDugmesineBasildi(){
 if(Telefon1.acildi == true){
  Telefon1.acildi = false;
 }else{
  Telefon1.acildi = true;
 }
}

Son değişken tipimizi hatırlarsak ( String renk = "Turuncu"; ) bu bir metinsel değişkendir. İçerisinde metinsel ifadeler tutabilir. Diyelimki bu değişken asla ama asla değişmeyecek. Bu durumda özel bir ek ile bunu javaya söylememiz gerekir ; final . Yani asla değişmeyecek olan değişkenlerimizi şu şekilde tanımlayabiliriz. final String renk = "Turuncu";

Burada 4 değişken tipinden bahsediyorduk. Hadi 3. değişken tipine bakalım ;

3. Local Variable (Yerel Değişken) : Bir metod içinde yarattığınız değişken o metot içerisine tanımlı olacaktır. Aynı ada sahip olsa bile o metod dışında yaratılan değişkeni hiç bir şekilde etkilemez. Bu tip değişkenlere yerel değişken deriz. Aynı şekilde Bir sınıf içinde yaratılan değişken de başka sınıfları etkilemez. Bu durumda o değişken o sınıfın yerel değişkeni (Local Variable) dir.

public class yerelDegiskenler{

 // Bu bir sınıf yerel değişkeni, tüm sınıf içinde erişilebilir

 static double pi = 3.14;

 public static void main(String[] args){
  // Bu bir metod yerel değişkeni.
  // Bunun anlami bu cap degeri sadece
                // bu metod içinde tanımlı dışaridakileri etkileyemez.

  double cap = 2.0;
  cap = (cap * cap) * pi;
 }

 static void ikinciMetod(){
  double cap = 18.0;
  cap = cap + pi;
 }
}

Buradaki örnekte gördüğümüz gibi;
1. pi bir sınıf değişkeni olarak tanımlanmış
2. main metodu içinde bir cap değişkeni tanımlanmış.
3. ikinciMetod içinde başka bir cap değiskeni tanımlanmış.

UNUTMAYIN : Bir metod içinde tanımladığınız ve kullandığınız değişken o metod için geçerlidir. Diğer metodları veya sınıf değişkenlerini etkilemez !

ve son değişken tipi olarak :

4. Parameter Variables (Parametre Değişkenleri) : Bir yerel değişkeni başka bir metod içinde kullanmak veya değerini değiştirmek için kullanılan parametre değişken tipidir. Değişkenlerin ve değerlerinin metodlar hatta sınıflar ve hatta uygulamalar arasında değiştirilebilmesini, kullanılabilmesini sağlarlar.

public class yerelDegiskenler{
 // Bu bir sınıf yerel değişkeni, tüm sınıf içinde erişilebilir
 static double pi = 3.14;

 public static void main(String[] args){
  // Bu bir metod yerel değişkeni.
  // Bunun anlami bu cap degeri sadece bu metod 
  // içinde tanımlı dışaridakileri etkileyemez.
  double cap = 2.0;
  cap = (cap * cap) * pi;

  // hadi buradan ikinci metodu çağırarak ona cap degerini gönderelim

  ikinciMetod(cap);

 }

 // simdi cap degiskenini metod icinde değil
 // parametre olarak tanimladik

 static void ikinciMetod(double cap){
  cap = cap + 5;
 }
}

Bu örnekte olduğu gibi bir metodu çağırdığınızda java sizden bir parametre isteyecektir. Tanımlanan özelliklerdeki parametre yerel bir değişken olarak o metod içinde işlenebilir ve onu çağıran sınıf veya metoda geri gönderilebilir.

Bir metodu çağırmak için şu kodu kullanıyorduk : metodAdi(); Eğer bu metod bir veya birden fazla parametre istiyorsa java hata vererek size bu durumu anlatacak ve parametre isteyecektir. Bu hatayı console panelinde görebilirsiniz. :



Peki biz ikinciMetod isimli metodu çağırdığımızda neler oluyor ?
main metod içinde tanımlanmış ve değer almış olan cap degiskeni parametre ile ikinciMetod fonksiyonuna geçiyor. (Hatırlarsanız metodlara fonksiyon da diyebiliyoruz, METOD = FONKSİYON) ikinciMetod fonksiyonu içinde tekrar yeniden işlenerek değer alıyor. Sonuç olarak hala iki farklı yerel cap değişkeni var, bir tane değil !

Bunun anlamı nedir ?
main fonksiyonu içindeki cap değişkeninin değeri : 12,56 dır.
ikinciMetod fonksiyonu içindeki cap değeri ise : 17,56 dır.
Karışık mı geldi ? Son paragrafları birkaç kez okuyun. Daha anlaşılır hale gelecektir.

4. günde görüşmek dileğiyle....








Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.

25 Ağustos 2013 Pazar

Android Oyun Programlama Dersleri - Gün 2 - Temel Java








Android oyun programlama derslerinin ikinci gününe hoşgeldiniz. Umarım bu yazı dizisini takip ederek sizin için çok faydalı olacağına inandığım bazı ip uçları ve yöntemlerden yararlanacaksınız. 

GÜN 2, DERS 1-0 : Java İncelemesi

Bu gün birlikte ilk java sınıfımızı yacağız. bazılarınız için bu ilk kez program yaratmak anlamına geliyor...

Ama önce Eclipse hakkında söylemek istediklerim var.

Geçen derste Eclipse hoşgeldiniz ekranında bizi karşılamıştı. Bu ekranı sürekli olarak görmenize gerek yok. Eclipse içindeki "Wellcome" tabını kapatarak bu ekrandan kurtulabilirsiniz. 


Artık Eclipse editörünü her açtığınızda karşınıza gelecek olan ekran ile tanıştınız, Eclipse : Workbench (Eclipse Çalışma Alanı). Bir sürü panel ve komut gözünüzü korkutmasın. Hangisinin ne işe yaradığını ve nasıl kullanıldığını anlatmaya çalışacağım. Şimdilik aşağıdaki maddelere bir göz atalım.

1. Eclipse farklı görevler ve çalışma şekilleri için farklı görünümlere bürünebilir. Bu görünümlere Perspective denilmektedir. Şu anda kullanılan perspective JAVA olmalı. Eğer Java değilse aşağıdaki komut seti ile Java olarak ayarlayabilirsiniz.

Window > Open Perspective > Other > Java.



2. Ekranın en altındaki panele bakın, orada "Console" adında bir sekme varsa devam edin.
Sekme yoksa Window > Show View > Console komutu ile görünmesini sağlayabilirsiniz.


Artık Eclipse kullanarak programlama yapmaya hazırız !

"Package Explorer" başlıklı panele bir göz atın. Ekranın sol tarafında olmalı. Bu panel sizin Eclipse projelerinizi takip edeceğiniz, organize edeceğiniz Paket Göstericisi. Artık kodlamaya hazırsanız başlayalım !

1. File > New > Java Project komutunu verin.
2. Projeniz için bir isim verin (İsimde boşluk ve Türkçe karakter kullanmamanız gerektiğini söylememe gerek yoktur umarım.)


3. Finish yazan butona basın. Böylece yeni projenizi "Package Explorer" alanında görmeye başlamanız gerekiyor.
4. "Package Explorer" içindeki projenize çift tıklayın. Aşağıdaki gibi bir ekran görüntüsü olmalı.


5. src klasörüne sağ tuş ile tıklayın, New > Class komutunu vererek yeni bir Java Class dosyası yaratın. Bu dosyaya bir isim vermelisiniz ve genelde bu isim "MerhabaDunya" olur.(Programcı Jargonuna göre isim vermek zorunda değilsiniz ama genelde iki kelimeden oluşan dosya isimlerinde ilk ve ikinci kelimelerin ilk harflerini büyük yazarız. Ayrıca ilk programa MerhabaDunya isimini koymak Hakkı ÖCAL hocamızın bize öğrettiği ilk şeydir.


6. ve nihayet aşağıdaki ekranı görüyor olmalısınız.


Hızlıca java yazım kurallarına yada gramerine bir göz atalım.

1. Bordo renkli "public class" kelimeleri kendilerinden sonra gelen "MerhabaDunya" adında bir sınıf oluşturulduğunu anlatır. Bu sınıf public yani diğer sınıflar tarafından ulaşılabilir bir sınıftır.

2. Süslü parantezler sınıfın başlangıç ve bitiş noktalarını belirlerler. Tüm sınıfınız bu iki parantez arasında olmalıdır. Java dili yazarken çift tırnak ( " " ), tek tırnak ( ' ' ), süslü parantez ( { } ) ve noktalı virgül ( ; ) karakterlerini çok yoğun olarak kullanırız. Bir miktar pratik yaptığınızda süslü parantezler ve noktalı virgül artık farkında bile olamadan her satır sonunda gerekli yere eklemeye başlayacağınız birer refleks haline gelecektir.

Peki nedir bu sınıf ?

Sınıfları anlamak için önce objeleri anlamamız gerekir.

Programlama dilinde objeler gerçek dünyadaki objeler gibidir. 

Gerçek dünyada objeler belirli özellikleri tanımlanabilir. Örneğin telefonunuz bir objedir ve çalışma durumu : Açık / Kapalı olarak tanımlanabilir. Objelerin alt özellikleri de olabilir. Telefonunuz açık ve bir müzik çalıyor, Açık ve Şarj oluyor durumda olabilir.

Programlama dilindeki objeler buna çok yakındır. Durumları, alt durumları, özellikleri bulunur. Hatta değişkenleri, fonksiyonları v.b.

Bir sınıf objenin temel özelliklerini tanımlayan plan/proje dosyası gibidir. Sınıflar ile objeler yaratılır, özellikleri ve durumları eklenir.

Daha önce yarattığımız "MerhabaDunya" sınıfı iyi bir örnek sayılmaz. Bu sebeple aşağıda size bir Telefon Sınıfı yaratarak demek istediğimi anlatmaya çalıştım.

public class Telefon{

     // Telefonun özelliklerini tanımlayan değişkenler yaratalım
     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

     // Bu metod telefonun açılması durumunu kontrol edecek
     void TelefonuAc(boolean acildi){
          if(acildi == true){
               acildi = false;
          }else{
               acildi = true;
          }
     }

}

(Bu mükemmel bir program örneği değil. Yukarıdaki kodun büyük ihtimalle hiçbir anlamı yok ancak size yazım kurallarını ve obje mimarisini anlatır diye umuyorum)

Hadi bu sınıfı inceleyelim ; Parantezlere özellikle dikkat etmenizi istiyorum. Kaç tane parantez açıldı ise o kadar parantez kapatılmıştır. Hiyerarşiyi daha iyi anlayabilmek için yazımda tab boşlukları kullanılmıştır. Böylece kodu okumak daha kolay hale gelir. Parantezler bilgisayar dünyasında çok önemli karakterlerdir. Yazım sıraları, yazılış şekilleri görevlerini değişken hale getirir. Örneğin burada süslü parantezlerin bir tanesi eksik kaldığında yazılım hata verecektir.

Eğer daha önce hiç programlama ile uğraşmadıysanız bu durum size çok karmaşık gelecektir. Sonuçta bu yeni bir dildir. Bugün ingilizce veya portekizce öğrenmeniz ile java öğrenmeniz arasında hiç bir fark yok..

Biraz daha açıklayıcı olmaya çalışalım :

// ile başlayan satırlar açıklama satırlarıdır. Yazılım kodunun içine notlar almanızı sağlarlar. Bu notları kendinize hatırlamak için alabileceğiniz gibi programcıların da kodu okuduklarında anlamalarına yardımcı olacak notlar alabilirsiniz. // ile başlayan satırlar dil yorumlayıcısı tarafından kod olarak yorumlanmazlar.

ilk açıklama satırından sonra 3 durum (bizim dilimizde cümle) görüyorsunuz. noktalı virgül ile bitiyorlar. Bunlara kod satırı diyebilirsiniz.

     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

Bunlar değişkenlerdir. Değişkenler basitçe içinde belirli bir tipte veri tutabilen kaplar gibidir. Burada sizlere temel programlama konusunu anlatmak istemiyorum. O yüzden ilerlemeye devam edeceğiz.

Büyük ihtimalle her satırın noktalı virgül ile bittiğini fark etmişsinizdir. Java dilinde noktalı virgül satır sonu anlamına gelmekte, yeni bir komut satırının başlayacağını, mevcut satırın bittiğini ifade etmektedir.

Burada büyük dikkat gerektiren başka bir konu ise java dilinin case sensitive bir dil olmasıdır. Yani java büyük ve küçük harf duyarlıdır. Bir çok acemi programcı asla bulamadıkları hataları bu yüzden almaktadır.

Yani "MerhabaDunya" ile "merhabadunya", "Merhabadunya" ve "merhabaDunya" farklı nesnelerdir.

Neyse, java hakkında sık sorulan sorular ve cevaplarına şu bağlantı ile ulaşabilirsiniz.

http://www.javacoffeebreak.com/faq/

GÜN 2, DERS 1-1 : İsimlendirme Hakkında Hızlı Ders

Java kullanırken sınıf, nesne ve değişkenlere isimler vermek zorundasınız. İsimlerin ne olacağına ve nasıl yazılacağına siz karar vereceksiniz. (Türkçe karakter ve boşluk kullanamazsınız. Bazı özel karakterleri kullanamazsınız. Program sizi zaten uyaracaktır) buna rağmen bazı özel kelimeleri isim olarak kullamazsınız. (Ör : public, static, int, void gibi komutları isim olarak kullanamazsınız.)

Sınıflar genelde şu şekilde isimlendirilir :

OrnekSinifAdi

Metodlar ise şu şekilde isimlendirilir :

ornekMetodAdi()

ve değişkenler de bu şekilde isimlendirilir :

ornekDegiskenAdi

Komik gelecek ama buna "Camel Casing" yani "Deve Adlandırması" denilir. Bu bir kural değildir ve zorunlu değildir ancak her dilin olduğu gibi javanın da jargonu vardır ve jargona uymak sizi diğer programcıların gözünde daha saygıdeğer gösterir.

GÜN 2, DERS 1-2 : İlk Program

Evet şimdi MerhabaDunya adında bir sınıfımız var.
public class MerhabaDunya {

}

Bu sınıf içerisine bir metot ekleyeceğiz. Bu metot "main" adında özel bir metot. main metodu java programı çalıştırıldığında ilk çağrılan metottur. Yani çalıştır tuşuna bastığınızda bu metot çalışmaya başlayacaktır.

Main Metot Tanımlanması

public static void main(String[] args){

}

1. public, static, void : Java tanımlayıcıları

Daha öncede anlattığım gibi java dilinde bazı kelimeler özel anlamlar taşıyan komutlardır. Bu kelimelerin belirli bir sıra ile yazılması sonucu kendi sınıf, obje ve metodlarınız belirli özellikler kazanır. Burada çok fazla java dersine girmek istemiyorum. Sonuçta buraya Oyun Programlama öğrenmek için geldiniz. Ancak bazı temel konulara mutlaka göz atmamız gerekiyor. Neyse şu özel kelimelere bir bakalım :

public : Diğer sınıflar tarafından görülebilir. Bir java uygulaması birden fazla sınıftan oluşabilir. Bazen bu sınıflardan birinin diğerinin içindeki bir veriyi, değişkeni okuması veya bir metodu kullanması gerekebilir. Bu durumda bu koda erişim vermek üzere public tanımlanır. Tam zıttı private dir ve erişimi kesinlikle yasaklamak anlamına gelir.

static : Anlamı bu sınıftan sadece bir tane olduğudur. main sınıfının tekil olduğunu anlatır. static olmayan sınıflardan birden fazla yaratılabilir, böylece her kopya kendi değerlerine sahip olabilir. Bu durumda programınızın nasıl dengesizleşeceğini tahmin edebilirsiniz. Örneğin bilgisayarınızda birden fazla başlat menüsü olsaydı veya iki fare imleci olsaydı ne kadar zorlanırdınız değil mi ? Aynı şekilde bazı sınıflardan program içinde sadece bir tane olması gerekir. static kelimesi bu tekilliği sağlayacaktır.

void : Bir metot çağırdığımızda (Çağırmak çalıştırmak anlamına gelir) program o metottan bir sonuç dönmesini bekleyecektir. void tanımlanan metodun/fonksiyondan bir sonuç dönmeyeceği anlamına gelir. (Bunu şöyle örnekleyelim : Evinizde anneniz size birşey söylediğinde sonuç dönmesini beklerken babanız void çalışmaktadır. Anne : Oğlum yemeğini ye, yemeğini yedinmi, tabağın bittimi gibi sorular sorarak verdiği komutun sonucunu öğrenmek istemektedir ancak Baba : Kapıyı kapat ! dedikten sonra kapatıp kapatmadığınızı sormaz) Aynı şekilde bazen programınızın sonucunu zaten bildiğiniz birşeyi yapmasını istersiniz. Bu durumda sonucu zaten bildiğinizden bir sonuç döndürmesi gerekmez.

Bu anlaması zor gelen bir bölüm oldu. Ama merak etmeyin zaman içerisinde yazdıkça anlayacaksınız. Kimse dünyaya programcı olarak gelmiyor. (Sanırım ben hariç....)

2. Metotlar ve Fonksiyonlar : Parametreler

Bazı metotlar çağrılırken bir parametreye gerek duymazlar (Kapı örneğini ele alalım, baba kapıyı kapat dediğinde çocuk sokak kapıyı kapatacaktır. Bir parametreye gerek yoktur)

metotBir()

Bazı metotlar ise çalışmak için parametrelere ihtiyaç duyarlar. (Annenize çoraplarım nerede diye sorduğunuzda alacağınız cevap "Çekmecede" şeklinde olur ve siz parametreye ihtiyaç duyarsınız "Hangi çekmecede ?")

metotIki(int cekmeceNo)

fonksiyon ve metotların parametre alması demek o metoda bir veri göndereceksiniz ve o veri ile bir şey yapacak demektir. Programı yazdıkça bu bölümü daha iyi anlayacaksınız.

3. main metodu ve parametreleri

main(String[] args)

Bildiğimiz gibi (veya sizin yeni öğrendiğiniz gibi) main metodu çalışmak için bazı argümanlar yani parametreler istemekte. Bu parametreler string türünde yani metin formatında olmalı. Buradaki köşeli parantezler ( [ ] ) ise bu parametrelerin bir array yani dizi olduğunu anlatmakta. (Array yani dizi, tv dizisi gibidir sürekli olarak sonu gelmeden yeni bölümler eklenebilir. Burada string array ise birden fazla metin türünde veri alabileceği anlamına gelir. "Parametre bir", "parametre iki", "isim", "çalıştır beni", "tırmala beni şakir" gibi bir metin dizisi olabilir.)

Şu anda bu anlattıklarımın neden veya nasıl olduğunu anlamanız gerekmiyor. Güvenin bana ilerledikçe daha anlaşılır şekilde ve örnekler ile bunların tamamını zaten deneyeceğiz.

Aşağıdaki main metodu eklenmiş olan MerhabaDunya sınıfını kopyalar ve Eclipse penceresine yapıştırıp çalıştırırsanız çalışacaktır.
public class MerhabaDunya {
	
	public static void main(String[] args){
		
		
	}

}

Ancak bir problemimiz var. Main fonksiyonu (bundan sonra metod yerine fonksiyon kelimesini kullanalım daha anlaşılır oluyor) hiçbir görevi yerine getirmiyor. Yani hiçbirşey yapmıyor. Bu durumda çalışıp çalışmadığını anlayamayacağız.

Bu yüzden main fonksiyonumuza bir görev vermeliyiz.

public class MerhabaDunya {
	
	public static void main(String[] args){
		
		System.out.println("Selam. XD");
		
	}

}

Böylece main fonksiyonuna bir görev vermiş olduk. Ekran çıktı alanına bir satır yazmasını söyledik. Eğer herşey yolunda gitti ise Eclipse araç çubuğundaki play tuşuna bastığınızda size dosyaları kaydetmeniz gerektiğini söyleyecek ve kayıt işleminden sonra programı çalıştırarak console panelinde "Selam. XD" yazacaktır.


Biliyorum bu noktaya kadar çok sancılı bir konu oldu, hatta bazılarınızın şimdiden gözü korktu bile ama en azından şunu söylememe izin verin. Bilgisayar programcılığı hele hele oyun programcılığı kolay bir iş değildir. Sadece bir çıktı penceresine "Selam" yazabilmek için ne kadar efor sarfettiğinizi düşündükten sonra lütfen şunu hatırlayın ; Oynadığınız oyunların yanında bu denizde bir kum tanesi bile etmez !

Bu yüzden oyun/uygulama geliştiricilere yaptıkları iş hakkında bir cümle kurmadan önce lütfen iki kere düşünün.

Zor kısmı geçtik, bundan sonrası kolay kısım. Söz veriyorum bu yazı dizisini takip ederseniz sizin için hem eğlenceli hem de geliştirici ve faydalı olacak. 3. günde görüşmek üzere.

Okuduğunuz için teşekkür ederim.






Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.