S.a. Arkadaşlar,
Son dönemlerde Angular'a olan ilgim nedeniyle daha düzenli ilerlemek açısından kursa başlamıştım. Kursu bitirip proje de yapmıştım, fakat üzerinden zaman geçince kursu tekrardan gözden geçirmek istedim. İkinci defa izlediğimde her şeyin daha iyi oturduğunu fark ettim. Daha iyi anladığımı düşündüğüm halde ileride kendime aldığım notları elden geçirip sizinle de paylaşmak istedim. Bu yazıyı hazırlarken Uygar Manduz'un verdiği eğitim sonrası yazının kapsamı genişledi. 3 yazılık bir seri olarak ele almaya karar verdim. 1. yazıda type scripti ele alacağız.
Generics etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Generics etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
27 Ekim 2019 Pazar
31 Temmuz 2018 Salı
Tekrarlanan Kodları Generic Metota Çıkarma (Refactoring)
S.a. Arkadaşlar,
Her ay en az bir blog yazmaya özen gösteriyorum. Şuan yazmaya başladığımda farkettim ki ayın son günü :) Yeni iş , taşınma derken uzun bir süredir yazmak istediğim halde yazmakta zorlanıyordum. Neyse ki bugüne kısmet oldu. Bugün yazacağım konu generic metod ve refactoring ile ilgili. Yazdığım bir kaç action'un (metodun) birbirine benzediğini fark ettim. Onları ortak bir metoda alabilir miyim diye yola çıkarken bir de baktım ki bir yazı olacak bir şey ortaya çıkıvermiş.Ben de bu fırsatı kaçırmak istemedim :)
Her ay en az bir blog yazmaya özen gösteriyorum. Şuan yazmaya başladığımda farkettim ki ayın son günü :) Yeni iş , taşınma derken uzun bir süredir yazmak istediğim halde yazmakta zorlanıyordum. Neyse ki bugüne kısmet oldu. Bugün yazacağım konu generic metod ve refactoring ile ilgili. Yazdığım bir kaç action'un (metodun) birbirine benzediğini fark ettim. Onları ortak bir metoda alabilir miyim diye yola çıkarken bir de baktım ki bir yazı olacak bir şey ortaya çıkıvermiş.Ben de bu fırsatı kaçırmak istemedim :)
25 Ocak 2015 Pazar
Generics-2
S.a. Arkadaşlar,
Bugünkü konumuz genericsler olacak. Daha önce özet maheyetinde bir yazı yazmıştım ama şimdi daha farklı bir özellikleri ile ele alacağız. Birinci yazıya buradan erişebilirsiniz. Bu konuyla ilgili temel bilgileri orada bulabilirsiniz. Burada biraz daha ayrıntılı olarak ele almaya çalışacağız. Belki konuya paldır küldür girmiş gibi olacağız ama yaptığımız örnekler jeneriklerin özellikleri ile ilgili neler yapılıp neler yapılmayacağı ile ilgili gibi düşünün. Şöyle söylememek gerekirse bildiğimiz gibi dizilerde IS-A kavramını kullanmamıza izin veriyordu, fakat jeneriklerde nasıl oluyor diye bir soru aklımıza gelirse ? Bir bakalım hemen nasıl olduğuna ..
class Living {
}
class Animal extends Living{
}
class Dog extends Animal {
}
public class ArrayTestMethod {
public static void main(String[] args) {
Animal[] animalArray = new Animal[5];
Dog[] dogArray = new Dog[5];
Animal[] animalDogArray = new Dog[5];
//burada görüldüğü gibi Dog IS-A Animal
//olduğundan hata olmayacaktır
arrayRules(animalArray);
arrayRules(dogArray);
arrayRules(animalDogArray);
/******************************/
List<Animal> animalList = new ArrayList<Animal>();
List<Dog> dogList = new ArrayList<Dog>();
List<Living> livinglist= new ArrayList<>();
addAnimal(animalList);
addAnimal(dogList);//dikkat
//eğer = extends wildcardsı kullanılmasa
//Dog subclass bile olsa error verecektir
//ama dizilerde böyle bir durum yok
//addAnimal(livinglist);//dikkat ? extends wildcardı
//yerine ? super olsa bu kod çalışacaktır fakat bu sefer de
//dogList çalışmayacaktır. Çünkü Super üst sınıflara izin verirken
//extends ise altı sınıflara izin verir.
}
public static void arrayRules(Animal[] animal) {
System.out.println("test");
}
public static void addAnimal(List<? extends Animal> animalList) {
//burada ise sadece null ekleyebiliriz
animalList.add(null);
//? extends kaldırdığımız zaman
//addAnimal(new Dog()); gibi bir tanımla yapılabilir
}
}
Bugünkü konumuz genericsler olacak. Daha önce özet maheyetinde bir yazı yazmıştım ama şimdi daha farklı bir özellikleri ile ele alacağız. Birinci yazıya buradan erişebilirsiniz. Bu konuyla ilgili temel bilgileri orada bulabilirsiniz. Burada biraz daha ayrıntılı olarak ele almaya çalışacağız. Belki konuya paldır küldür girmiş gibi olacağız ama yaptığımız örnekler jeneriklerin özellikleri ile ilgili neler yapılıp neler yapılmayacağı ile ilgili gibi düşünün. Şöyle söylememek gerekirse bildiğimiz gibi dizilerde IS-A kavramını kullanmamıza izin veriyordu, fakat jeneriklerde nasıl oluyor diye bir soru aklımıza gelirse ? Bir bakalım hemen nasıl olduğuna ..
class Living {
}
class Animal extends Living{
}
class Dog extends Animal {
}
public class ArrayTestMethod {
public static void main(String[] args) {
Animal[] animalArray = new Animal[5];
Dog[] dogArray = new Dog[5];
Animal[] animalDogArray = new Dog[5];
//burada görüldüğü gibi Dog IS-A Animal
//olduğundan hata olmayacaktır
arrayRules(animalArray);
arrayRules(dogArray);
arrayRules(animalDogArray);
/******************************/
List<Animal> animalList = new ArrayList<Animal>();
List<Dog> dogList = new ArrayList<Dog>();
List<Living> livinglist= new ArrayList<>();
addAnimal(animalList);
addAnimal(dogList);//dikkat
//eğer = extends wildcardsı kullanılmasa
//Dog subclass bile olsa error verecektir
//ama dizilerde böyle bir durum yok
//addAnimal(livinglist);//dikkat ? extends wildcardı
//yerine ? super olsa bu kod çalışacaktır fakat bu sefer de
//dogList çalışmayacaktır. Çünkü Super üst sınıflara izin verirken
//extends ise altı sınıflara izin verir.
}
public static void arrayRules(Animal[] animal) {
System.out.println("test");
}
public static void addAnimal(List<? extends Animal> animalList) {
//burada ise sadece null ekleyebiliriz
animalList.add(null);
//? extends kaldırdığımız zaman
//addAnimal(new Dog()); gibi bir tanımla yapılabilir
}
}
Etiketler:
? extends,
? super,
Generics,
Jenerikler,
wildcard
8 Aralık 2014 Pazartesi
Generics
S.a. Arkadaşlar,
Generics kavramı Türkçeye jenerik olarak geçmiştir ve jenerik olarak kullanmayı tercih edeceğim. Çünkü İngilizce kelimeler ek getirildiği zaman saçma şeyler ortaya çıkıyor ama tabi zorunda kaldığımız zamanlar kullanmaya devam ediyoruz. Peki jenerikler javada ne iş yapar. Önce onu açıklayalım. Javada farklı veri tipleri var bildiğiniz gibi. Bu veri tiplerinin hepsinin aynı çatı altına alınması niyetiyle java 5.0 ile jenerik kavramı ortaya çıkmıştır. Peki tam olarak ne işe yarar. Şöyle açıklayalım daha önce her tip için ayrı ayrı objeler tanımlanırken , jenerikler ile tek tanımlama ile veri tipin ne ise ona göre kullanabiliyoruz.
Generics kavramı Türkçeye jenerik olarak geçmiştir ve jenerik olarak kullanmayı tercih edeceğim. Çünkü İngilizce kelimeler ek getirildiği zaman saçma şeyler ortaya çıkıyor ama tabi zorunda kaldığımız zamanlar kullanmaya devam ediyoruz. Peki jenerikler javada ne iş yapar. Önce onu açıklayalım. Javada farklı veri tipleri var bildiğiniz gibi. Bu veri tiplerinin hepsinin aynı çatı altına alınması niyetiyle java 5.0 ile jenerik kavramı ortaya çıkmıştır. Peki tam olarak ne işe yarar. Şöyle açıklayalım daha önce her tip için ayrı ayrı objeler tanımlanırken , jenerikler ile tek tanımlama ile veri tipin ne ise ona göre kullanabiliyoruz.
public static void main(String[]
args) {
ArrayList<Integer> tcNo = new
ArrayList<Integer>();
ArrayList<String> isim = new
ArrayList<String>();
}
Java 5.0’dan önce her tip için böyle bir tanımla
yapıyorduk. Peki bunun ne gibi dezavantıjı vardı. Bir de ona bakalım. Kod
tekrarını önler mesele. Her defasında sizi yukarıdaki gibi tanımlamalardan
kurtarır. Çalışma anında sizi dönüşümlerden (cast) kurtarır. Kodun bakımın
kolaylaştırır.
Dilimiz döndüğünce jeneric nedir , ne avantajları var
, neden kullanılmalıdır sorularına cevap vermeye çalıştık. Şimdi nasıl
kullanıldığını küçük bir örnekle gösterip , makalemizi tamamlayalım.
package jenerikler;
import java.util.ArrayList;
public class Belge<T> { // T harfi dğeişkendir .
// İsterseniz farklı birşey kullanabilir
private ArrayList<T> belge = new ArrayList<>();
//yukarıdaki ile aynı olmalı
public void ekle(T eleman){ //buradaki de aynı olmalı
this.belge.add(eleman);
}
public ArrayList<T> getirArrayList(){
return this.belge;
}
public static void main(String[] args) {
Belge<String> isim = new Belge<String>();
isim.ekle("Malik Masis");
Belge<Long> tcNo = new Belge<Long>();
tcNo.ekle(12345678998L);
ArrayList<String> isimListe = isim.getirArrayList();
ArrayList<Long> tcListe = tcNo.getirArrayList();
for(int i = 0; i < isimListe.size(); i++){
System.out.println(isimListe.get(i) + " -> " + tcListe.get(i));//ekranda göster
} //for
} //main
} //class
Kaynakça
Kaydol:
Kayıtlar (Atom)