MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Yeniden ve yeniden merhaba. Sıkıldınız sanırım? Tabi konulara gelen desteğe bakılırsa insanlar seviyor. Devam ettirmeliyim! :D Öncelikle eğer diğer bilgi konularını görmek isterseniz linklere tıklayın lütfen:
Bölüm 1 (final, static, kod blokları, switch-case, if-else'i kısaltma)
Bölüm 2 (main metodu, package-private, protected private, do-while, modüler)
Bölüm 3 (synchronized, interface, enum, abstract, annotation, dosya açma, silme, oluşturma, dosyaya yazı yazma, dosyadan yazı okuma, process oluşturma)
Bölüm 4 (JFrame, JButton, JTextField, JPanel, JLabel)
Bu bölümde de birkaç tavsiye vericem ve değişken sistemini biraz anlatıcam. Değişken sistemi ile başlayalım.
Değişken Sistemi
Bir değişken tanımlarken yaptığınız şey basittir.
(Anahtar Kelimeler) (Değişken İsmi) = (Değer);
Peki şöyle deseydim nasıl olurdu?
Kod:
int başlangıç = System.currentTimeMillis(); // Milisaniye olarak zamanı almaya yarayan bir metod. Örnek amaçlı kullandım.

// İşlemler

int son = System.currentTimeMillis();

int geçenZaman = son-başlangıç;
Şimdi geçenZaman değeri 0 mı olacak? Çünkü ikisi de System.currentTimeMillis()'e eşit. Sizce ne olurdu? Aslında 0 olmazdı. Zaten eşitliğin sağ tarafının DEĞER kısmı olduğunu biliyorsunuz. Yani eşitliğin sağ tarafına ne yazarsanız yazın, size sadece tek bir değer döndürecek. Sırf bu ikisinin aynı değeri vereceğini düşündükleri için işlerini zorlaştıran insanlar var. Tabi o arada işlemler yapılması önemli. Çünkü işlemler olmazsa 2 zaman arası bir fark olmazdı. Bu da size not olsun.

Bazı Tavsiyeler
Size küçük tavsiyeler vericem. Bunları biliyorsunuzdur zaten ama yeni başlayanlar vs. olursa diye anlatayım dedim.

Mesela siz bir şifre programı yazdınız. Ama bir sorun var. Şifrenizin doğru olduğunu bilseniz bile yanlış diyor ama "şifremi göster" dediğinizde oradaki şifreyle aynı. Bu gibi bir durumda öncelikli deneyeceğiniz şey konsola yazdırmak. Şifreyi her girdiğinizde hem doğru şifreyi hem de yazdığınız şifreyi gösterecek bir mesaj gönderin konsola. Hatayı anlayabilirsiniz.

Eğer böyle bir işlemi yapamayacak durumda olursanız aklınızda canlandırmaya çalışın. Siz şifreyi giriyorsunuz. Doğru şifre biliniyor. Ama program kabul etmiyor. O zaman doğru şifre ile yazdığınız şifre karşılaştırılamıyor demektir. Bu durumda ya yazdığınız şifre düzgün algılanmıyor veya doğru şifre doğru alınmıyor.

Kağıt ve kalem dostlarınızdır. Bir hata üzerinde çok kafa yormak yerine kağıda yazın. Çünkü beyin işlem yaparken ne düşündüğünü unutabilir. Neyin kesin işe yaramadığını, neyi denemek istediğinizi vs. bir kağıda yazın. Veya bilgisayarda not defterine yazın. Bir proje yaparken notlar almak önemlidir.

Ayrıca bir projeye başlamadan önce kesinlikle içinde neler olacağını not edin. Çünkü bir şeyi baştan yapmak, o şeyi sonradan eklemekten daha kolaydır. Mesela butonlarla şifre girilen bir program yaptınız. Her bir butonda ayrı bir sayı alıyorsunuz. Sonra MD5 ile saklamak istediniz. Ama sıkıntı var işte. Her sayı ayrı ayrı alınırsa nasıl MD5 olucak? O zaman ayrı ayrı almamanız gerekiyor. Bunun için her butonda ayrı bir işlem yapacaksınız. Unutmayın. İyi oyun firmaları bir oyunu 5 yılda çıkarıyorsa onun 3 yılı fikirler, eklenebilecekler ve senaryo gibi şeylerle geçer.

Notları sadece not defterine alacaksınız diye bir şey yok. Kod yazarken size "comment" diye bir şey verilmiş. Bunları kullanın. Kodunuzda metodların işlevlerini üstüne yazın. Değişkenlerin ne işe yaradığını üstlerine yazın. Yapmayı düşündüklerinizi TODO: olarak yazın. Hataları düzeltebilmek için neyin ne işe yaradığını bilmek önemlidir.

Fikir paylaşımı ve arkadaşlar önemlidir. Yaptığınız projelerin versiyonlarını açık olarak paylaşın. Parayla satmayı planlıyorsanız kapalı-beta tarzı bir şey duyurun ve onlara gösterin. Yakın zamanda Mirror's Edge Catalyst geldi. İlk başta kapalı-beta yaptılar. Çünkü oyun dünyasında tek parkur konsepti olan oyun o ve bu deneyimde bir hata olmasını istemezler. Siz de gerçek oyunda hata olmasını istemezseniz böyle şeyler yapmalısınız.

Sadece program yapmaya çalışmayın. API yazmak da program yapmak gibi önemlidir. Zaten API insanlara daha çok yardım eder. Aklınızda bulunsun.

Eğer bu işte ciddiyseniz bilgi edinebileceğiniz her fırsattan yararlanın. Bazı insanlar sadece bildikleri şeyleri yaptıklarından yeni bilgileri kolay elde edemiyorlar. Bilmediğiniz şeyleri yapmaya çalışın. Kodunuzu kısaltabilecek yollar öğrenmeye çalışın. Ayrıca bilmediğiniz bir şeye ne kadar kafa yorarsanız algoritma kuruşunuz o kadar gelişir.

Başka insanlara yardım etmeyi de avantaj bilin. Çünkü bir program yazmadan önceki en büyük ikinci sıkıntı budur. Aklınızda düzgün bir şekil olmayınca düzgün program yazamazsınız. Diğer insanlara yardım etmek, onların size yeni fikirler vermesini sağlar. @GetqusA arkadaşımız bana geçen yıl plugin projelerimde çok yardım etti. Ona da burdan teşekkür ediyorum :) Mesela bu konuda beni örnek alın. Bu bilgiler konularını açarak size yardım ediyorum. Ama her bir bilginin doğruluğu ile alakalı araştırma yapmam gerekiyor. Bu sayede hatalı bildiklerimi düzeltmiş oluyorum.

