Skip to content

Commit cc35e27

Browse files
jozsefDevstimruffles
jozsefDevs
authored andcommitted
provide hungarian translation
1 parent 9b23235 commit cc35e27

24 files changed

+1960
-1
lines changed

doc/hu/array/constructor.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## Az `Array` konstruktor
2+
3+
Mivel az `Array` konstruktora kétértelműen bánik a paraméterekkel, melegen
4+
ajánlott mindig a tömb literált - `[]` jelölés - használni új tömbök létrehozásakor.
5+
6+
[1, 2, 3]; // Eredmény: [1, 2, 3]
7+
new Array(1, 2, 3); // Eredmény: [1, 2, 3]
8+
9+
[3]; // Eredmény: [3]
10+
new Array(3); // Eredmény: []
11+
new Array('3') // Eredmény: ['3']
12+
13+
Abban az esetben, hogyha ez a konstruktor csak egy `szám` paramétert kap, akkor
14+
visszatérési értékül egy olyan tömböt fog létrehozni amelynek a `length` mezője
15+
akkorára van beállítva, ahogy azt megadtuk az argumentumban. Megjegyzendő hogy
16+
**csak** a `length` tulajdonság lesz ekkor beállítva; az egyes indexek külön-külön
17+
nem lesznek inicializálva.
18+
19+
var arr = new Array(3);
20+
arr[1]; // undefined
21+
1 in arr; // hamis, nincs ilyen index
22+
23+
A tömb hosszának közvetlen állítása amúgy is csak elég kevés esetben
24+
használható értelmesen, mint például alább, hogyha el akarjuk kerülni a
25+
`for ciklus` használatát egy string ismétlésekor.
26+
27+
new Array(count + 1).join(ismetlendoString);
28+
29+
### Összegzésül
30+
31+
Az `Array` konstruktor közvetlen használata erősen kerülendő. A literálok használata
32+
elfogadott inkább, mivel rövidebbek, tisztább a szintaxisuk és olvashatóbb kódot
33+
eredményeznek.
34+

