İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

FONKSİYONA DEĞER GÖNDERME VE DEĞER ALMA

FONKSİYONA DEĞER GÖNDERME VE DEĞER ALMA

Bir fonksiyon ile Javascript programının diğer işlemlerinin ilk ilişkisi fonksiyona bir değer gönderme ve ondan bir değer almaktır. Bir fonksiyon, yaptığı işin sonucu olarak, kendisini göreve çağıran komuta veya fonksiyona kendi adıyla bir değer verebilir.

Bir örnek üzerinde düşünmeye başlayalım. Ziyaretçinizden telefon numarasını yazmasını istiyorsunuz. Ziyaretçi de sayfada bir INPUT kutusuna veya PROMPT diyalog kutusuna telefon numarasını yazıyor. Bu numarayı, sayfada başka bir programda veya bölümde kullanmadan önce, gerçekten doğru yazılıp yazılmadığını irdelemek istiyorsunuz. Ziyaretçinin verdiği telefon numarasını bir fonksiyona havale edebilirsiniz; bu fonksiyon telefon numarası arzu ettiğimiz biçimde yazılmışsa olumlu, yazılmamışsa olumsuz yanıt verebilir. Bütün yapacağımız şey, ziyaretçiden alacağımız bilgiyi, bu fonksiyona argüman olarak geçirmekten ibaret; fonksiyonun sonuç olarak verdiği değer doğru ise işleme devam edeceğiz, değilse ziyaretçiyi uyararak, doğru bilgiyi girmesini isteyeceğiz.

Şimdi düz yazı programınızda şu kodu yazıp, fonksiyon1.htm adıyla kaydedin:

Göster Gizle Kopar Satır Gizle Satır Göster
  1 <HTML>
  2 <HEAD>
  3 <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
  4 <TITLE>Javascript'te Fonksiyon</TITLE>
  5 <SCRIPT LANGUAGE="Javascript1.2">
  6 <!-- Javascript kodunu eski sürüm Browserlardan saklayalim
  7 	// fonksiyonu tanımlayalım:
  8 	function dogruMu(numara)
  9 	{
 10 		var karakter = null
 11 		var durum = true
 12 		if(numara.length != 13)
 13 		{
 14 			durum = false // durum değişkenin değeri değişti
 15 		}
 16 		else
 17 		{
 18 			for(var i = 0; i <= 12; i++) {
 19 				karakter = numara.charAt(i)
 20 				if ( i == 0 && karakter == "(" )
 21 					continue //birinci karakter parantez ise başa dön
 22 				else //değilse devam et
 23 					if( i == 4 && karakter == ")" )
 24 						continue //beşinci karakter parantez ise başa dön
 25 					else //değilse devam et
 26 					if( i == 8 && karakter == "-" )
 27 						continue //dokuzuncu karakter çizgi ise başa dön
 28 					else //değilse devam et
 29 					if( parseInt(karakter,10) >= 0 &&
 30 						parseInt(karakter,10) <= 9 )
 31 						continue //1, 4 ve 9 dışındaki karakter sayı ise devam et
 32 					else //değilse dur
 33 					{
 34 						durum = false //değişkenin değeri değişti
 35 						break //fonksiyon kesildi						
 36 					}
 37 			}
 38 		}
 39 		return(durum) //çağıran işleme durum'un değeri bildirildi
 40 	}
 41 // -->
 42 </SCRIPT>
 43 </HEAD>
 44 <BODY>
 45 <PRE>
 46 <SCRIPT LANGUAGE = "Javascript1.2">
 47 	<!-- Javascript kodunu eski sürüm Browserlardan saklayalim
 48 	// Ziyaretciden telefon numarasını isteyelim
 49 	numara = prompt("Lütfen telefon numaranızı yazınız [(333)111-2222 gibi]", "")
 50 	if(dogruMu(numara))
 51 	{
 52 		document.writeln("Telefon numaranızı verdiğiniz için teşekkür ederiz.")
 53 		document.writeln("Müşteri temsilciniz size ilk fırsatta arayacaktır")
 54 	}
 55 	else
 56 	{
 57 		document.writeln("Numaranızı örnekte görüldüğü şekilde yazmanızı rica ederiz")
 58 	}
 59 	// -->
 60 </SCRIPT>
 61 </PRE>
 62 </BODY>
 63 </HTML>

