Skip to content

Commit d0f7c68

Browse files
committed
translated core
1 parent 62fd141 commit d0f7c68

File tree

3 files changed

+237
-0
lines changed

3 files changed

+237
-0
lines changed

doc/tr/core/eval.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
## Neden `eval` kullanılmamalı
2+
3+
`eval` fonksiyonu bir JavaScript kodunu lokal kapsamda yürütür.
4+
5+
var foo = 1;
6+
function test() {
7+
var foo = 2;
8+
eval('foo = 3');
9+
return foo;
10+
}
11+
test(); // 3
12+
foo; // 1
13+
14+
Fakat `eval` sadece **direkt olarak** çağrıldığında *ve* çağrılan fonksiyonun
15+
adı `eval` ise lokal kapsamda çalışır.
16+
17+
var foo = 1;
18+
function test() {
19+
var foo = 2;
20+
var bar = eval;
21+
bar('foo = 3');
22+
return foo;
23+
}
24+
test(); // 2
25+
foo; // 3
26+
27+
`eval` fonksiyonu **asla** kullanılmamalıdır. Kullanıldığı durumların %99.9'unda
28+
`eval` **kullanılmadan** da istenen sonuç elde edilebilir.
29+
30+
### Gizli `eval`
31+
32+
[Zamanlama fonksiyonları](#other.timeouts) `setTimeout` ve `setInterval`'ın her
33+
ikisinin de ilk argümanları bir karakter katarıdır. Bu durumda `eval` dolaylı
34+
olarak çağrıldığı için bu argüman **her zaman** genel kapsamda yürütülecektir.
35+
36+
### Güvenlik sorunları
37+
38+
`eval` kendisine verilen **her** kodu işlettiği için aynı zamanda bir güvenlik
39+
sorunudur ve **asla** kaynağı bilinmeyen yada güvenilir olmayan karakter
40+
katarları ile kullanılmamalıdır.
41+
42+
### Sonuç
43+
44+
`eval` asla kullanılmamalıdır, kullanan programlar ise doğruluk, performans ve
45+
güvenlik açılarından sorgulanmalıdır. `eval` kullanımı gerekli görülmüşse,
46+
programın tasarımı sorgulanmalı ve **kullanılmamalı**, bunun yerine `eval`
47+
gerektirmeyen *daha iyi bir tasarım* kullanılmalıdır.
48+

doc/tr/core/semicolon.md

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
## Otomatik noktalı virgül ilavesi
2+
3+
JavaScript sentaksı C'ye benzese de, noktalı virgül kullanılması
4+
zurunlu **değildir**.
5+
6+
Fakat JavaScript noktalı virgül kullanmayan bir dil değildir, hatta
7+
programı anlayabilmek için noktalı virgüllere ihtiyaç duyar. Bu yüzden
8+
JavaScript gramer çözümleyicisi eksik bir noktalı virgül yüzünden bir
9+
hata ile karşılaştığında **otomatik olarak** eksik noktalı virgülleri
10+
ekler.
11+
12+
var foo = function() {
13+
} // hata, noktalı virgül gerekiyor
14+
test()
15+
16+
Eklemeden sonra çözümleme tekrarlanır.
17+
18+
var foo = function() {
19+
}; // hata ortadan kalktı, çözümleme devam edebilir
20+
test()
21+
22+
Noktalı virgüllerin bu şekilde otomatik olarak eklenmesi JavaScript'in
23+
**en büyük** tasarım hatalarından biri olarak kabul edilir, çünkü programın
24+
davranışını değiştirmesi *mümkündür*.
25+
26+
### Ekleme nasıl olur
27+
28+
Aşağıdaki örnekte hiç noktalı virgül yok, bu yüzden nereye noktalı virgül
29+
eklenmesi gerektiğini gramer çözümleyicinin karar vermesi gerekiyor.
30+
31+
(function(window, undefined) {
32+
function test(options) {
33+
log('testing!')
34+
35+
(options.list || []).forEach(function(i) {
36+
37+
})
38+
39+
options.value.test(
40+
'long string to pass here',
41+
'and another long string to pass'
42+
)
43+
44+
return
45+
{
46+
foo: function() {}
47+
}
48+
}
49+
window.test = test
50+
51+
})(window)
52+
53+
(function(window) {
54+
window.someLibrary = {}
55+
56+
})(window)
57+
58+
Çözümleyicinin "tahmin" oyununun sonucu aşağıdadır.
59+
60+
(function(window, undefined) {
61+
function test(options) {
62+
63+
// Eklenmedi, satırlar birleştirildi
64+
log('testing!')(options.list || []).forEach(function(i) {
65+
66+
}); // <- eklendi
67+
68+
options.value.test(
69+
'long string to pass here',
70+
'and another long string to pass'
71+
); // <- eklendi
72+
73+
return; // <- eklendi, return ifadesi bozuldu
74+
{ // bir blok olarak değerlendirildi
75+
76+
// bir yer etiketi ve bir ifade
77+
foo: function() {}
78+
}; // <- eklendi
79+
}
80+
window.test = test; // <- eklendi
81+
82+
// Burada da satırlar birleştirildi
83+
})(window)(function(window) {
84+
window.someLibrary = {}; // <- eklendi
85+
86+
})(window); //<- eklendi
87+
88+
> **Not:** JavaScript çözümleyicisi `return` ifadesinden heme sonra satır sonu
89+
> gelmesi durumunu "doğru" değerlendirmez. Bu durum otomatik noktalı virgül
90+
> eklenmesinin istenmeyen bir yan etkisidir.
91+
92+
Çözümleyici yukarıdaki program parçasının davranışını büyük ölçüde değiştirdi,
93+
belirli durumlarda da grameri değerlendirirken **yanlış** kararlar verdi.
94+
95+
### Satır başındaki parantezler
96+
97+
Bir satırın parantez ile başlaması durumunda, çözümleyici noktalı virgül
98+
**eklemez**.
99+
100+
log('testing!')
101+
(options.list || []).forEach(function(i) {})
102+
103+
Yukarıdaki program parçası aşağıdaki tek satıra dönüşür.
104+
105+
log('testing!')(options.list || []).forEach(function(i) {})
106+
107+
**Büyük** ihtimalle yukarıdaki `log` bir fonksiyon **döndürmüyordur**;
108+
bu nedenle, yukarıdaki satır `undefined is not a function` hata mesajı ile bir
109+
`TypeError` oluştumasına neden olacaktır.
110+
111+
### Sonuç
112+
113+
Noktalı virgüllerin **hiç bir zaman** ihmal edilmemesi tavsiye olunur, ayrıca
114+
ayraçların kendilerinden önceki ifade ile aynı satırda tutulması ve tek satırlık
115+
`if` ve `else` ifadelerinde bile ayraçların ihmal edilmemesi önerilir. Her iki
116+
önlem de hem programın tutarlılığını artıracak, hem de JavaScript
117+
çözümleyicisinin programın davranışını değiştirmesini engelleyecektir.
118+

doc/tr/core/undefined.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
## `undefined` ve `null`
2+
3+
JavaScript'te `tanımsız` anlamına gelen iki değer vardır, ve bunlardan
4+
`undefined` daha kullanışlıdır.
5+
6+
### `undefined` değeri
7+
8+
`undefined` bir değişken türüdür ve tek bir değere sahip olabilir: `undefined`.
9+
10+
JavaScript'te ayrıca değeri `undefined` olan bir de genel kapsam değişkeni
11+
tanımlanmıştır ve bu değişkenin adı da `undefined`'dır. Fakat bu değişken
12+
bir sabit yada dilin anahtar kelimelerinden biri **değildir**. Yani bu
13+
değişkenin *değeri* kolayca değiştirilebilir.
14+
15+
> **ES5 Notu:** ECMAScript 5'e göre mutlak modda `undefined`'ın değeri
16+
> *değiştirilemez*, fakat mesela adı `undefined` olan bir fonksiyon ile
17+
> `undefined` değişkeni gizlenebilir.
18+
19+
`undefined` değerinin verildiği durumlara bazı örnekler:
20+
21+
- Genel kapsamlı `undefined` değişkeninin (değiştirilmedi ise) değeri
22+
- `return` ifadesi içermeyen fonksiyonların verdiği değer
23+
- Bir değer döndürmeyen `return` ifadeleri
24+
- Mevcut olmayan nesne özellikleri
25+
- Değer atanmamış fonksiyon parametreleri
26+
- Değeri `undefined` olarak atanmış değişkenler
27+
28+
### `undefined` değerinin değiştirilmesi durumu
29+
30+
Genel kapsamdaki `undefined` değişkeni asıl `undefined` *değerinin* kopyasını
31+
tuttuğu için, bu değeri değiştirmek `undefined` *değişken türünün* değerini
32+
**değiştirmez**.
33+
34+
Fakat, bir şeyi `undefined` ile karşılaştırmak için önce `undefined`'ın değerini
35+
geri almak gerekir.
36+
37+
Programı `undefined` değişkeninin değiştirilmesi olasılığına karşı korumak için
38+
uygulanan yaygın bir yöntem [isimsiz bir fonksiyona](#function.scopes)
39+
kullanılmayan bir parametre eklemektir.
40+
41+
var undefined = 123;
42+
(function(something, foo, undefined) {
43+
// lokal kapsamda undefined değişkeni
44+
// yine undefined değerine sahip
45+
46+
})('Hello World', 42);
47+
48+
Benzer bir yöntem yine isimsiz fonksiyonun içinde değer atanmamış bir değişken
49+
deklare etmektir.
50+
51+
var undefined = 123;
52+
(function(something, foo) {
53+
var undefined;
54+
...
55+
56+
})('Hello World', 42);
57+
58+
Buradaki tek fark program sıkıştırılırsa ortaya çıkacaktır, eğer fonksiyonun
59+
başka bir yerinde `var` ifadesi kullanılmıyorsa fazladan 4 bayt kullanılmış
60+
olacaktır.
61+
62+
### `null` kullanımı
63+
64+
JavaScript dilinde `undefined` geleneksel *null* yerine kullanılmaktadır, asıl
65+
`null` (hem `null` değişmezi hem de değişken türü) ise kabaca başka bir
66+
veri türüdür.
67+
68+
`null` JavaScript içindeki kapalı olarak kullanılır (mesela prototip zincirinin
69+
sonuna gelindiği `Foo.prototype = null` ile belirtilir), fakat hemen her durumda
70+
bunun yerine `undefined` kullanılabilir.
71+

0 commit comments

Comments
 (0)