doc/hu/array/general.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## Tömb iteráció és tulajdonságok
2+
3+
Habár a tömbök a JavaScriptben objektumok, nincsen jó ok arra, hogy a [`for in`](#object.forinloop) ciklussal járjuk be őket.
4+
Valójában sokkal több jó ok van arra, hogy **miért ne** így tegyünk.
5+
6+
> **Megjegyzés:** A JS tömbök **nem** *asszociatív tömbök*. A JavaScriptben egyedül
7+
> az [objektumokkal](#object.general) lehet kulcsokat értékekhez rendelni. Ráadásul
8+
> amíg az asszociatív tömbök **megőrzik** a sorrendjüket, az objektumok **nem**.
9+
10+
Mivel a `for in` ciklus a prototípus láncon levő összes tulajdonságon végigmegy,
11+
és mivel az egyetlen út ennek megkerülésére a [`hasOwnProperty`](#object.hasownproperty) használata, így majdnem **hússzor**
12+
lassabb mint egy sima `for` ciklus.
13+
14+
### Iteráció
15+
16+
Annak érdekébern hogy a legjobb teljesítményt érjük el a tömbökön való iteráció során,
17+
a legjobb hogyha a klasszikus `for` ciklust használjuk.
18+
19+
var list = [1, 2, 3, 4, 5, ...... 100000000];
20+
for(var i = 0, l = list.length; i < l; i++) {
21+
console.log(list[i]);
22+
}
23+
24+
Még egy érdekesség van a fenti példában, ami a tömb hosszának cachelését végzi
25+
a `l = list.length` kifejezés használatával.
26+
27+
Habár a `length` tulajdonság mindig magán a tömbön van definiálva, még mindig
28+
lehet egy kis teljesítmény kiesés amiatt hogy minden iterációban újra meg kell
29+
keresni ezt a tulajdonságot. Persze a legújabb JavaScript motorok **talán**
30+
használnak erre optimalizációt, de nem lehet biztosan megmondani hogy ahol a kódunk
31+
futni fog, az egy ilyen motor-e vagy sem.
32+
33+
Valójában, a cachelés kihagyása azt eredményezheti, hogy a ciklusunk csak
34+
**fele olyan gyors** lesz mintha a cachelős megoldást választottuk volna.
35+
36+
### A `length` mező
37+
38+
Míg a `length` mező *getter* függvénye egyszerűen csak visszaadja a tömbben
39+
levő elemek számát, addig a *setter* függvény használható arra (is), hogy
40+
**megcsonkítsuk** a tömbünket.
41+
42+
var foo = [1, 2, 3, 4, 5, 6];
43+
foo.length = 3;
44+
foo; // [1, 2, 3]
45+
46+
foo.length = 6;
47+
foo.push(4);
48+
foo; // [1, 2, 3, undefined, undefined, undefined, 4]
49+
50+
Egy rövidebb hossz alkalmazása csonkítja a tömböt. A nagyobb hossz megadása
51+
értelemszerűen növeli.
52+
53+
### Összegzésül
54+
55+
A megfelelő teljesítmény érdekében, a `for` ciklus használata és a length cachelése
56+
ajánlott. A `for in` ciklus használata a tömbökön a rosszul megírt kód jele, amely
57+
tele lehet hibákkal, és teljesítményben sem jeleskedik.
58+

doc/hu/core/delete.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
## A `delete` Operátor
2+
3+
Röviden, *lehetetlen* globális változókat, függvényeket és olyan dolgokat törölni
4+
JavaScriptben amelyeknek a `DontDelete` attribútuma be van állítva.
5+
6+
### Globális kód és Függvény kód
7+
8+
Amikor egy változó/függvény, globális vagy
9+
[függvény hatókörben](#function.scopes) van definiálva,
10+
akkor az vagy az Aktivációs (Activation) vagy a Globális (Global) objektum egyik mezőjeként
11+
jön létre. Az ilyen mezőknek van egy halom attribútuma, amelyek közül az egyik
12+
a `DontDelete`. A változó és függvény deklarációk a globális vagy függvény kódon
13+
belül mindig `DontDelete` tulajdonságú mezőket hoznak létre, így nem lehet őket
14+
törölni.
15+
16+
// globális változó
17+
var a = 1; // A DontDelete be lett állítva
18+
delete a; // hamis
19+
a; // 1
20+
21+
// függvény:
22+
function f() {} // A DontDelete be lett állítva
23+
delete f; // hamis
24+
typeof f; // "function"
25+
26+
// új értékadással sem megy
27+
f = 1;
28+
delete f; // hamis
29+
f; // 1
30+
31+
### Explicit mezők
32+
33+
Az expliciten beállított mezőket persze normálisan lehet törölni.
34+
35+
// expliciten beállított mező
36+
var obj = {x: 1};
37+
obj.y = 2;
38+
delete obj.x; // igaz
39+
delete obj.y; // igaz
40+
obj.x; // undefined
41+
obj.y; // undefined
42+
43+
44+
A fenti példábna az `obj.x` és `obj.y` törölhető, mivel nincs `DontDelete`
45+
attribútuma egyik mezőnek sem. Ezért működik az alábbi példa is.
46+
47+
// működik, kivéve IE-ben
48+
var GLOBAL_OBJECT = this;
49+
GLOBAL_OBJECT.a = 1;
50+
a === GLOBAL_OBJECT.a; // igaz - egy globális változó
51+
delete GLOBAL_OBJECT.a; // igaz
52+
GLOBAL_OBJECT.a; // undefined
53+
54+
Itt egy trükköt használunk az `a` törlésére. A [`this`](#function.this) itt
55+
a Globális objektumra mutat, és expliciten bezetjük rajta az `a` változót, mint
56+
egy mezőjét, így törölni is tudjuk.
57+
58+
Mint az szokás, a fenti kód egy kicsit bugos IE-ben (legalábbis 6-8-ig).
59+
60+
### Függvény argumentumok és beépített dolgaik
61+
62+
A függvény argumentumok, az [`arguments` objektum](#function.arguments)
63+
és a beépített mezők szintén `DontDelete` tulajdonságúak.
64+
65+
// függvény argumentumok és mezők
66+
(function (x) {
67+
68+
delete arguments; // hamis
69+
typeof arguments; // "object"
70+
71+
delete x; // hamis
72+
x; // 1
73+
74+
function f(){}
75+
delete f.length; // hamis
76+
typeof f.length; // "number"
77+
78+
})(1);
79+
80+
### Vendég (host) objektumok
81+
82+
A `delete` operátor működése megjósolhatatlan a vendég objektumokra. A specifikáció
83+
szerint ezek az objektumok szükség szerint bármilyen viselkedést implementálhatnak.
84+
85+
(A ford.: Vendég objektumok azok az objektumok, amelyek nincsenek konkrétan
86+
meghatározva az ES aktuális verziójú specifikációjában, pl. a window)
87+
88+
### Összegzésképp
89+
90+
A `delete` működése helyenként megjósolhatatlan, így biztonsággal csak olyan
91+
objektumok mezőin használhatjuk amelyeket expliciten mi állítottunk be.

doc/hu/core/eval.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
## Miért Ne Használjuk az `eval`-t
2+
3+
Az `eval` (evil) funkció egy stringbe ágyazott JavaScript kódot futtat a
4+
lokális scopeon belül.
5+
6+
var foo = 1;
7+
function test() {
8+
var foo = 2;
9+
eval('foo = 3');
10+
return foo;
11+
}
12+
test(); // 3
13+
foo; // 1
14+
15+
Viszont az `eval` csak akkor viselkedik így, hogyha expliciten hívjuk meg
16+
*és* a meghívott funkció neve valóban `eval`.
17+
18+
var foo = 1;
19+
function test() {
20+
var foo = 2;
21+
var bar = eval;
22+
bar('foo = 3');
23+
return foo;
24+
}
25+
test(); // 2
26+
foo; // 3
27+
28+
Az `eval` használata kerülendő. A "felhasználása" az esetek 99.9%-ban
29+
**mellőzhető**.
30+
31+
### Az `eval` ezer arca
32+
33+
A `setTimeout` és `setInterval` nevű [timeout függvények](#other.timeouts) is
34+
tudnak úgy működni, hogy első paraméterükként egy stringbe ágyazott kódot várnak.
35+
Ez a string **mindig** a globális hatókörben lesz végrehajtva, mivel az `eval`t
36+
így nem direktben hívjuk meg.
37+
38+
### Biztonsági problémák
39+
40+
Az `eval` azért is veszélyes, mert **bármilyen** JS kódot végrehajt, amit odaadunk
41+
neki. Éppen ezért **sose** használjuk olyan kódok végrehajtására amiknek az eredete
42+
nem megbízható/ismeretlen.
43+
44+
### Összegzésül
45+
46+
Soha ne használjunk `eval`t. Bármilyen kód működése, teljesítménye, ill. biztonsága
47+
megkérdőjelezhető amely használja ezt a nyelvi elemet. Semmilyen megoldás
48+
használata **nem ajánlott** amely első sorban `eval`ra épül. Ekkor egy *jobb
49+
megoldás* szükségeltetik, amely nem függ az `eval`tól.

doc/hu/core/semicolon.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
## Automatic Semicolon Insertion
2+
3+
Bár a JavaScriptnek látszólag C-s szintaxisa van, **mégsem** kötelező benne
4+
kirakni a pontosvesszőket, így (helyenként) kihagyhatóak a forrásból.
5+
(A ford.: hiszen interpretált nyelv lévén nincsenek fordítási hibák, így
6+
nyelvi elemek meglétét sem tudja erőltetni a nyelv)
7+
8+
Itt jön a csel, hogy ennek ellenére a JavaScript csak pontosvesszőkkel
9+
értelmezi megfelelően a beírt kódot. Következésképp, a JS **automatikusan**
10+
illeszti be a pontosvesszőket (megpróbálja kitalálni a gondolataink)
11+
azokra a helyekre, ahol amúgy emiatt értelmezési hibába futna.
12+
13+
var foo = function() {
14+
} // értelmezési hiba, pontosvessző kéne
15+
test()
16+
17+
Az automatikus beillesztés megtörténik, ezután így értelmeződik a kód
18+
19+
var foo = function() {
20+
}; // nincs hiba, mindenki örül
21+
test()
22+
23+
Az automatikus beillesztés (ASI) a JavaScript (egyik) **legnagyobb** design
24+
hibája, mivel igen... *meg tudja* változtatni a kód értelmezését
25+
26+
### Hogyan Működik
27+
28+
Az alábi kódban nincsen pontosvessző, így az értelmező (parser) feladata kitalálni,
29+
hogy hova is illessze be őket.
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+
'hosszú string az argumentumban',
41+
'még még még még még hossszabbbbbbb'
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+
Alább mutatjuk a "kitalálós" játék eredményét.
59+
60+
(function(window, undefined) {
61+
function test(options) {
62+
63+
// Nincs beillesztés, a sorok össze lettek vonva
64+
log('testing!')(options.list || []).forEach(function(i) {
65+
66+
}); // <- beillesztés
67+
68+
options.value.test(
69+
'hosszú string az argumentumban',
70+
'még még még még még hossszabbbbbbb'
71+
); // <- beillesztés
72+
73+
return; // <- beillesztés, eltörik a return kifejezésünk
74+
{ // blokként értelemződik
75+
76+
// név: kifejezés formátumban értelmeződik
77+
foo: function() {}
78+
}; // <- beillesztés
79+
}
80+
window.test = test; // <- beillesztés
81+
82+
// Ezeket a sorokat összeilleszti
83+
})(window)(function(window) {
84+
window.someLibrary = {}; // <- beillesztés
85+
86+
})(window); //<- beillesztés
87+
88+
> **Megjegyzés:** A JavaScript értelmező nem tudja "korrektül" kezelni azokat
89+
> a return kifejezéseket, amelyek után közvetlen új sor áll. Habár ez nem biztos hogy
90+
> szükségszerűen az ASI hibájából történik, azért nem egy túl kellemes mellékhatás.
91+
92+
Az értelmező drasztikusan megváltoztatta a fenti kódot. A legtöbb esetben a
93+
beillesztő **rosszul** tippel.
94+
95+
(A ford.: Semmilyen nyelvben sem jó, hogyha hagyjuk hogy a gép találja ki mit
96+
szerettünk volna írni. Néma gyereknek az anyja sem érti a kódját ugye)
97+
98+
### Kezdő Zárójelek
99+
100+
Az értelmező **nem** rak be új pontosvesszőt, hogyha a sor eleje (nyitó) zárójellel kezdődik.
101+
102+
log('testing!')
103+
(options.list || []).forEach(function(i) {})
104+
105+
Ez a kód egy sorként értelmeződik
106+
107+
log('testing!')(options.list || []).forEach(function(i) {})
108+
109+
Az esélyek arra **elég** magasak, hogy a `log` **nem** egy függvényt fog visszatéríteni; így a fenti kód egy `TypeError` típusú hibát fog dobni
110+
`undefined is not a function` üzenettel.
111+
112+
### Összefoglalásképp
113+
114+
Szükségszerűen **soha** ne hagyjuk ki a pontoszvesszőket. Nem árt a kapcsos
115+
zárójeleket is ugyanazon a soron tartani, mint amelyiken az utasítást elkezdtük,
116+
így nem ajánlott az egysoros `if` / `else` kifejezések kedvéért elhagyni
117+
őket. Ezek a szempontok nem csak a kódot (és annak olvashatóságát) tartják
118+
konzisztensen, de megelőzik azt is hogy a JavaScript értelmező valamit rosszul
119+
"találjon ki".

0 commit comments

Comments
 (0)