Skip to content

Commit 31c5a75

Browse files
committed
Merge Polish translation
2 parents 825ab84 + d2c4c0f commit 31c5a75

28 files changed

+1969
-1
lines changed

doc/language.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"default": "en",
3-
"listed": ["en", "fi", "ru", "zh", "tr"]
3+
"listed": ["en", "fi", "ru", "zh", "tr", "pl"]
44
}
55

doc/pl/array/constructor.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
## Konstruktor `Array`
2+
3+
Zaleca się zawsze korzystać z literału tablicy - notacja `[]` - podczas tworzenia
4+
nowych tablic, ponieważ konstruktor `Array` niejednoznacznie interpretuje
5+
parametry do niego przekazane.
6+
7+
[1, 2, 3]; // Rezultat: [1, 2, 3]
8+
new Array(1, 2, 3); // Rezultat: [1, 2, 3]
9+
10+
[3]; // Rezultat: [3]
11+
new Array(3); // Rezultat: []
12+
new Array('3') // Rezultat: ['3']
13+
14+
W przypadku gdy tylko jeden argument zostanie przekazany do kostruktora `Array` i
15+
ten argument jest typu `Number`, konstruktor zwróci nową *dziwną* tablicę
16+
z ustawioną właściwością `length` na wartość przekazaną jako argument. Należy
17+
zauważyć, że **tylko** właściwość `length` zostanie ustawiona w ten sposób,
18+
rzeczywiste indeksy w tej tablicy nie zostaną zainicjalizowane.
19+
20+
var arr = new Array(3);
21+
arr[1]; // undefined
22+
1 in arr; // zwraca false, indeks nie został ustawiony
23+
24+
Możliwość ustanienia z góry długości tablicy jest użyteczna tylko w kilku
25+
przypadkach, jak powtarzanie ciągu znaków, w którym unika się stosowania
26+
pętli `for`.
27+
28+
// count - ilosc powtorzen
29+
// stringToRepeat - ciąg znaków do powtórzenia
30+
new Array(count + 1).join(stringToRepeat);
31+
32+
### Wnioski
33+
34+
W miare możliwości należy unikać używania konstruktora `Array`. Literały są
35+
zdecydowanie lepszym rozwiązaniem, są krótsze i mają bardziej precyzyjną składnię.
36+
Zwiększają również czytelność kodu.
37+