Bu sayfada, önce "if(dogruMu(numara))" şeklindeki ifadeye dikkat edelim. Javascript, bu noktada "dogruMu" fonksiyonu çağıracak, bunu yaparken de fonksiyona "numara" adı altında bir değer geçirecektir. (Bu değeri, çeşitli şekillerde elde edebiliriz; bir Form nesnesinde INPUT kutusundan alabileceğimiz gibi, burada olduğu gibi PROMPT diyalog kutusuyla da alabiliriz.) Fonksiyondan bütün beklediğimiz "if" sorgulamasına "true" (doğru) veya "false" (yanlış) şeklinde bir karşılık vermesidir. Yukarıda "if" döngüsünü ele alırken, yanıtın doğru olması halinde ilk bölümdeki, yanlış olması halinde "else" bölümündeki komutların uygulandığını görmüştük. Şimdi burada dogruMu() fonksiyondan "true" sonucu dönerse, sayfaya teşekkür mesajı ve bilgi notu iki satır halinde yazılacak; "false" sonucu dönerse, ziyaretçi numarayı doğru yazması için uyarılacaktır. (Bu örnekte program bu noktada kesiliyor, oysa gerçek hayatta bu noktada ziyaretçiye bilgi girme aracının yeniden sunulması gerekir.)

Şimdi fonksiyona dönebiliriz. dogruMu() fonksiyonu, kendisine görev verecek işlemden veya fonksiyondan mutlaka bir argüman verilmesini istiyor. "numara" adıyla işleme sokulacak olan bu argüman, fonksiyon için bir nesnedir. Bu arada fonksiyonumuz kendi işleri için bir değişken oluşturuyor (karakter), ve içine boş değer koyuyor (null); daha sonra kendisinden beklenen değeri içine koyacağı bir değişken oluşturuyor ve içine varsayılan değer olarak "true" kelimesini koyuyor. Aksi kanıtlanmadığı taktirde, fonksiyonu göreve çağıran "if" döngüsüne bu değer bildirilecektir.

Fakat önce fonksiyonun gerçekten kendisine verilen bilgilerin, arzu edilen biçime uygun olup olmadığını sınaması gerekir. Bu bilgiyi tutan "numara" nesnesi, nesne olduğu için bazı özelliklere sahiptir; bu özelliklerden biri de uzunluğudur. Önce bu uzunluğun 13 karakter olup olmadığına bakıyoruz. Ziyaretçi, telefon numarasını yazdığı halde parantezleri veya kesme çizgisini unuttuysa, verdiği bilgilerin uzunluğu 13 karakterden az olacaktır, yani "numara.length" 13 olmayacak, "durum" değişkenin değeri "false" olarak değiştirilecektir. Yok, numaranın karakter sayısı 13 ise, fonksiyonumuz 13 karakteri, bir "for" döngüsü çerçevesinde tek tek irdelemeye başlayacaktır

charAt(i)

Fonksiyonlarda ve diğer tür işlemlerde kullanabileceğimiz bir Javascript kısaltması, "filanca yerdeki karakter" diyebileceğimiz "charAt(i)" ifadesidir. Burada i yerine herhangi bir rakamı yazabilirsiniz. Bu kısaltma ancak sayı ya da alfanümerik değer içeren değişkene veya nesneye uygulanabilir.

Buradaki örneğimizde, Javascript, karakter adını verdiği ve içini boş bıraktığı değişkenin değeri olarak, "numara" nesnesinin o anda, o adımda irdelediği karakterini atamaktadır. Şimdi kendimizi Javascript'in yerine koyalım, ve buradaki "for" döngüsünün birinci adımında ne yapacağımızı belirtelim:

"Hımm.. karakter değişkeninin değeri olarak numara nesnesinin i'nci karakterini atamam isteniyor. Peki i nedir? 0. O halde karakter, nesnenin 0 numaralı ögesi olacaktır. Nedir bu: Açılan parantez. Güzel. O halde, karakter eşittir açılan parantez. Sonra, eğer i değişkeni sıfır ve karakter açılan parantez ise devam etmeliymişim! İkisi de doğru; o halde devam. O da ne? Devam etmem gereken yerde "continue" komutu var. Yani, işi burada kes, "for" döngüsünün başına git ve yeniden başla diyorlar. Peki, hadi en başa dönelim. i'yi bir adet arttıralım, 2 yapalım; 2, 12 olmadığı ve 12'den küçük olduğuna göre devam edelim.."

