• Embed Doc
  • Readcast
  • Collections
  • CommentGo Back
Download
 
İ
ndeks
Giri
ş
 Fonksiyonlar 
function
(argümanlar){ 
return
argüman}  (argüman1,argüman2,argüman3...) 
var
islem= 
function
(){} 
function
islem(){} 
function
topla(sayi1,sayi2){ 
return
sayi1+sayi2} 
İ
leri Seviye Javascript
azan:Azer Koçulu 
Giri
ş
 Fonksiyonlar 1.1.1.1.1.1.1.1.Parantez Bloklar 
ı
 Argümanlar Fonksiyonlar 
İ
çin Method ve Alt De
ğ
i
 
ş
ken Tan
ı
mlamakApplyCallPrototypeCaller Bölüm Sonu PratikleriDiziler Nesneler 
İ
leri Seviye OOPBu 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, kitaplardayeralmayan 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
ı
veweb 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.orgFirebug: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,Azer Koçulu <http://azer.kodfabrik.com>
Destekleyen, yard 
ı
m eden, moral verenlere te
ş
ekkür ederim: Annem Nuray Koçulu, Can Çatalyürek, Hakan Bilgin, Muhammed Daud 
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: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: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 atanmayanargü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
ı
ı
labilirler.Globalblokta 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
ı
ı
l
ı
r.E
ğ
er bu ifadeden sonra fonksiyonun içeri
ğ
ibitmediyse, 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:Biraz daha pratik olan di
ğ
er yöntemdeyse pek çok programlamadilinden al
ı
ş
ı
k oldu
ğ
umuz biçimde tan
ı
ml
ı
yoruz:Örnek olarak argüman tünelinden ald
ı
ğ
ı
iki say
ı
n
ı
n toplam
ı
geriye döndüren bir fonksiyon tan
ı
mlayal
ı
m: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
ı
ı
lmadan önce belirlenmekzorunda olmas
ı
, pek çok dilde rastlad
ı
ğ
ı
m
ı
z bir k
ı
s
ı
tlamad
ı
r.Fakat
 
 
var
topla= 
new
 
Function
("sayi1","sayi2","return sayi1+sayi2")  >>> 
var
sonuc=topla(5,4)  9 >>> 
var
durum= 'Negatif';  >>> 
var
durumuAyarla= 
function
(){ durum= 'pozitif'  } >>>durumuAyarla()  undefined>>>durum'pozitif' 
Parantez Bloklar 
ı
 
>>> 1+2*3  7 >>> (1+2)*3  9 >>> 1.toString()  missing;before statement[
Break
on
this
error] 1.toString()  javascript: 
 with
 ... (line1)  >>> 1.0.
toString
() "1" >>> (1).
toString
() "1" >>> 
var
merhaba= 
function
(){ 
return
 "Merhaba" } >>>merhaba(); 
Merhaba
 >>> (
var
merhaba= 
function
(){ alert("Merhaba");  })(); "Merhaba" >>> (
function
(){ alert("Merhaba");  })(); "Merhaba" 
ECMAScript'in Function() nesnesi sayesinde, kod blo
ğ
u tan
ı
t
ı
c
ı
string tipinde belirtilerek, program
ı
n ak
ı
ş
ı
na göre
ş
ekillenen fonksiyonlar tan
ı
mlanabilmektedir: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çintan
ı
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 toplafonksiyonunu kullanal
ı
m:"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: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
ı
ı
p deneyelim;Fonksiyon tipindeki verilerin çal
ı
ş
mas
ı
n
ı
inceledi
ğ
imiz örneklerde parantezlerin sa
ğ
lad
ı
ğ
ı
n
ı
görüyoruz.Parantezler i
ş
levsel olarak pek çok konudafayda 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
ı
zagözatal
ı
m.Birinci örnek matematiksel i
ş
lemlerde gruplama yaparken kullan
ı
lanparantezler üzerine:
İ
kinci örnek, say
ı
sal de
ğ
erlerin ondal
ı
k k
ı
sm
ı
yla methodlar 
ı
n kar 
ı
ş
mas
ı
problemine parantez çözümü: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
ı
rmakomutu 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 gerekduyulmaz.Klasik yöntemle yaz
ı
lan bir fonksiyonun ça
ğ
ı
rma i
ş
lemiyle, parantez blo
ğ
unun kodlar 
ı
n
ı
kar 
ş
ı
la
ş
t
ı
ral
ı
m:
İ
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:
 
Argümanlar 
>>> 
var
argumanlar= 
function
(){ 
return
arguments; } >>>argumanlar(3,5);  3,5  >>> >>> 
var
toplama= 
function
(){ 
return
arguments[0]+arguments[1];  } >>>toplama(3,5);  8 >>> 
function
test(arguman1,arguman2){ 
return
test.length;  } >>>test()  2 
Fonksiyonlar için method ve alt de
ğ
i
ş
ken tan
ı
mlamak
>>> 
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.prototype.carpma= 
function
(){ 
return
arguments[0]*arguments[1];  } >>> 
var
islem2= 
new
islemci(); >>>islem2.carpma(3,5);  15 
Fonksiyonlar, sadece faaliyet alanlar 
ı
nda eri
ş
ilebilir durumda olan de
ğ
erler alabilirler.Bu de
ğ
erlerin tan
ı
t
ı
c
ı
s
ı
, fonksiyon olu
ş
turulurken argümantü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 konuba
ş
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
ı
olsunveya olmas
ı
n, browserlar gönderilen tüm argümanlara eri
ş
memizi sa
ğ
lar.Bir örnek;Ö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
ğ
imizargü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 elealal
ı
m: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 iyiceanlamad
ı
ğ
ı
n
ı
z
ı
ş
ü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 birfonksiyon yazal
ı
m: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, fonksiyonuniçindeki "this" de
ğ
erine eri
ş
ilir.Alt de
ğ
erler fonksiyon blo
ğ
unun d
ı
ş
ı
nda datan
ı
mlanabilir. Bir örnek;
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
objesiniatad
ı
k.Bu kez, az önce yazd
ı
ğ
ı
m
ı
z
islemci
objesinde,
prototype
ı
kullanarak yeni bir alt method yaratal
ı
m;
prototype
Klonlanabilir nesnelerin ortak etki alan
ı
na sahip olmas
ı
n
ı
sa
ğ
layan bir de
ğ
erdir.E
ğ
er 
prototype
ı
kullanmadan tan
ı
mlama yaparsak, altmethodu oldu
ğ
umuz objenin etki alan
ı
na yani içerdi
ğ
i de
ğ
erlereeri
ş
emeyiz.Buna bir örnek verelim:
of 00

Leave a Comment

You must be to leave a comment.
Submit
Characters: ...
You must be to leave a comment.
Submit
Characters: ...