Skip to content

Commit bd3b4d1

Browse files
committed
Translated other/timeouts.
1 parent 4f347b0 commit bd3b4d1

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed

doc/tr/other/timeouts.md

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
### `setTimeout` ve `setInterval`
2+
3+
JavaScript asenkron olduğu için bir `setTimeout` ve `setInterval` kullanarak bir
4+
fonksiyonun ileri bir zamanda çalışmasını sağlamak mümkündür.
5+
6+
> **Not:** Zamanlama fonksiyonları ECMAScript Standartına dahil **değildir**,
7+
> [DOM][1] ile birlikte tanımlanırlar.
8+
9+
function foo() {}
10+
var id = setTimeout(foo, 1000); // 0'dan büyük bir sayı verir
11+
12+
Yukarıdaki örnekte `setTimeout` fonksiyonu çağrıldığında, oluşturulan
13+
zamanlayıcı tanımlayan bir ID sayısı verir ve `foo` fonksiyonu **yaklaşık**
14+
bin milisaniye sonra çalıştırılmak üzere programlanır. `foo` fonksiyonu
15+
tam olarak **bir** kez çağrılacaktır.
16+
17+
Kullanılan JavaScript motorunun zamanlayıcı hassasiyetine bağlı olarak, ve
18+
ayrıca JavaScript tek `thread` ile çalıştığı ve çalışan başka program
19+
parçaları bu tek `thread` 'i bloke edeceği için, `setTimeout` ile belirlenen
20+
erteleme süresinin tam olarak gerçekleşeceği **hiçbir şekilde** garanti
21+
edilemez.
22+
23+
İlk argüman olarak verilen fonksiyon *global nesne* tarafından çağrılacaktır,
24+
yani çağrılan fonksiyonun içinde [`this`](#function.this) bu nesneye işaret
25+
edecektir.
26+
27+
function Foo() {
28+
this.value = 42;
29+
this.method = function() {
30+
// this global nesneye işaret eder
31+
console.log(this.value); // undefined yazar
32+
};
33+
setTimeout(this.method, 500);
34+
}
35+
new Foo();
36+
37+
38+
> **Not:** `setTimeout` fonksiyonunun ilk parametresi bir **fonksiyon nesnesi**
39+
> olduğu için, sık yapılan bir hata `setTimeout(foo(), 1000)` şeklindeki
40+
> kullanımdır, fakat bu şekilde, `foo` fonksiyonu **değil** `foo` fonksiyonunun
41+
> **sonuç değeri** parametre olarak kullanacaktır. Bu kullanım genellikle bir
42+
> hata mesajı üretmez, çünkü fonksiyon `undefined` değerini verdiğinde
43+
> `setTimeout` bir hata **oluşturmayacaktır**.
44+
45+
### `setInterval` ile fonksiyon çağrılarının yığılması
46+
47+
`setTimeout` verilen fonksiyonu bir kez çağırırken, `setInterval` (adından da
48+
anlaşılacağı gibi) verilen fonksiyonu **her** `X` milisaniyede bir çağırır.
49+
Fakat kullanılması önerilmez.
50+
51+
Mevcut program parçası çalışırken zamanlama bloke olduğu halde, `setInterval`
52+
verilen fonksiyonu çağırmaya devam edecektir. Bu da, özellikle küçük aralıklarla
53+
kullanıldığında, fonksiyon çağrılarının istiflenmesine neden olur.
54+
55+
function foo(){
56+
// 1 saniye süren bir işlem
57+
}
58+
setInterval(foo, 100);
59+
60+
Yukarıdaki örnekte `foo` fonksiyonu bir kez çağrılıp bir saniye boyunca bloke
61+
edecektir.
62+
63+
`foo` programı bloke etmişken, `setInterval` fonksiyon çağrılarını zamanlamaya
64+
devam edecektir. `foo` tamamlandığında, çalıştırılmatı bekleyen **on** çağrı
65+
daha olacaktır.
66+
67+
### Bloke eden programlarla başa çıkmak
68+
69+
En kolay ve kontrol edilebilir çözüm, `setTimeout` 'u fonksiyonun içinde
70+
kullanmaktır.
71+
72+
function foo(){
73+
// 1 saniye süren bir işlem
74+
setTimeout(foo, 100);
75+
}
76+
foo();
77+
78+
Bu örnekte hem `setTimeout` çağrısı fonksiyonun kendisi içinde kapsanmış olmakta,
79+
hem de fonksiyon çağrılarının istiflenmesinin önüne geçilerek daha fazla kontrol
80+
sağlanmaktadır. Artık `foo` fonksiyonunun kendisi tekrar çalışmak isteyip
81+
istemediğine karar verebilir.
82+
83+
### Zamanlayıcıları iptal etmek
84+
85+
Zamanlayıcıları iptal etmek için ilgili ID sayıları ile kullanılan zamanlatıcı
86+
fonksiyonuna karşılık gelen `clearTimeout` ve `clearInterval` fonksiyonlarından
87+
biri kullanılır.
88+
89+
var id = setTimeout(foo, 1000);
90+
clearTimeout(id);
91+
92+
### Tüm zamanlayıcıları iptal etmek
93+
94+
Tüm zamanlayıcıları iptal etmenin dahili bir metod olmadığı için, bu amaca
95+
ancak kaba kuvvetle ulaşılabilir.
96+
97+
// "tüm" zamanlayıcıları iptal et
98+
for(var i = 1; i < 1000; i++) {
99+
clearTimeout(i);
100+
}
101+
102+
Bu rastgele seçilmiş sayıdan etkilenmeyen zamanlayıcılar kalabilir; bu yüzden
103+
tüm zamanlayıcı ID'lerinin saklanarak, teker teker iptal edilmeleri tavsiye
104+
olunur.
105+
106+
### `eval` fonksiyonun gizli kullanımı
107+
108+
`setTimeout` ve `setInterval` fonksiyonları ilk parametreleri olarak bir katar
109+
da kabul eder. Bu özellik **asla** kullanılmamalıdır, çünkü bu durumda dahili
110+
olarak `eval` kullanılır.
111+
112+
> **Not:** Zamanlama fonksiyonları ECMAScript Standartında bulunmadığı için,
113+
> bir katar argümanı almaları durumundaki çalışma şekilleri JavaScript motorları
114+
> arasında farklılık gösterebilir. Gerçekten de, Microsoft'un JScript motoru
115+
> `eval` yerine `Function` oluşturucusunu kullanır.
116+
117+
function foo() {
118+
// setTimeOut ile bu fonksiyon çağrılacaktır
119+
}
120+
121+
function bar() {
122+
function foo() {
123+
// bu fonksiyon çağrılmayacaktır
124+
}
125+
setTimeout('foo()', 1000);
126+
}
127+
bar();
128+
129+
Bu durumda `eval` [direkt olarak](#core.eval) çağrılmadığı için, `setTimeout`
130+
fonksiyonuna verilen katar *genel kapsamda* çalıştırılacaktır; bu nedenle,
131+
`bar` fonksiyonu kapsamındaki lokal `foo` değişkenini kullanmayacaktır.
132+
133+
Zamanlama fonksiyonlarına verilen fonksiyona argüman sağlamak için de bir katar
134+
kullanılması tavsiye **edilmez**.
135+
136+
function foo(a, b, c) {}
137+
138+
// ASLA bu şekilde kullanılmamalı
139+
setTimeout('foo(1, 2, 3)', 1000)
140+
141+
// Bunu yerine isimsiz bir fonksiyon kullanın
142+
setTimeout(function() {
143+
foo(a, b, c);
144+
}, 1000)
145+
146+
> **Not:** `setTimeout(foo, 1000, a, b, c)` sentaksının kullanılması da mümkün
147+
> olmasına karşın tavsiye edilmez, çünkü bu kullanım [metodlarla](#function.this)
148+
> birlikte fark edilmesi zor hatalara neden olabilir.
149+
150+
### Sonuç
151+
152+
`setTimeout` veya `setInterval` fonksiyonlarına **asla** bir katar parametre
153+
verilmemelidir. Bu kullanım **çok** kötü bir programa işaret eder. Çağrılan
154+
fonksiyona argümanlar verilmesinin gerektiği durumlarda gerçek çağrıyı içinde
155+
bulunduran bir *isimsiz fonksiyon* kullanılmalıdır.
156+
157+
Ayrıca, `setInterval` fonksiyonu çalışan JavaScript programı tarafından bloke
158+
olmadığı için tercih edilmemelidir.
159+
160+
[1]: http://en.wikipedia.org/wiki/Document_Object_Model
161+

0 commit comments

Comments
 (0)