Bir program yazmadan önceki en büyük hatayı merak ettiniz mi? O programı çok iyi hayal etmek. Eğer Java'da birçok class'ı kendi yararınıza nasıl kullanacağınızı bilmiyorsanız çok büyük bir şey hayal etmeyin. İşin basitinden gidin. O işi kendiniz için zorlaştırmak hiçbir şeyi değiştirmez. Önemli olan o kodun neticesidir ve kendiniz için işi zorlaştırmak bazı minik hatalara neden olabilir. Yeni başlayanların düştüğü hata budur. O insanlar Java'yı öğrenmek için değil çok büyük bir program yapmak için öğrenirler. Eğer siz bir işi sevmezseniz o iş sizi hiç sevmez. Siz işi yeterince ciddi almadıkça asla yeterli bilgiye sahip olamazsınız. Siz hiç gördünüz mü matematik dersini sevmeyip de onda başarılı olan bir insanı? Siz de Java'yı sevmedikçe onda başarı yakalayamazsınız.

"Java'nın diğer dillerden bir farkı yok" diye ezberden konuşan arkadaşlar için söylüyorum bunu. Her dilin kendi özellikleri vardır. Temelde hepsi aynı olmak zorunda zaten. Ama önemli olan işlevleri. Mesela HTML sitede yazılar yazmak vs. gibi işlere yarar. PHP ise işlem gerçekleştirmeye yarar. CSS de siteyi düzenlemeye yarar. C++ konsol yazılımları için önemlidir. Java temel öğrenime yarar vs. Java'nın da farkı nesne yönelimli olmasıdır. Yani yapacağınız 2 uzun işlemi tek sınıfta yapmak yerine 2 sınıfta da yapabilirsiniz. İsterseniz 100 tane sınıf içinde bile yapabilirsiniz. C dilleri size bunun için fazla büyük bir alan vermez. Genelde her bir dosyası tek bir işe yarar.