doc/pl/array/general.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## Iterowanie po tablicach oraz właściwości tablic
2+
3+
Mimo, że tablice w JavaScript są obiektami, nie ma dobrych powodów do używania
4+
[`pętli for in`](#object.forinloop) do iteracji po nich. W rzeczywiści istnieje
5+
wiele dobrych powodów **przeciwko** wykorzystania `for in` na tablicach.
6+
7+
> **Uwaga:** Tablice JavaScriptowe **nie***tablicami asocjacyjnymi*. JavaScript
8+
> posiada tylko [obiekty](#object.general) do mapowania kluczy do wartości. Jednakże
9+
> tablice asocjacyjne **zachowują** porządek, natomiast obiekty **nie zachowują**.
10+
11+
Ponieważ pętla `for in` wylicza wszystkie właściwości, które są wewnątrz
12+
łańcucha prototypów i jedynym sposobem aby wykluczyć te właściwości to użycie
13+
[`hasOwnProperty`](#object.hasownproperty), ale wówczas pętla staje się
14+
**dwadzieście razy** wolniejsza od normalnej pętli `for`.
15+
16+
### Iteracja
17+
18+
W celu osiągnięcia najlepszej wydajności podczas iteracji po tablicach należy
19+
użyć klasycznej pętli `for`.
20+
21+
var list = [1, 2, 3, 4, 5, ...... 100000000];
22+
for(var i = 0, l = list.length; i < l; i++) {
23+
console.log(list[i]);
24+
}
25+
26+
Jest tam jeszcze jeden dodatkowy haczyk w przykładzie powyżej. Jest to zbuforowanie
27+
długości tablicy poprzez `l = list.length`.
28+
29+
Mimo, że właściwość `length` jest zdefiniowana w wewnątrz tablicy, istnieje nadal
30+
dodatkowy koszt na wyszukiwanie tej właściwości przy każdej iteracji w pętli.
31+
Chociaż najnowsze silniki JavaScript **mogą** zastosować optymalizację w tym
32+
przypadku. Nie ma jednak możliwość ustalenia czy kod będzie wykonywany w jednym
33+
z tych nowych silników czy też nie.
34+
35+
W rzeczywistości pomijając buforowanie długości tablicy może spowodować, że pętla
36+
będzie tylko **w połowie tak szybka** jak ta z buforowaniem długości.
37+
38+
### Właściwość `length`
39+
40+
Mimo, że *getter* właściwości `length` po prostu zwraca liczbę elementów, które są
41+
zawarte w tablicy, to *setter* może być użyta do **skracania** tablicy.
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+
Przypisanie mniejszej długości spowoduje skrócenie tablicy, ale zwiększenie wartości
51+
`length` nie ma żadnego wpływu na tablicę.
52+
53+
### Wnioski
54+
55+
Aby uzyskać najlepszą wydajność zaleca się, aby zawsze używać zwykłej pętli `for`
56+
i zbuforowanie właściwości `length`. Korzystanie z pętli `for in` na tablicy jest
57+
znakiem źle napisanego kodu, który jest podatny na błędy i ma słabą wydajność.
58+

doc/pl/core/eval.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
## Dlaczego nie należy używać `eval`
2+
3+
Funkcja `eval` uruchomi podany string jako kod JavaScript w lokalnym zasięgu (scopie).
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+
Niestaty `eval` zostanie wykonana w lokalnym zasięgu tylko jeżeli została wywołana
15+
**bezpośrednio** *i* nazwa wołanej funkcji równa sie `eval`.
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+
Należy unikać stosowania `eval` **o ile to tylko możliwe**. W 99.9% przypadków można
28+
osiągnąć ten sam efekt **nie** używając `eval`.
29+
30+
### `eval` w przebraniu
31+
32+
[Funkcje wykonywane po upływie czasu](#other.timeouts) `setTimeout` i `setInterval`
33+
mogą przyjąć string jako pierwszy argument. String ten zostanie **zawsze** wykonany
34+
w globalnym zasięgu, ponieważ funkcja `eval` zostanie wywołana niebezpośrednio w tym
35+
przypadku.
36+
37+
### Problemy z bezpieczeństwem
38+
39+
Funkcja `eval` jest również problematyczna od strony bezpieczeństwa, ponieważ
40+
wykonuje **każdy** kod, który zostanie do niej przekazany i nie należy **nigdy**
41+
używać jej na stringach nieznanego lub niezaufanego pochodzenia.
42+
43+
### Wnioski
44+
45+
Funkcja `eval` nie powinna być w ogole używana, każdy kod, który ją wykorzystuje
46+
powinien zostać sprawdzony pod względem działania, wydajności i bezpieczeństwa.
47+
W przypadku gdy użycie `eval` jest niezbędne do działania, wówczas taki kod
48+
należy przemyśleć raz jeszcze i *ulepszyć* kod aby nie wymagał użycia `eval`.
49+

doc/pl/core/semicolon.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
## Automatyczne wstawianie średnika
2+
3+
Mimo, że JavaScript ma składnię podobną do języka C, to **nie** wymusza stosowania
4+
średników w kodzie źródłowym. Istnieje możliwość ich pominięcia.
5+
6+
Lecz JavaScript nie jest językiem bez średników, tak na prawdę potrzebuje
7+
średników aby zinterpretować kod źródłowy. Jednakże parser JavaScript
8+
**automatycznie** wstawia średniki o ile napotka błąd parsowania związany z
9+
brakiem średnika.
10+
11+
var foo = function() {
12+
} // błąd parsowania, oczekiwany był w tym miejscu średnik
13+
test()
14+
15+
Parser dodaje średnik, i próbuje jeszcze raz sparsować skrypt.
16+
17+
var foo = function() {
18+
}; // bez błędu parser kontynuuje
19+
test()
20+
21+
Automatyczne wstawianie średników jest uważane za jeden z **największych** błędów
22+
konstrukcji języka, ponieważ *może* ono zachowanie kodu.
23+
24+
### Jak działa wstawianie
25+
26+
Kod poniżej nie ma żadnych średników, więc parser zdecyduje, w których miejscach
27+
je wstawi.
28+
29+
(function(window, undefined) {
30+
function test(options) {
31+
log('testing!')
32+
33+
(options.list || []).forEach(function(i) {
34+
35+
})
36+
37+
options.value.test(
38+
'long string to pass here',
39+
'and another long string to pass'
40+
)
41+
42+
return
43+
{
44+
foo: function() {}
45+
}
46+
}
47+
window.test = test
48+
49+
})(window)
50+
51+
(function(window) {
52+
window.someLibrary = {}
53+
54+
})(window)
55+
56+
Poniżej znajduje się rezultat "zgadywania" parsera.
57+
58+
(function(window, undefined) {
59+
function test(options) {
60+
61+
// Nie wstaniony średnik, linie zostały połączone
62+
log('testing!')(options.list || []).forEach(function(i) {
63+
64+
}); // <- wstawiony
65+
66+
options.value.test(
67+
'long string to pass here',
68+
'and another long string to pass'
69+
); // <- wstawiony
70+
71+
return; // <- wstawiony, psując deklarację return
72+
{ // potraktowane jako definicja bloku
73+
74+
// etykieta oraz pojedyncze wyrażenie
75+
foo: function() {}
76+
}; // <- wstawiony
77+
}
78+
window.test = test; // <- wstawiony
79+
80+
// Kolejna połączona linia
81+
})(window)(function(window) {
82+
window.someLibrary = {}; // <- wstawiony
83+
84+
})(window); //<- wstawiony
85+
86+
> **Uwaga:** Parser JavaScript nie potrafił "odpowiednio" zinterpretować
87+
> deklaracji return, po którje został dodany znak nowej linii. Mimo, że
88+
> niekoniecznie jest to błąd automatycznego wstawiania średników, to może to
89+
> jednak powodować niechciane efekty uboczne
90+
91+
Parser drastycznie zmienił działanie powyższego kodu, w niektórych przypadkach
92+
**zmienił go źle**.
93+
94+
### Nawiasy
95+
96+
W przypadku, gdy w następnej linii znajduje się nawias, parser **nie** wstawi
97+
średnika.
98+
99+
log('testing!')
100+
(options.list || []).forEach(function(i) {})
101+
102+
Ten kod zostanie zmieniony w poniższą jedną linię.
103+
104+
log('testing!')(options.list || []).forEach(function(i) {})
105+
106+
Jest **bardzo** prawdopodobne, że `log` **nie** zwróci fukcji, co za tym idzie
107+
powyższy kod wyrzuci błąd `TypeError` oznajmując, że `undefined is not a
108+
function` - `undefined` nie jest funkcją.
109+
110+
### Wnioski
111+
112+
Zaleca się aby **nigdy** nie pomijać średników, pozostawiać nawias otwierający
113+
w tej samej linii co odpowiadająca mu definicja i nigdy nie pozostawiać deklaracji
114+
`if` / `else` bez nawiasów nawet jeżeli są jednolinijkowe. Wszystkie te uwagi nie
115+
tylko pomagają poprawić spójność kodu, ale również zapobiegają parser JavaScript
116+
przed zmianą działania kod.
117+

doc/pl/core/undefined.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
## `undefined` i `null`
2+
3+
JavaScript ma dwie różne wartości dla `pustych` wartości, bardziej użyteczną
4+
z tych dwóch jest `undefined`.
5+
6+
### Wartość `undefined`
7+
8+
`undefined` jest typem z dokładnie jedną wartością: `undefined`.
9+
10+
Język również definiuje globalną zmienną, która ma wartość `undefined`, zmienna
11+
ta jest nazwana `undefined`. Jednakże jest to zmienna a **nie** stała czy słowo
12+
kluczowe w języku. Oznacza to że możliwe jest nadpisanie *wartości* tej zmiennej.
13+
14+
> Uwaga ES55: `undefined` w ECMAScript 5 **nie będzie już** *nadpisywalna* w trybie
15+
> strict mode, ale jej nazwa może zostać przysłonona przez na przykład funkcję o
16+
> nazwie `undefined`.
17+
18+
Kilka przykładów kiedy wartość `undefined` jest zwracana:
19+
20+
- Dostęp do (niemodyfikowalnej) zmiennej globalnej `undefined`.
21+
- Wyjście z funkcji, która nie ma deklaracji `return`.
22+
- Deklaracja `return`, która nic jawnie nie zwraca.
23+
- Poszukiwanie nieistniejącej właściwości.
24+
- Parametr funkcji, który nie został jawnie przekazany podczas wywołania funkcji
25+
- Wszystko co zostało ustawione na wartość `undefined`
26+
27+
### Obsługa przypadku zmiany wartości `undefined`
28+
29+
Ponieważ globalna zmienna `undeined` tylko zawiera kopię prawdziwej *wartości* typu
30+
`undefined`, przypisanie nowej wartości do tej zmiennej **nie** zmienia wartości
31+
*typu* `undefined`.
32+
33+
Jednak, aby porównać coś do wartości `undefined` potrzebne jest odczytanie wartości
34+
`undefined`.
35+
36+
Aby uchronić swój kod przeciwko możliwemu nadpisaniu zmiennej `undefined`, korzysta
37+
się z powszechnej techniki dodania dodatkowego parametru do
38+
[anonimowego wrappera](#function.scopes), do którego nie zostanie przekazany
39+
argument.
40+
41+
var undefined = 123;
42+
(function(something, foo, undefined) {
43+
// undefined lokalnym zasięgu znowu
44+
// odnosi się do poprawnej wartości
45+
46+
})('Hello World', 42);
47+
48+
Kolejnym sposobem aby osiągnąć ten sam efekt jest użycie deklaracji zmiennej
49+
wewnątrz wrappera.
50+
51+
var undefined = 123;
52+
(function(something, foo) {
53+
var undefined;
54+
...
55+
56+
})('Hello World', 42);
57+
58+
Jedyną różnicą pomięcy tymi sposobami są dodatkowe 4 bajty przeznaczone na słowo
59+
kluczowe `var` i spację po nim.
60+
61+
### Zastosowanie `null`
62+
63+
Podczas gdy `undefined` w kontekście języka jest używany jak *null* w sensie
64+
tradycyjnych języków, to `null` w JavaScript (jako literał i jako typ) jest po
65+
prostu kolejnym typem danych.
66+
67+
Jest wykorzystywany we wnętrzu JavaScript (np. deklaracji końca łańcucha prototypów
68+
poprzez ustawienie `Foo.prototype = null`), ale prawie w każdym przypadku można go
69+
zastąpić przez `undefined`.
70+

0 commit comments

Comments
 (0)