9 Ağustos 2012 Perşembe

Disaridan Erisime Kapali Özellikler

Disaridan Erisime Kapali Özellikler

C Tabanli programlama dillerindeki class yapilarinda, methodlarin disarindan erisime açik olup olmadigi belirtilebilir.ECMAScript'in yeni sürümündeki class yapilari da public/private alt method ve degerleri destekler.
Su an kullandigimiz sürümde de public/private özellikler olusturulabiliyor, bunun için fonksiyon bloklarinin etki alanlarindan faydalanilir;
>>> function test(){
var _deger = "merhaba dünya!"; this.degeriGetir = function(){ return _deger;
}
}
Yukaridaki örnekte test adinda bir fonksiyon olusturduk ve biri disaridan erisime kapali, iki deger olusturduk.
>>>test1 = new test();
>>>test1._deger undefined
>>>test1.degeriGetir() "merhaba dünya!"
...

 Bir sonraki yazı Apply

6 Ağustos 2012 Pazartesi

Fonksiyonlar için method ve alt değişken tanımlamak

ECMAScript'te, fonksiyonların her biri diğer dillerde rastladığımız "class"'lara benzer, alt değerler tanımlanabilir ve new operatörüyle klonlanabilir.
Alt değer tanımlamak için, fonksiyonun içindeki "this" değerine erişilir.Alt değerler fonksiyon bloğunun dışında da tanımlanabilir. Bir örnek;
>>> var islemci = function(){
this.aciklama = "merhaba dünya!"
this.toplama = function()
{
return arguments[0]+arguments[1];
}
this.cikarma = function(sonuc)
{
return arguments[0]-arguments[1];
}
}
>>> var islem1 = new islemci();
>>> islem1.toplama(3,5);
8
>>> islem2.cikarma(3,5);
-2
islemci adında, toplama cikarma methodlarını içeren bir fonksiyon yarattık ve ardındaki satırda, islem1 tanıtıcısına yeni bir islemci objesini
atadık.Bu kez, az önce yazdığımız islemci objesinde, prototypeı kullanarak yeni bir alt method yaratalım;
 >>> islemci.prototype.carpma = function(){
return arguments[0]*arguments[1];
}
>>> var islem2 = new islemci();
>>> islem2.carpma(3,5);
15
 prototype Klonlanabilir nesnelerin ortak etki alanına sahip olmasını sağlayan bir değerdir.Eğer prototypeı kullanmadan tanımlama yaparsak, alt
methodu olduğumuz objenin etki alanına yani içerdiği değerlere erişemeyiz.Buna bir örnek verelim:
 >>> islemci.prototype.aciklamayiGoster1 = function(){
return this.aciklama;
}
>>> islemci.aciklamayiGoster2 = function(){
return this.aciklama;
}

 Görevleri islemci objesine ait aciklama değerini döndürmek olan etki alanları farklı, iki tane fonksiyon tanımladık.İlk tanımladığımız fonksiyonu
deneyelim:
 >>> islemci.aciklamayiGoster1()
"merhaba dünya!"
 Gördüğünüz gibi, islemci nesnesine prototype köprüsünden erişti ve içerdiği değerleri aldı.Diğerini deneyelim:
 >>> islemci.aciklamayiGoster2()
undefined
Tanımlanmamış değer döndürdü çünkü etki alanı kendisiydi.sadece kendi içindeki ve window altındaki değerlere ulaşabilirdi.Elbette bu problem
çözümsüz değil, call ve apply methodları fonksiyonların etki alanını belirlememizi sağlar.

...
Bir sonraki konu Dışarıdan Erişime Kapalı Özellikler










1 Ağustos 2012 Çarşamba

Argümanlar

JAVASCRİPT FONKSİYON ARGÜMANLARI

Fonksiyonlar, sadece faaliyet alanlarında erişilebilir durumda olan değerler alabilirler.Bu değerlerin tanıtıcısı, fonksiyon oluşturulurken argüman
tünelinde yazılır.Fakat gönderilen argümanlar için tanıtıcı belirtmek zorunlu değildir, tanıtıcı olsun veya olmasın, fonksiyon içindeki "arguments"
tanıtıcılı değişken argüman tünelindeki tüm verileri saklar.
Diziler, tek tanıtıcının altında veri parçalarını tanıtıcıya ihtiyaç kullanmadan saklamayı sağlayan veri türüdür, örnek olarak herbiri tek başına bir
değer olan birkaç elmayı tutan sepeti düşünelim.Sepeti tutan el, programımızı çalıştıran browser olmalı :) Fonksiyonlardan bir sonraki konu
başlığında dizileri daha detaylı inceleyeceğiz.
Az önce sözünü ettiğim "arguments" değeri, fonksiyonların argüman tünelinden gelen tüm değerleri sıralı olarak saklayan bir dizidir.Tanıtıcısı olsun
veya olmasın, browserlar gönderilen tüm argümanlara erişmemizi sağlar.Bir örnek;

 >>> var argumanlar = function(){
return arguments;
}
>>> argumanlar(3,5);
3,5
>>>

