Skip to content

Commit 4b77a28

Browse files
committed
Merge branch 'oozcitak-tr'
2 parents 6253ddb + f98439a commit 4b77a28

25 files changed

+1947
-0
lines changed

doc/tr/array/constructor.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## `Array` Oluşturucusu
2+
3+
`Array` oluşturucusunun parametrelerini nasıl değerlendirdiği belirsiz olduğu
4+
için, yeni diziler oluşturulurken her zaman dizi sabitlerinin (`[]`
5+
notasyonu) kullanılması tavsiye olunur.
6+
7+
[1, 2, 3]; // Sonuç: [1, 2, 3]
8+
new Array(1, 2, 3); // Sonuç: [1, 2, 3]
9+
10+
[3]; // Sonuç: [3]
11+
new Array(3); // Sonuç: []
12+
new Array('3') // Sonuç: ['3']
13+
14+
`Array` oluşturucusuna tek bir argüman verildiğinde, ve bu argümanın türü
15+
`Number` ise, oluşacak *boş* dizinin `length` özelliği argümanın
16+
değerine eşit olacaktır. Bu şekilde oluşturulan bir dizinin **sadece**
17+
`length` özelliği belirlenmiş olup dizi indisleri tanımsız olacaktır.
18+
19+
var arr = new Array(3);
20+
arr[1]; // undefined
21+
1 in arr; // false, indisler atanmadı
22+
23+
Dizinin uzunluğunu bu şekilde önceden belirlemek sadece bir iki durumda
24+
kullanışlıdır. Bunlardan birisi bir döngüye gerek olmadan bir karakter
25+
katarını tekrarlamaktır.
26+
27+
new Array(count + 1).join(stringToRepeat);
28+
29+
### Sonuç
30+
31+
`Array` oluşturucusunun kullanılmasından mümkün olduğu kadar kaçınılmalıdır.
32+
Bunun yerine her zaman dizi sabitleri tercih edilmelidir. Hem daha kısadırlar
33+
hem de daha anlaşılır bir sentaksa sahiptirler; bu nedenle programın
34+
okunabilirliğini de artırırlar.
35+

doc/tr/array/general.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## Dizi İterasyonu ve Özellikleri
2+
3+
Diziler JavaScript nesneleri olmalarına rağmen, iterasyon yapmak için
4+
[`for in`](#object.forinloop) döngüsü kullanmak için bir neden yoktur.
5+
Aslında dizilerde `for in` kullanılmasına **karşı** bazı iyi nedenler
6+
vardır.
7+
8+
> **Not:** JavaScript dizileri *associative* **değildir**. JavaScript ile sadece
9+
> [nesneler](#object.general) ile anahtar-değer ilişkilendirmesi mümkündür.
10+
> Ve *associative* diziler eleman sıralamasını **korurlar** ama, nesneler
11+
> **korumazlar**.
12+
13+
`for in` döngüsü prototip zincirindeki tüm özellikleri dolaştığı için ve bunu
14+
engellemenin tek yolu [`hasOwnProperty`](#object.hasownproperty) kullanmak
15+
olduğu için `for in` döngüsü sıradan bir `for` döngüsünden **yirmi kata kadar**
16+
daha yavaştır.
17+
18+
### İterasyon
19+
20+
Dizilerde iterasyon yaparken en iyi performansı elde etmenin en iyi yolu klasik
21+
`for` döngüsünü kullanmaktır.
22+
23+
var list = [1, 2, 3, 4, 5, ...... 100000000];
24+
for(var i = 0, l = list.length; i < l; i++) {
25+
console.log(list[i]);
26+
}
27+
28+
Yukarıdaki örnekte bir optimizasyon var, o da dizinin uzunluğun iterasyonun
29+
başında `l = list.length` ile saklanmış olması.
30+
31+
`length` özelliği dizinin kendisinde tariflenmiş olmasına rağmen, her adımda
32+
bu özelliği okumanın yine de bir maliyeti vardır. Modern JavaScript motorları
33+
bu tür durumlar için **muhtemelen** optimizasyon yapıyor olsa bile, programın
34+
her zaman modern bir motorda çalışacağından emin olmak mümkün değildir.
35+
36+
Aslında, yukarıdaki örnekteki optimizasyonu uygulamamak döngünün
37+
**iki kat daha** yavaş çalışmasına neden olabilir.
38+
39+
### `length` özelliği
40+
41+
`length` özelliğine değer atanarak diziyi **kısaltmak** için kullanılabilir.
42+
43+
var foo = [1, 2, 3, 4, 5, 6];
44+
foo.length = 3;
45+
foo; // [1, 2, 3]
46+
47+
foo.length = 6;
48+
foo; // [1, 2, 3]
49+
50+
Daha küçük bir uzunluk atanması diziyi kısaltır, fakat daha büyük bir uzunluk
51+
atanmasının dizi üzerinde bir etkisi yoktur.
52+
53+
### Sonuç
54+
55+
En iyi performans için her zaman sıradan `for` döngüsü kullanılmalı ve
56+
`length` özelliği saklanmalıdır. Dizilerde `for in` döngüsünün kullanılmış
57+
olması hatalara meyilli kötü yazılmış bir programa işaret eder.
58+

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 İlavesi
2+
3+
JavaScript sentaksı C'ye benzese de, noktalı virgül kullanılması
4+
zorunlu **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 hemen 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 edilir, 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çinde 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)