Arkadaşlık Sistemi - Eklenti Halinde!

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
OOP'un gerekeceği bir şey olsaydı eklerdim. Friend gibi sınıfları her ne kadar açmak istediysem de yapmam gereken şeylere göre sadece boş yere sınıf açmış olurdum.

O String olayına hayatımda hiç dikkat etmedim. Gerek olduğunu hiçbir zaman da düşünmedim aslında. Ben oyuncunun bilmesi gereken şeyi mesaj olarak kendim söylüyorum zaten. Hem de Türkçe mesajlarla. Genelde o lang.yml olayını İngilizce mesajlar yazdığım eklentilerde kullanıyorum.

Sürekli tekrarladığım uzun bir işlem pek hatırlamıyorum. Sadece şu envanter açtırma yerlerinde biraz olabilir ama dediğim gibi bunun bu hafta sonuna yetişmesi gerekiyordu ve o kodları biraz aceleyle yazdım. O an aklıma tam olarak bir metod şekli gelmemişti, ben de uğraşmak istemedim.

Static sözcüğü sadece 3 yerde kullanıldı zaten. Core içindeki create metodlarında (ki bunlarda static kullanmanın herhangi bir yanlışlığını göremiyorum.), yine Core içindeki yml değişkenleri ve FriendCommandExecutor içindeki hashmap'ler.

Yml olayları için JavaPlugin'in kendini kullanmayı fazla sevmiyorum. Her seferinde Core'u bir constructor olarak eklemek zorunda bırakıyor beni. O yüzden config.yml dosyası bile olsa static bir FileConfiguration içinde olması beni kod açısından çok rahatlatıyor. Aynı şey o hashmap'ler için de geçerli. Onları static yapmasaydım yine Core içine alıp diğer 2 sınıfta constructor ile bağlamam gerekecekti.