Thread ve Synchronized
İki bölüm önce bunları daha detaylı anlatacağımı söylemiştim. İşte anlatıyorum :D
Thread dediğimiz şey bir işlemdir. Genelde ayrı ayrı işlemleri bağımsız olarak gerçekleştirmeye yarar. Mesela Minecraft'ı düşünün. Orada müzik çalmalı, blok efektleri gelmeli, haritalarınız kontrol edilmeli, multiplayer'da her bir oyuncu hareket edebilmeli vs. Bunların hepsi bağımsız olarak gerçekleşecek işlemlerdir. Tabi kullanırken dikkat edin. Thread'ler sadece tek bir CPU'yu paylaşırlar ama fazla Thread koymak CPU'nuzu fazla yükseltebilir. Aslında zor değil. Sadece kullanılabilecek pek alanı yok. Ben nasıl kullanacağınızı da anlatıcam.

Thread denilen şey sadece Runnable interface'ini örnek alan class'lar için çalışır. Oluşturduğunuz Thread'e bir Runnable verirsiniz ve Thread onu siz istediğiniz zaman çalıştırır. Mesela bir program yaptığınızı düşünün. Bu program ilk çalıştığında başla() metodu çalıştırılacak. Burada da Thread tanımlanıp başlatılacak. Thread'lerin bir özelliği de SubThread oluşturabilmesidir. Bunlar alt işlemlerdir. Ama dediğimiz gibi başla() metodumuz program başladığı gibi çalışıyor. O zaman SubThread bu başla() metodunu bir daha çalıştıracaktır. Bu da aynı işlemi yeniden ve yeniden çalıştırıp CPU'nuza hasar verecektir. Bu yüzden başla() metodunu sadece tek bir işlemin çalıştırmasına izin vereceğiz. Bunun için de "synchronized" kullanırız.

Yukarıda şöyle yanlış bir algı oluşabilir: Sanki işlemler oluştuğu gibi başlıyor. Çünkü SubThread'i biz başlatmasak da başlamış. İşte Thread'i kullanırken dikkat edin dediğim de bu. Siz onu çalıştırdığınız anda her türlü işlem açma yetkisi vardır. Çok fazla gerekmedikçe Thread kullanmanızı tavsiye etmem bu yüzden. Ayrıca eğer bilgisayarın içindeki çekirdekten fazla işlem açarsanız context-switch işlemi devreye girer. Kısaca bu her bir Thread arasında değişimli çalışma yapılmasını sağlar. Eğer daha fazla değilse her bir Thread kendi için bir çekirdek alır ve tamamen paralel çalışır.

Sanırım yeterince detaylı oldu bu. Daha fazla söylenecek bir şey yok zaten. Eğer bir sorunuz olursa sormaktan çekinmeyin. Fikirleriniz önemli :) Bir hatam varsa da düzeltin.

NOT: Eğer İngilizceniz iyiyse Java bilginizi denemek için kullanabileceğiniz bir site var. http://codingbat.com/java
 


Son düzenleme:

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
Ehe başta staticlerle başladı şimdi değişkenlere indi
Nice zorluk ayarlaması
Neyse devam :(*
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Ehe başta staticlerle başladı şimdi değişkenlere indi
Nice zorluk ayarlaması
Neyse devam :(*
Hayır değişkenleri anlatmadım ben. Sadece sağ tarafın değer kısmı olduğunu unutup kendine zorluk çıkaranlar için not ekledim. Ayrıca zorluk ayarlamasına takıldıysan Thread'i de anlattım. Senin için yeterince ileri konu değil mi? :D

NOT: Eğer İngilizceniz iyiyse Java bilginizi denemek için kullanabileceğiniz bir site var. http://codingbat.com/java
 

Jacops

Bedrock Kaşifi
Mesajlar
1,656
En iyi cevaplar
0
Beğeniler
1,636
Puanları
4,700
Ruh hali
Çok uzun yazı yine okumaya üşendim.
Code öğrenmek İngilizce ister İngilizce biliyorsan zaten öğrenirsin.
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Çok uzun yazı yine okumaya üşendim.
Code öğrenmek İngilizce ister İngilizce biliyorsan zaten öğrenirsin.
Bunların birer "ders" olmadığını tekrar hatırlatayım. Sadece az kullanılan şeyler hakkında meraklı insanlara bilgi veriyorum. Çünkü bunun gibi Türkçe kaynaklar fazla bulunmuyor.
 

MhaWTHoR

Obsidyen Madencisi
Mesajlar
1,208
En iyi cevaplar
1
Beğeniler
1,161
Puanları
3,230
Konuların gerçekten yardımı dokundu.
Devam et lütfen. :D
 

GetqusA

Kızıltaş Madencisi
Mesajlar
649
En iyi cevaplar
0
Beğeniler
298
Puanları
1,080
Anlatımların çok sağlıklı , verdiğin bilgi çok değerli.
 

Üst