| Üye olun RSS

Object Oriented Javascript

Temmuz 17th, 2010 | No Comments | Posted in javascript

Günümüz web uygulamalarının geliştirme diline artık html demek yeterli olmuyor. Herhangi  bir web sitesi için bile  javascript kullanımı kaçınılmaz olmaya başladı. Internetin devleri de javascript üzerine müthiş yatırımlar yapmaya başladılar.

HTML5′in de getirdiği yenilikler sayesinde bir masaüstü programı deneyimini javascript ile karşılamak artık neredeyse mümkün hale geldi. Ayrıca birçok mobil platform da javascript ile mobil uygulamalar geliştirmeye olanak sağlamaya başladı. Hepsinden önemlisi, yakında browser tabanlı işletim sistemleri hayatımıza girdiğinde, kaliteli uygulama ihtiyacını bu dile hakim olanlar sağlayabilecek.

Javascript, her ne kadar isminin içinde script geçiyor olsa da artık varlığını ve geleceğini kanıtlamış önemli bir dil durumunda.

Bazen sitelerin source’una bakıp yazılan javascript kodunu incelediğimde, yeteneklerine rağmen kendisine gerekli özenin gösterilmediği bir kenar mahalle çocuğu izlenimi yaratıyor bende.

Web siteleri için belki uzmanlaşmış bir javascript bilgisine ihtiyaç duyulmuyor ama kopleks bir web uygulaması geliştirilecekse kodun kalitesi önem kazanıyor. Kodun kalitesi ise açıkçası o dile olan hakimiyete göre değişiyor.

Ana konuya geri dönersek, Javascript yapısal bir dil gibi görünmekle beraber istenirse objeye dayalı programlamaya da olanak veriyor. Ben de javascript objeleri ve yetenekleri ile ilgili bir kaç örnek ve bilgi vermek üzere aşağıdaki yazıyı hazırladım.

Javascript Objesinin Özellikleri

  • field (property) ve method’lardan oluşmakta.
  • constructor içerebilmekte.
  • method veya field’ları override edilebilmekte.
  • objeleri extend edilebilmektedir.

Array,String,Number,Boolean gibi objeler native olarak kullanabildiğimiz javascript objeleridir. Kullanımı ise şu şekildedir:

text = new String("Merhaba"); //Obje yaratma
i = text.indexOf("h); //Method çağırma
len = text.length;  //Field okuma

Kendi javascript objemizi nasıl tanımlayabiliriz.
Üç adet yöntem kullanılabiliyor.

Bir tanesi JSON formatı, örnek vermek gerekirse:

var StaticPeople = {
		name : "Erkan",
		setName : function(name){this.name=name},
		getName : function(){return this.name}
	};

Bu bir static objedir. Görüldüğü üzere her method bir fonksiyon olarak tanımlıdır. Fieldları okuyabilir ve değiştirebilirsiniz:

alert(StaticPeople.name);
StaticPeople.setName("sezer");
alert(StaticPeople.getName());

İkinci obje yaratma yöntemi ise Object objesini extend etmektir. Örnek vermek gerekirse:

var StaticPeople2 = new Object();
StaticPeople2.name = "Erkan";
StaticPeople2.getName = function() {return this.name;}
StaticPeople2.setName = function(name) {this.name=name;}

Bu da bir static objedir. Burdaki Kullanımı JSON ile aynıdır.


Peki static olmayan javascript objesine ihtiyacımız varsa ki bu da üçüncü yöntem oluyor:

function People(name) {
	this.name = name;
	this.getName = function() {return this.name;}
	this.setName = function(name) {this.name=name;}
}

Aslında yaptığımız basit bir fonksiyon tanımı gibi görünüyor ama aslında burada bir obje tanımı yaptık, bir constructor tanımı yaptık, objeye bir field, iki de method tanımladık. Kullanımı ise şu şekilde:

people = new People("Erkan");
alert(people.getName());
people.setName("Sezer");
alert(people.getName());
 
people2 = new People();
alert(people2.getName());
people2.setName("Sezer");
alert(people2.getName());

Burada görüldüğü üzere iki farklı constructor kullanılmasına rağmen sadece bir constructor tanımladık.


Not:

  • Aynı isimde (constructor parametreleri farklı da olsa) birden fazla obje tanımı yapamıyoruz.
  • Javascript objelerinin tüm field ve method’ları public’tir. Tanımladığınız objenin tüm field ve method’ları erişime açıktır.

Bir javascript objesine field ve method ekleme.
People objesini ilk tanımladığımızda name adınde bir field’ı ve bunun setter ile getter’ı vardı. Bu objeye surname ve onun setter/getter’ını eklemek istiyoruz, yazacağımız kod:

People.prototype.surname;
People.prototype.setSurname = function(surname){this.surname=surname;}
People.prototype.getSurname = function(){return this.surname;}

Burada kendi yarattığımız objemizi dinamik olarak extend etmiş olduk. Eğer static bir objeye field ve method eklenecekse:

StaticPeople.surname;
StaticPeople.setSurname = function(surname){this.surname=surname;}
StaticPeople.getSurname = function(){return this.surname;}

Bir javascript objesini extend etme.
Yeni bir obje (sub class) tanımı yapıp mevcut bir objeyi’ı (super class) extend edebiliyoruz. Mesela yukarıda tanımladığımız People objesini extend eden bir Customer objesi tanımı yapalım:

function Customer(){
	this.inheritFrom = People;
	this.inheritFrom();
	this.customerId;
	this.getCustomerId=function(){return this.customerId;}
	this.setCustomerId=function(customerId){this.customerId=customerId;}
}

Son olarak Javascript’in native Objelerine de dinamik olarak method ve field edilebildiğinden ve methodlarının override edilebildiğinden bahsetmek istiyorum.

String objesine Method ekleme:
Mesela bir string’e alert adında bir method ekleyelim:

String.prototype.alert = function () {alert(this)};
var mesaj = "Bu bir mesajdir..";
mesaj.alert();

String objesinin bir methodunu Override etme:
Bu örnekte de string’in indexOf methodunu override ediyoruz:

String.prototype.indexOf = function () {return "yedi"};
var mesaj = "Bu bir mesajdir..";
alert(mesaj.indexOf("m"));

Yeniden merhaba

Şubat 24th, 2009 | 1 Comment | Posted in android, cep

Uzunca bir aradan sonra kişisel blog‘uma bir girdi yapma şansı buluyorum. Okul yıllarımda pek iyi yönetemediğim boş zamanlarımı bugünlerde mumla arıyorum, bu uzun arada birçok şey yapmak istedim ama bunlardan ancak bazılarını yapabildim bazılarına ise zaman ve fırsat bulamadım..

Uzun bir süre www.iphoneturkey.biz sitesinde yazdım, arkadaşlarla beraber burada iPhone ve uygulamalarını tanıttık. iPhone için İstanbul Trafik kameralarını gösteren iTrafik ve bir çok rss kaynağını bir araya getirerek oluşturduğumuz Ceprss projelerini yaptık.

iPhone ile ilgili çalışmalara ara verip Anroid işletim sistemi ile ilgilenmeye başladım, Android‘in kısa zamanda çok popüler bir işletim sistemi olabileceğine karar verdim ve deneyim kazanmak için bir uygulama geliştirdim, daha sonra bu uygulamayı Android kullanıcıları ile buluşturabilmek için Android Market için bir hesap açtırdım, hesap sahiplerine Google’ın uygun şartlarda temin ettiği Developer telefonundan sipariş verdim ve bu telefonu kullanmaya başladım. Android işletim sistemi hakkında ve bunu kullanan ilk telefon olan Google’un G1 modeliyle ilgili deneyimlerimi kısa bir süre önce Mobilkasaba sitesinde yazmaya başladım, tabi bunların hepsi hobi olarak gerçekleştirdiğim aktivitelerdi, tüm bunların yanında profesyonel iş hayatımda oldukça yüksek bir tempoyla çalışmaya devam ettim.

Bugün bir blog yazmamın asıl nedeni, Android platformu ile ilgili deneyim kazanmak için geliştirdiğim aScore uygulaması. Android ile ilgili haber ve inceleme yazıları yazan Hollandalı bir site yazarı aScore hakkında bir inceleme yazısı yazmak istediğini belirtip benden bir takım bilgiler istedi, kısa bir süre sonra da inceleme yazısını yayınladılar, daha önce www.androidwiki.com sitesinin yazarı tarafından açılmış aScore sayfasına katkıda bulunma talebi gelmişti. Daha sonra başka yabancı sitelerde de haber ve inceleme yazısı olarak çıkmaya başladı. Uygulama yavaş yavaş ilgi görmeye başlayınca bu uygulamadan kendi blogumda niye hiç bahsetmedim diye sordum kendi kendime.

aScore, futbolseverlerin beğeneceği bir uygulama. Dünya üzerindeki 27 futbol ülkesinin birinci ligleri hakkında hızlıca bilgi alınabileceği bir uygulama. Uygulama sayesinde istediğiniz ülkenin puan durumuna, fiksturüne ve canlı maç sonuçlarına hızlıca ulaşabiliyorsunuz. Uygulama Android destekleyen tüm telefonlarda çalışabilecek, uygulamayı ilk yayınladığım zamanlarda Android işletim sistemini kullanan G1, sadece Amerika’da satılıyordu. Amerika futbola karşı fazla ilgili olmadığı için uygulamayı indiren kişi sayısı çok olmadı ama buna rağmen beğeni oldukça yüksekti. G1 yavaş yavaş Avrupa ülkelerinde de satılmaya başlayınca indirilme sayısı artmaya başladı, yorum ve email sayısı ve ekstra talepler de bununla birlikte artmaya başladı.

Toplam 3 sürüm yayınladım, birincisinde (0.1) sadece 6 Avrupa ligi vardı, ikinci sürümde (1.0) lig sayısını 27′ye yükselttim ve programda bazı iyileştirmeler yaptım. Üçüncü ve son sürüm (1.0.1) ise ufak bir hata giderimi ile ilgiliydi. Dördüncü bir sürüm çıkartıp (1.1) aScore ile ilgili başka geliştirme yapmamayı planlıyorum (tadında bırakmak).

Android ve uygulamaları hakkında Mobilkasaba‘da yazmaya devam edeceğim. Eğer yeni bir proje içerisinde yer alırsam ondan da blogumda bahsetmeyi planlıyorum ayrıca blogumda daha önce yaptığım gibi sevdiğim, beğendiğim uygulamalardan da bahsetmeye devam etmek istiyorum umarım buna vakit bulabilirim, çünkü gerçekten ilgi çekici programlar girdi hayatıma bunları ilk fırsatta tanıtmak isterim mesela wubi,lubi ya da dropbox belki de Microsoft’un SyncToy uygulaması veya bir başka Microsoft yapımı olan Live Mesh, tabi ntlmap’i de bir yerlere sıkıştırmam lazım.

Xobni ile Daha Kullanışlı bir Outlook

Mayıs 6th, 2008 | No Comments | Posted in windows

Xobni‘yi bir süre önce öğrenip denemeye karar verdiğimde sınırlı sayıda beta testçisinin kullanımına açılmıştı. Artık isteyen herkes test sürümünü indirip kullanabilmekte. Bu uygulama Outlook‘ta email arama problemine bir son veriyor. Google‘ın arama algoritmaları ile internet dünyasının bir numarasına oturması elbette tesadüf değil. Giderek artan günlük yaşam trafiğine hayatımıza iyice giren elektronik ortam karmaşası eklenince, bilgiyi ve belgeyi yönetmekte giderek daha çok zorlanıyoruz. Outlook‘un sahip olduğu özellikler gerçekten göz kamaştırıcı ama ne var ki yıllardır email arama organize etme konusunda tatminkar bir performans sergileyemediğini de söylemek lazım.

Xobni, Outlook‘un bu eksikliğini gidermek için ortaya çıkmış ve bence bunu başarmış. Kullanmaya başlayalı kısa bir süre geçmesine rağmen benim için alışkanlık haline gelen bir uygulama oldu. Uygulama Outlook‘a bir eklenti olarak kuruluyor. Kurulumdan hemen sonra kısa sürede emaillerinizi indexleyerek hızlı erişilebilir hale getiriyor. Normal Outlook kullanımınızdan görüntü olarak iyi bir şekilde soyutlanmasına rağmen can alıcı bir entegrasyon sağlanmış. Gelen herhangi bir emaile tıkladığınızda,

  • Emaili gönderenin profilini,
  • Emaili gönderen kişinin attığı email sayısını, sizin o kişiye attığınız email sayısını,
  • Hangi saatlerde mailleştiğinizi,
  • Aranızda geçen tüm emailleşmenin bir listesini,
  • Aranızda geçen emailleşmelere eklenmiş dosyaları

bir arada ve hızlıca görmeniz mümkün. Ayrıca bir arama kutusu sayesinde herhangi bir kişi için arama yapıp aynı bilgilere ulaşabiliyorsunuz. Emailin altında bir imza kullanılmışsa ve burada telefon numarası yer alıyorsa bunu da çözümleyip size gösterebiliyor. Menüde yer alan Xobni başlığında Xobni Analytics seçeneği ile bazı istatisksel bilgilere de erişebiliyorsunuz.