Biliyorum, bazı programcılar static sözcüğünden nefret ediyor. Bunun sebebini hayatım boyunca hiç anlayamadım. Ben static sözcüğünü nesneye bağlı olması gerekmeyen her şey için kullanırım ve şu ana kadar bunun bir kötülüğünü de görmedim. Hatta daha da iyi oluyor benim için. Her yere tek bir instance götürmektense değişkeni static yapıp bütün o olaylardan kurtulmuş oluyorum. (Bir arkadaşım sırf static sözcüğünden nefret ediliyor diye 10 satırda yapılabilecek bir şeyi 1000 satıra kadar uzatmıştı. O günden beri static sözcüğüne olan nefreti kimseden dinlemiyorum.)
Kütüphane yazarken normalde static ile yapacağın şeyi yapamıyorsun çünkü 2 şey aynı anda onu kullanırsa çakışıyor ve çakışmasını-birbirini etkilememesini istiyorsun*
Şahsen ana nedeni bu ama yani çok da şey değil bence :(
10 satırlık şeyi nasıl 1000 satır yaptığını sorgulayabilir miyim :c
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Kütüphane yazarken normalde static ile yapacağın şeyi yapamıyorsun çünkü 2 şey aynı anda onu kullanırsa çakışıyor ve çakışmasını-birbirini etkilememesini istiyorsun*
Şahsen ana nedeni bu ama yani çok da şey değil bence :(
10 satırlık şeyi nasıl 1000 satır yaptığını sorgulayabilir miyim :c
Program için panel sayfaları yapıyordu. Her panel sayfasının sadece tek bir örneği olacağı için her birini static yapıp işin içinden çıkabilirdi. Ama sırf static kullanmayın dendiği için panelleri static yapmayıp o panelleri kullanan her sınıfta bütün panelleri tekrar değişken olarak oluşturup constructor'larda tanımlamak zorunda kaldı. (Sadece panellerin tanımlandığı sınıfı değişken olarak koyabilirdi diyebilirsin ama onun yazdığı kodun biçiminde öyle yapılamıyordu. Kodu tam hatırlamıyorum ama bunu önerdiğimi ve yapılamadığını iyi hatırlıyorum.)
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Keşke Fotoğraf Koysaydın bi kaç tane
Konuda da söylediğim gibi arkadaşım olmadığı için hata var mı diye deneyemedim bile.

Gerçekten hiç değişmemiş :D

OOP olayına niye bu kadar sıkıntı yapıyorsunuz anlamıyorum. Eğer istediğim işlevi yerine getiriyorsa, kodu istediğim gibi yazabilirim. Bu kimseyi de ilgilendirmez. Farkı yaratanlar her kurala uyanlar değil kendi kurallarını koyanlardır.

Bu aralar kendini haklı çıkarmak için insanları ezikleme taktiği moda oldu galiba. Herkesten görmeye başlar olduk. İşin komik yanı bu arkadaşın 2 sene kadar önce konularıma "başarılı" yazıp şimdi işine gelmeyince "Java bilmiyor" demesi. Ben insanların hakkını yemem. Forumda gerçekten "programcı" adı altında yer edinmemi sağlayan kişi Karahan'dır. Şu an işime gelse de gelmese de bunu söyleyebilirim. Ama belli ki herkes aynı değil.

O alan adı muhabbetini hiç konuşmak bile istemiyorum. Yukarıda da söylediğim gibi istediğim işlevi yerine getiriyorsa, kodu istediğim gibi yazarım. İlla "paket adına alan adımı vereyim" veya "Java OOP dili o zaman kesinlikle OOP kullanmak zorundayım" gibi şeylere gerek duymuyorum.

Şöyle küçük bir şeyi de söyleyeyim: Codexia grubuna alımları niye Akademi yoluya yaptığımızı merak ettiyseniz işte cevabı açık açık burada. "Maven işime yaramıyor" diyen kişi bendim ve hala arkasında duruyorum. Ama o grupta söylediğimiz şeyleri hemen millete yetiştirenler olmasın diye alımları direk gruba değil Akademi yoluyla yaptık. Şimdi ne kadar iyi bir seçim yaptığımızı görebiliyorum.

Bu yazılım işlerinde çok düşmanım var. Nedenini tam olarak ben de bilmiyorum. Ama önüne gelen herkesin benim kod yazma şeklimi eleştirmesinden bunu anlayabilirsiniz. Eleştiriye kapalı bir insan değilim. Ama sırf beni kötülemek için zorunuzla eleştiri yapıyorsanız ona kapım öyle kapalı ki tankla gelseniz açamazsınız.
 

Pledix

Kızıltaş Madencisi
Mesajlar
675
En iyi cevaplar
0
Beğeniler
332
Puanları
560
Ben anlamıyorum madem o kadar şunu yapmayı bilmiyor diyorsunuz.
Siz yazın eklenti onu kullanalım bu kadar olayı büyütmenin bir anlamı yok.
 

java10

kız çava bana kahve yap
Mesajlar
513
En iyi cevaplar
0
Beğeniler
586
Puanları
1,090
Ruh hali
daha düzenli şekilde yazılabilirdi :/ ama yine de çalışıyor eline sağlık :)
 

Whoisthatinblack

Taş Madencisi
Mesajlar
70
En iyi cevaplar
0
Beğeniler
85
Puanları
280
OOP'un gerekeceği bir şey olsaydı eklerdim. Friend gibi sınıfları her ne kadar açmak istediysem de yapmam gereken şeylere göre sadece boş yere sınıf açmış olurdum.

O String olayına hayatımda hiç dikkat etmedim. Gerek olduğunu hiçbir zaman da düşünmedim aslında. Ben oyuncunun bilmesi gereken şeyi mesaj olarak kendim söylüyorum zaten. Hem de Türkçe mesajlarla. Genelde o lang.yml olayını İngilizce mesajlar yazdığım eklentilerde kullanıyorum.

Sürekli tekrarladığım uzun bir işlem pek hatırlamıyorum. Sadece şu envanter açtırma yerlerinde biraz olabilir ama dediğim gibi bunun bu hafta sonuna yetişmesi gerekiyordu ve o kodları biraz aceleyle yazdım. O an aklıma tam olarak bir metod şekli gelmemişti, ben de uğraşmak istemedim.

Static sözcüğü sadece 3 yerde kullanıldı zaten. Core içindeki create metodlarında (ki bunlarda static kullanmanın herhangi bir yanlışlığını göremiyorum.), yine Core içindeki yml değişkenleri ve FriendCommandExecutor içindeki hashmap'ler.

Yml olayları için JavaPlugin'in kendini kullanmayı fazla sevmiyorum. Her seferinde Core'u bir constructor olarak eklemek zorunda bırakıyor beni. O yüzden config.yml dosyası bile olsa static bir FileConfiguration içinde olması beni kod açısından çok rahatlatıyor. Aynı şey o hashmap'ler için de geçerli. Onları static yapmasaydım yine Core içine alıp diğer 2 sınıfta constructor ile bağlamam gerekecekti.

Biliyorum, bazı programcılar static sözcüğünden nefret ediyor. Bunun sebebini hayatım boyunca hiç anlayamadım. Ben static sözcüğünü nesneye bağlı olması gerekmeyen her şey için kullanırım ve şu ana kadar bunun bir kötülüğünü de görmedim. Hatta daha da iyi oluyor benim için. Her yere tek bir instance götürmektense değişkeni static yapıp bütün o olaylardan kurtulmuş oluyorum. (Bir arkadaşım sırf static sözcüğünden nefret ediliyor diye 10 satırda yapılabilecek bir şeyi 1000 satıra kadar uzatmıştı. O günden beri static sözcüğüne olan nefreti kimseden dinlemiyorum.)

Buradaki asıl sorun OOP kullanmaman değil, OOP kullanmayarak sphagetti code yazmış olmandır. Yoksa OOP olmayıp gayet düzenli kod yazabileceğin birçok dil var ve hiç birinde bu tarz bir kod affedilmez. Bu yazdığın koda fazla değil en çok 1 ay sonra baktığında, "bunu kim yazmış ya?" veya "ben burda ne yapmışım atm" gibi sözler sarfedebilirsin. Kendi yazdığın koda vermediğin önem hata yapma payını arttır ve bariz şeyleri gözden kaçırmana sebep olabilir.

Bahsettiğim String olayı tüm Stingleri bir arada toplamana yardımcı olduğu için aradığın bir Stringi anında bulabilmeni ve her Stringi isimlendirdiğin için amacının ne olduğunuda direk görebilmeni sağlar. Ayrıca enum içerisindeki bir setter ile enumın dışarıdan kontrol edilebilmesinide sağlayabilirsin.

Static sözcüğünden nefret eden biri değilim aksine yeri geldiğinde kullanmayı severim fakat kullanacağım zaman "acaba burada static kullanmam bana zarar sağlar mı?" diye 2 defa düşünürüm. Core içerisindeki create metodlarının core içerisinde olması başlı başına bir hata iken birde üstüne static olarak tanımlamışsın, zaten topu topu 3 tane sınıfın var dolayısı ile static kullanmak yerine dependency injection yöntemini kullansan daha iyi bir pratik yapmış olursun.
HashMaplerin static olması hata çünkü onlara direk erişim değil metodlar üzerinden erişim sağlanmalıdır. Mesela HashMap üzerinden bir veri alıp "mahmut" adında bir işlem yapmak yerine; HashMap'in bulunduğu class içerisinde "mahmut" adında bir metod oluşturup, yaptığın "mahmut" işlemini bu metoda yazıp, HashMap'i private a çevirebilirsin. Bu sayede hem HashMap'i farkında olmadan hatalı olarak düzenleme ihtimalin ortadan kalkar, hem de elinde OOP'ye daha yatkın ve daha düzenli bir kod olur.

Umarım bu yazdıklarımı ciddiyetle okur ve dikkate alırsın.
 
Son düzenleme:

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Buradaki asıl sorun OOP kullanmaman değil, OOP kullanmayarak sphagetti code yazmış olmandır. Yoksa OOP olmayıp gayet düzenli kod yazabileceğin birçok dil var ve hiç birinde bu tarz bir kod affedilmez. Bu yazdığın koda fazla değil en çok 1 ay sonra baktığında, "bunu kim yazmış ya?" veya "ben burda ne yapmışım atm" gibi sözler sarfedebilirsin. Kendi yazdığın koda vermediğin önem hata yapma payını arttır ve bariz şeyleri gözden kaçırmana sebep olabilir.

Bahsettiğim String olayı tüm Stingleri bir arada toplamana yardımcı olduğu için aradığın bir Stringi anında bulabilmeni ve her Stringi isimlendirdiğin için amacının ne olduğunuda direk görebilmeni sağlar. Ayrıca enum içerisindeki bir setter ile enumın dışarıdan kontrol edilebilmesinide sağlayabilirsin.

Static sözcüğünden nefret eden biri değilim aksine yeri geldiğinde kullanmayı severim fakat kullanacağım zaman "acaba burada static kullanmam bana zarar sağlar mı?" diye 2 defa düşünürüm. Core içerisindeki create metodlarının core içerisinde olması başlı başına bir hata iken birde üstüne static olarak tanımlamışsın, zaten topu topu 3 tane sınıfın var dolayısı ile static kullanmak yerine dependency injection yöntemini kullansan daha iyi bir pratik yapmış olursun.
HashMaplerin static olması hata çünkü onlara direk erişim değil metodlar üzerinden erişim sağlanmalıdır. Mesela HashMap üzerinden bir veri alıp "mahmut" adında bir işlem yapmak yerine; HashMap'in bulunduğu class içerisinde "mahmut" adında bir metod oluşturup, yaptığın "mahmut" işlemini bu metoda yazıp, HashMap'i private a çevirebilirsin. Bu sayede hem HashMap'i farkında olmadan hatalı olarak düzenleme ihtimalin ortadan kalkar, hem de elinde OOP'ye daha yatkın ve daha düzenli bir kod olur.

Umarım bu yazdıklarımı ciddiyetle okur ve dikkate alırsın.
Programlamaya yeni girişen biri olsam bu dediklerin tabii ki işe yarar şeyler. Ama ben bunları zaten biliyorum. 3. kez söylüyorum: Bu eklentinin bu hafta sonuna yetişmesi gerekliydi ve öyle küçük şeylere dikkat etmedim. String'leri enum'a alıp lang.yml yapmak gibi şeylerle uğraşsaydım bu eklentinin gelecek haftaya sarkma riski olurdu. Elimde zaman olsa tam da şimdiden eklentiyi daha düzenli halde baştan yazıp bu kadar şeyin altından kalkmayı çok isterdim. SNB'nin 3.00.7 versiyonuna bakarsan sizin kod düzeni adı altında bildiğiniz bir sürü şeyi kullandığımı görebilirsin.

Bu eklentiye profesyonelce yazılmış bir nükleer reaktör programıymış gibi bakmaktan vazgeçin lütfen. Bu eklenti dar zamanda, öylesine yazılmış bir şey ve programlama yeteneğimi geliştirmek amacıyla da yazmadım.
 

Whoisthatinblack

Taş Madencisi
Mesajlar
70
En iyi cevaplar
0
Beğeniler
85
Puanları
280
Programlamaya yeni girişen biri olsam bu dediklerin tabii ki işe yarar şeyler. Ama ben bunları zaten biliyorum. 3. kez söylüyorum: Bu eklentinin bu hafta sonuna yetişmesi gerekliydi ve öyle küçük şeylere dikkat etmedim. String'leri enum'a alıp lang.yml yapmak gibi şeylerle uğraşsaydım bu eklentinin gelecek haftaya sarkma riski olurdu. Elimde zaman olsa tam da şimdiden eklentiyi daha düzenli halde baştan yazıp bu kadar şeyin altından kalkmayı çok isterdim. SNB'nin 3.00.7 versiyonuna bakarsan sizin kod düzeni adı altında bildiğiniz bir sürü şeyi kullandığımı görebilirsin.

Bu eklentiye profesyonelce yazılmış bir nükleer reaktör programıymış gibi bakmaktan vazgeçin lütfen. Bu eklenti dar zamanda, öylesine yazılmış bir şey ve programlama yeteneğimi geliştirmek amacıyla da yazmadım.

"(ki bunlarda static kullanmanın herhangi bir yanlışlığını göremiyorum.)"
^^ Bu cümleyi kuran sensin ben değilim. Burada "zamanım yoktu o yüzden acele ettim" dememişsin.

"Gerek olduğunu hiçbir zaman da düşünmedim aslında."
^^ Burada da aynı şey geçerli.

"...kullanmayı fazla sevmiyorum...."
^^ Burasıda aynı mantıkta.

Kısacası bana "zamanım yoktu acele ettim zaten basit bir proje olduğu için özende göstermedim baştan savma iş yaptım" deseydin bende ona göre 2. yorumumu yazardım. Amacımı yanlıış anlamanı istemem, yardıımcı olmaya ve eksiklerini/hatalarını sana göstermeye çalıışıyorum (ne kadar başarabiliyorum orası meçhul). "Ben senden daha iyiyim" veya "hahaha çok rezil kod yazıyo şuna bak" tarzı bir mantıkla bu yorumları yapmıyorum ve yıkıcı değil yapıcı olmaya çalışıyorum.
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
"(ki bunlarda static kullanmanın herhangi bir yanlışlığını göremiyorum.)"
^^ Bu cümleyi kuran sensin ben değilim. Burada "zamanım yoktu o yüzden acele ettim" dememişsin.

"Gerek olduğunu hiçbir zaman da düşünmedim aslında."
^^ Burada da aynı şey geçerli.

"...kullanmayı fazla sevmiyorum...."
^^ Burasıda aynı mantıkta.

Kısacası bana "zamanım yoktu acele ettim zaten basit bir proje olduğu için özende göstermedim baştan savma iş yaptım" deseydin bende ona göre 2. yorumumu yazardım. Amacımı yanlıış anlamanı istemem, yardıımcı olmaya ve eksiklerini/hatalarını sana göstermeye çalıışıyorum (ne kadar başarabiliyorum orası meçhul). "Ben senden daha iyiyim" veya "hahaha çok rezil kod yazıyo şuna bak" tarzı bir mantıkla bu yorumları yapmıyorum ve yıkıcı değil yapıcı olmaya çalışıyorum.
Zamanım olmaması kısmını sadece HashMap'i method ile yapma gibi şeyler için söyledim. Yml'leri static yapmayı daha rahat bulduğumun ve mesajlarını zaten Türkçe yazdığım bir eklentide lang.yml'ye gerek olmadığını düşündüğümün tabii ki arkasındayım. O dediğin cümleyi ilk mesajımda zaten söylediğimi sanıyordum. Çünkü o mesajı yazarken hep aklımda o cümleyi bir yere sıkıştırmak vardı. "Sürekli tekrarladığım uzun işlemlerden" bahsettiğim yerde zamanım olmadığı için öyle hatalar olabileceğini söyledim ve onun yeterli olabileceğini düşündüm.

Burada oturup "şu şöyle daha iyidir", "bunu böyle yapmak daha mantıklı" gibi şeyleri tartışmamıza gerek yok. Sadece dar zamanda eklenti haline dönüştürdüğüm bir skriptin konusu resmen kod düzeni tartışma konusuna döndü. Lütfen artık bu konuda tartışmayalım.
 

java10

kız çava bana kahve yap
Mesajlar
513
En iyi cevaplar
0
Beğeniler
586
Puanları
1,090
Ruh hali
ne tartıştınız aga, crafter oop ye uygun yapmayı biliyorum ama hızlı yapmak istedim diyor sen o şekilde yapmalısın diyorsun tamam okey dediğin yanlış değil ama bunlar crafter zaten bildiğini söylüyor sen sabahtan akşama kadar şöyle yap böyle yap diyebilirsin ama herkes senin gibi kod yazmak zorunda değil, öyle yazsa daha iyi ama arkadaş böyle istemiş böyle tercih etmiş, kimsenin karışmaya hakkı yok bence, sadece yapabileceğin ilk yorumunda ki gibi şöyle yapsan daha iyi demek ve bırakmak gerisi author un işi bu kadar üstünde durulacak bi durum yok, herkes istediği gibi yazar çizer eleştiriyi bi kere yap sonra üsteleme bence arkadaş zaten bildiğini söylüyor.
 

Pledix

Kızıltaş Madencisi
Mesajlar
675
En iyi cevaplar
0
Beğeniler
332
Puanları
560
Laf yapma çay yap.
Daha iyisini yapabiliyorsan sen yap.
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Gelecek versiyonları skript konusundaki gibi tek konuya sıkıştırmayı düşünmüyorum bu arada. Her ne kadar öyle daha düzenli dursa da kimse görmüyor. Ya da belki daha iyi bir fikriniz varsa söyleyin. Ben şimdilik her versiyonu yeni konu olarak açmayı planlıyorum.
 

Üst