Örnekte "argumanlar" adında, tek işlevi kendisine gelen argümanları geri döndürmek olan bir fonksiyon oluşturduk ve bu fonksiyona gönderdiğimiz
argümanların bize dizi tipinde geri döndüğünü gördük.Toplama örneğini "arguments" dizisinin elemanlarını seçip işlem yaptırarak yeniden ele
alalım:

>>> var toplama = function(){
return arguments[0]+arguments[1];
}
>>> toplama(3,5);
8

Bu örnekte arguments dizisinin ilk iki elemanını, tanıtıcıları olan sıra numaralarıyla seçtik ve toplamlarını bulup geri döndürdük.Dizileri henüz iyice
anlamadığınızı düşünüyorsanız endişelenmeyin, dizileri ayrı bir başlıkta detaylı biçimde inceleyeceğiz.
Fonksiyonların içinde kaç argüman tanımlandığını bulmak içinse, fonksiyon tanıtıcısının alt değişkeni olan .length değeri kullanılır.Örnek olarak,
argüman tünelinde tanımlanan değişkenlerin sayısını gönderen bir fonksiyon yazalım:

>>> function test(arguman1,arguman2){
return test.length;
}
>>> test()
2

 ...
 Bir sonraki konu : Fonksiyonlar için method ve alt değişken tanımlamak




28 Temmuz 2012 Cumartesi

Fonksiyon Parantez Blokları


Fonksiyon tipindeki verilerin çalışmasını incelediğimiz örneklerde parantezlerin sağladığını görüyoruz.Parantezler işlevsel olarak pek çok konuda
fayda sağlasa da, pek çok zaman yazılan kodun daha anlaşılır olması için blok oluşturmada kullanılır.Önce ne gibi işlevlerde kullandığımıza
gözatalım.Birinci örnek matematiksel işlemlerde gruplama yaparken kullanılan parantezler üzerine:
>>> 1+2*3
7
>>> (1+2)*3
9
 İkinci örnek, sayısal değerlerin ondalık kısmıyla methodların karışması problemine parantez çözümü:
>>> 1.toString()
missing ; before statement
[Break on this error] 1.toString()
javascript: with ... (line 1)
>>> 1.0.toString()
"1"
>>> (1).toString()
"1"
Gelelim üçüncü örneğe.Ecmascript'te her fonksiyon bloğu parantezler içine alınabilir.Ve elbette, parantez içine alınmış kod bloğuna çalıştırma
komutu gönderilebilir.Bu yöntem daha sade ve temiz görünen kodlar yazmayı sağlar, çünkü fonksiyonu yazdıktan sonra tanıtıcıyı çağırmaya gerek
duyulmaz.

Klasik yöntemle yazılan bir fonksiyonun çağırma işlemiyle, parantez bloğunun kodlarını karşılaştıralım:
>>> var merhaba = function(){
return "Merhaba"
}
>>> merhaba();
Merhaba
>>> (var merhaba = function(){
alert("Merhaba");
})();
"Merhaba"
İlk örnekte fonksiyonu tanımladık ve ardından tanıtıcısını kullanarak çalıştırdık, ikinci örnekteyse fonksiyonu parantez bloklarının içine alıp
çalıştırdığımız için, tanıtıcıyla çağırma yaptığımız satıra gerek kalmadı.Tahmin edeceğiniz üzere, aslında parantez bloklarını kullanırken tanıtıcı
kullanılmayabilir:
>>> (function(){
alert("Merhaba");
})();
"Merhaba"

...

 Bir sonraki konu Argümanlar

27 Temmuz 2012 Cuma

Fonksiyonlar


Fonksiyonlar
C tabanlı dillerde her iş veya alt iş fonksiyonlar tarafından yürütülür.Fonksiyonların genel kullanım şekli, argüman tünelinden veri gönderip, bilgi
çıkışı beklemektir.Genel yazılışı inceleyelim:
function(argümanlar){ return argüman }
Gönderilen argümanlar herhangi bir türde olabilir, sayı, dizi fonksiyon...Buradaki tek dikkat unsuru argümanların her birine ayrı tanıtıcı
belirlenmesidir.Argümanlar birden fazlaysa birbirlerinden virgülle ayrılmaları gerekir:
(argüman1,argüman2,argüman3...) 
ECMAScript'in kullandığımız sürümünde, argümanlar için PHP veya Python dillerinde olduğu gibi varsayılan değer atanamaz.Değer atanmayan
argümanların tanıtıcıları yine tanımlanır ancak "undefined" türünde olurlar.Argümanlar sadece tanımlandıkları fonksiyonda çalıştırılabilirler.Global
blokta tanımlanan değişkenlere fonksiyonlardan erişilebilir.
Bir fonksiyonda en son, fonksiyondan geriye değer döndürülmesini sağlayan "return" ifadesi çalıştırılır.Eğer bu ifadeden sonra fonksiyonun içeriği
bitmediyse, ECMAScript bu içeriği görmezden gelir.
Fonksiyonlar çeşitli biçimlerde tanımlanabilir, ilk olarak tanıtıcı ve eşit işareti kullanarak klasik biçimde tanımlayalım:
var islem = function(){}
Biraz daha pratik olan diğer yöntemdeyse pek çok programlama dilinden alışık olduğumuz biçimde tanımlıyoruz:
function islem(){}
Örnek olarak argüman tünelinden aldığı iki sayının toplamı geriye döndüren bir fonksiyon tanımlayalım: 
function topla(sayi1,sayi2){
return sayi1+sayi2
}
Bu biçimlerde tanımlamalar genelde tercih edilse de, bazen programın akışına göre şekillenmesi gereken fonksiyon tanımlamaya ihtiyaç
duyulur.Bu durumda tanıtıcıların program çalıştırılmadan önce belirlenmek zorunda olması, pek çok dilde rastladığımız bir kısıtlamadır.Fakat ECMAScript'in Function() nesnesi sayesinde, kod bloğu tanıtıcı string tipinde belirtilerek, programın akışına göre şekillenen fonksiyonlar
tanımlanabilmektedir:
var topla = new Function("sayi1","sayi2","return sayi1+sayi2")
Fonksiyonların atama işlemleri diğer veri türleriyle aynı olsa da, fonksiyona ulaşıp çalıştırma işlemi ayrı biçimdedir.Bir fonksiyonu çalıştırmak için
tanıtıcıyla beraber argüman tüneli kullanılır.Burada argüman tünelinin veri transferi yapıp yapmaması farketmez.Örnek olarak hazırladığımız topla
fonksiyonunu kullanalım:
var sonuc = topla(5,4)
9
"sonuc" değişkeni integer türünde 9 değerini aldı.
Örnekteki topla() fonksiyonunda hem bilgi girişi hem de bilgi çıkışı yapılıyor, şimdi bilgi girişi veya çıkışı yapılmayan bir örneği inceleyelim:
>>> var durum = 'Negatif';
>>> var durumuAyarla = function(){
durum = 'pozitif'
}
Bu örnekteyse programın global bloğunda "durum" adında bir değişken ve "durumuAyarla" adında, "durum" değişkeninin değerini string tipinde
"pozitif" değeriyle değiştiren bir fonksiyon oluşturuluyor.Çalıştırıp deneyelim;
>>> durumuAyarla()
undefined
>>> durum
'pozitif'

...
Bir sonraki konu Parantez Blokları 
 
 
 
 

İleri seviye javascript dersleri başlangıç


Bu dökümanda Javascript'in deneyselliğe dayanan doğasına uygun biçimde, web tabanlı program üretmenizi sağlayacak bilgileri vermeye
çalıştım. Özellikle üstünde durmanız gereken konu olan fonksiyonlarda, kitaplarda yeralmayan ileri teknik ve pratikleri anlattım.
Dökümandan iyi verim almak için, Rainbow9'dan faydalanabilirsiniz. Rainbow9, geçen yıl hazırladığım, javascript deneyleri yapmayı ve
web tabanlı programlar geliştirmeyi sağlayan bir programdır.İsterseniz Firefox'un Firebug eklentisinden de faydalanabilirsiniz.Rainbow9,
Firebug'ın aksine bazı mobil tarayıcılar dahil tüm tarayıcılarda kurulmaya gerek olmadan çalışır.
Rainbow9: http://www.rainbow9.org Firebug: http://www.getfirebug.com
Dökümanı okuyup bitirdikten sonra daha deneysel ve iyi tekniklerle kod yazacağınızı, kod standartınızı geliştireceğinizi umut ediyorum.
Sabır ve gayretlerinizin karşılığını almanız dileğiyle.

İçindekiler;

Giriş
Fonksiyonlar
  Parantez Blokları
  Argümanlar
    Fonksiyonlar İçin Method ve Alt Değişken Tanımlamak
  Apply
  Call
  Prototype
  Caller
  Bölüm Sonu Pratikleri
Diziler
Nesneler
İleri Seviye OOP

22 Ağustos 2011 Pazartesi

Azer koçulu

Azer koçulu


Web siteme hoş geldiniz. Ben Oakland yaşayan ve araçlarını geliştirmek satranç, seyahat oynamak ve doğanın çekim yapmak isteyen bir JavaScript kodlayıcı değilim.

Bu sitede benim bazı projeleri listelemek ve benim son sosyal ağ faaliyetleri sunuyoruz. Teknik detayları merak edenler için, ben Jekyll ile bu web sitesi kurdu.Kaynak kodu burada bulabilirsiniz.