İkinci adımda Javascript, karakter değişkeninin değeri olarak numara nesnesinin ikinci karakterini atayacak ve, i artık sıfır olmadığı için ilk continue'den geri dönmeyecek ve birinci Else'i izleyen işi yapacaktır. Bu işin ilk şartı i'nin dört olmasıdır. i bu anda 2 olduğuna göre, Javascript bu kez hiç bir "continue"dan geri dönmeyecek ve en sondaki parseInt() işlemlerine ulaşacaktır. Ne zaman 1'nin değeri dört olursa, ikinci if'in ikinci şartı olan dördüncü karakterin kapanan parantez olup olmadığı irdelenecektir. Ziyaretçinin verdiği telefon numarasında dördüncü karakter kapanan parantez değil ise, fonksiyon kesilecek ve durum değişkeninin değeri "false" olacak ve bu değer, fonksiyonu göreve çağıran if döngüsüne bildirilecektir. Fonksiyon aynı sorguyu, dokuzuncu karakterin kesme çizgisi olup olmadığını belirlemek için de yapacaktır.

parseInt(i,n)

Fonksiyona dikkat ederseniz, 0, 4 ve 9'ncu karakterlerdeki açılan ve kapanan parantez ve kesme çizgisi irdelemelerinde başa dönmeyen döngülerde, Javascript en sonda if ile başlayan parseInt() şeklinde bir ifadeyi icra ediyor. Javascript, kendisine alfanümerik olarak verilen bir değişken değerini tamsayı (integer) veya kesirli sayıya (float) çevirebilir. Alfanümerik değerleri tam veya kesirli sayıya çevirmek için, parseInt ve parseFloat ifadelerini kullanırız. (Javascript'in sayı olarak verilen değişkeni alfanümerik değere (string) çevirmesi için kullanılmaya hazır bir metod yoktur; bunun için toplama işlemi içeren bir fonksiyon yazmanız gerekir.) Her iki metotta da, çevirme işleminin 10 tabanlı (decimal), 8 tabanlı (octal) veya 16 tabanlı (hexadecimal) olymasını istediğinizi, çevrilmesini istediğiniz alfanümerik değerden (veya bu değeri temsil eden değişkenin adından) sonra bir virgül koyarak, 10, 8 veya 16 rakamı ile belirtmeniz gerekir.

parseInt() metodu ile bazı çevirme işlemlerine örnek verirsek, parseInt("123456.3333"), 123456 sonucunu verir. Çünkü bu metod kendisine verdiğiniz alfanümerik değerin içinde rakam ile artı ve eksi işaretlerinden başka bir şey gördüğü noktada durur; o noktaya kadar gördüğü unsurları bir tamsayı değişkeni olarak size geri verir.

parseFloat() metoduna da bir örnek verirsek, parseFloat("123456.3333"), 123456.3333 sonucunu verir. Çünkü bu metod kendisine verdiğiniz alfanümerik değerin içinde rakam ile artı ve eksi işaretlerinin yanı sıra nokta işaretinden başka bir şey gördüğü noktada durur; o noktaya kadar gördüğü unsurları bir kesirli sayı değişkeni olarak size geri verir.

Her iki metod da, çevirme işlemini başarıyla yaparlarsa, kendilerini görevlendiren işleme (bizim örnekte bunu bir if döngüsü yapıyor) 1, başarıyla yapamazlarsa 0 değeri döndürürler. Yani, if döngüsü, parsInt() metodu başarılı olursa 1, başarılı olamazsa 0 sonucunu alacaktır. Biliyoruz ki, if açısından 1, true-doğru, 0 ise false-yanlış demektir.

Buradaki örnek kodda, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12 ve 13'ncü karakterler, parseInt() metodu ile sayıya çevriliyor ve elde edilen sayının 0 ile 9 arasında olup olmadığına bakılıyor; sonuç doğru ise döngü bir sonraki karakteri almak üzere başa dönüyor; sonuç yanlış ise döngü o naktada break ile kesiliyor, durum değişkenin değeri "false" yapılıyor ve fonksiyon bu sonucu kendisini görevlendiren işleme teslim ederek, kapanıyor.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır