You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-while-for/article.md
+50-50Lines changed: 50 additions & 50 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,14 +4,14 @@ Mes dažnai turime pakartoti veiksmus.
4
4
5
5
Pavyzdžiui, įvairių prekių išbraukimas viena paskui kitą iš sąrašo, arba paprasčiausiai to paties kodo paleidimas kiekvienam numeriui nuo 1 iki 10.
6
6
7
-
*Cilkai* (ang. *Loops*) yra būdas pakartoti daug kartų tą patį kodą.
7
+
*Ciklai* (ang. *Loops*) yra būdas pakartoti daug kartų tą patį kodą.
8
8
9
9
## Ciklas "while"
10
10
11
11
Ciklas `while` turi sekančią sintaksę:
12
12
13
13
```js
14
-
while (condition) {
14
+
while (sąlyga) {
15
15
// kodas
16
16
// taip vadinamas "ciklo korpusas" (ang. "loop body")
17
17
}
@@ -31,9 +31,9 @@ while (i < 3) { // parodo 0, tada 1, tada 2
31
31
32
32
Vienas ciklo rinkinio įvykdymas vadinamas *iteracija* (ang. *an iteration*). Ciklas pavyzdyje aukščiau padaro tris iteracijas.
33
33
34
-
Jeigu kodo pavyzdyje viršuje nebūtų `i++`, ciklas (teoriškai) kartotųsi amžinai. Praktiškai, naršyklė suteikia būdų sustabdyti tokį ciklą ir procesas gali būti užbaigtas serverio pusės JavaScript.
34
+
Jeigu kodo pavyzdyje viršuje nebūtų `i++`, ciklas (teoriškai) kartotųsi amžinai. Praktikoje naršyklė suteikia būdų sustabdyti tokį ciklą ir procesas gali būti užbaigtas JavaScript serverio pusėje.
35
35
36
-
Bet kokia išraiška arba kintamasis gali būti ciklo sąlyga, ne tik palyginimas: sąlyga yra įvertinama ir `while` paverčiama į loginį sprendimą.
36
+
Bet kokia išraiška arba kintamasis gali būti ciklo sąlyga, ne tik palyginimas: sąlyga yra įvertinama ir `while`ciklo paverčiama į loginį sprendimą.
37
37
38
38
Pavyzdžiui, trumpesnis būdas parašyti `while (i != 0)` yra `while (i)`:
39
39
@@ -84,7 +84,7 @@ Tokia sintaksė turėtų būti naudojama kai norite, kad ciklo korpusas būtų
84
84
85
85
## Ciklas "for"
86
86
87
-
Ciklas `for` yra kiek sudėtingesnis, bet jis taip pat yra dažniausiai naudojamas ciklas.
87
+
Ciklas `for` yra kiek sudėtingesnis, bet jis tuo pačiu yra dažniausiai naudojamas ciklas.
Išmokime šių dalių reikšmę su pavyzdžiais. Ciklas žemiau paleidžia `alert(i)`dėl`i` nuo `0` iki (bet neįskaitant) `3`:
97
+
Išmokime šių dalių reikšmę su pavyzdžiais. Ciklas žemiau paleidžia `alert(i)`kol`i` yra nuo `0` iki (bet neįskaitant) `3`:
98
98
99
99
```js run
100
100
for (let i =0; i <3; i++) { // parodo 0, tada 1, tada 2
@@ -121,7 +121,7 @@ Pradedamas vykdymas
121
121
→ ...
122
122
```
123
123
124
-
Tai yra, `begin` įvykdomas vieną kartą ir tada jis kartojasi (ang. iterates): po kiekvieno `sąlygos` testo, įvykdomi `korpusas` ir `žingsnis`.
124
+
Tai yra, `begin` įvykdomas vieną kartą ir tada jis kartojasi (ang. iterates): po kiekvieno `sąlygos` testo įvykdomi `korpusas` ir `žingsnis`.
125
125
126
126
Jeigu ciklai jums naujiena, juos geriau suprasti padėtų , jeigu sugrįžtumėte prie pavyzdžio ir žingsnis po žingsnio atkurtumėte kaip jis veikia ant popieriaus lapo.
Čia "skaičiuojantis" (ang. "counter") kintamasis `i` yra deklaruotas tiesiai cikle. Tai vadinama "įterptojo" (ang. "inline") kintamojo deklaracija. Toks kintamasis yra matomas tik ciklo viduje.
144
+
````smart header="Vidinio kintamojo deklaracija"
145
+
Čia "skaičiuojantis" (ang. "counter") kintamasis `i` yra deklaruotas tiesiai cikle. Tai vadinama "vidinio" (ang. "inline") kintamojo deklaracija. Toks kintamasis yra matomas tik ciklo viduje.
146
146
147
147
```js run
148
148
for (*!*let*/!* i = 0; i < 3; i++) {
@@ -160,7 +160,7 @@ for (i = 0; i < 3; i++) { // naudojamas jau egzituojantis kintamasis
160
160
alert(i); // 0, 1, 2
161
161
}
162
162
163
-
alert(i); // 3, matomas, nes deklaruotas už ciklo ribų
163
+
alert(i); // 3, matomas, nes buvo deklaruotas už ciklo ribų
164
164
```
165
165
166
166
````
@@ -202,7 +202,7 @@ for (;;) {
202
202
}
203
203
```
204
204
205
-
Atkreipkite dėmesį, kad du `for` kabliataškiai `;`myra privalomi. Kitu atveju bus sintaksės klaida.
205
+
Atkreipkite dėmesį, kad du `for` kabliataškiai `;`yra privalomi. Kitu atveju bus sintaksės klaida.
206
206
207
207
## Ciklo nutraukimas
208
208
@@ -254,7 +254,7 @@ for (let i = 0; i < 10; i++) {
254
254
Lyginėms `i` vertėms, direktyva `continue` nustoja vykdyti korpusą ir perleidžia kontrolę sekančiai `for` iteracijai (su sekančiu skaičiumi). Tad `alert` yra iškviečiamas tik nelyginėms vertėms.
255
255
256
256
````smart header="Direktyva `continue` sumažina matrioškinį kodą (ang. nesting)"
257
-
Ciklas, kuris parodo nelygines vertes gali atrodyti taip:
257
+
Ciklas, kuris parodo nelygines vertes gali atrodyti ir taip:
258
258
259
259
```js
260
260
for (let i =0; i <10; i++) {
@@ -266,7 +266,7 @@ for (let i = 0; i < 10; i++) {
266
266
}
267
267
```
268
268
269
-
Iš techninės perspektyvos tai yra visiškai identiškas kodas pavyzdžiui aukšąiau. Žinoma, mes galime tiesiog apgobti `if` rinkinį vietoje to, kad naudotume `continue`.
269
+
Iš techninės perspektyvos tai yra visiškai identiškas kodas aukščiau esančiam pavyzdžiui. Žinoma, mes galime tiesiog apgobti `if` rinkinį vietoje to, kad naudotume `continue`.
270
270
271
271
Bet to pašalinis efektas yra papildomas matrioškinis lygis (šaukimas `alert` viduje riestinių skliaustų). O jeigu kodas `if` viduje yra ilgesnis nei kelios eilės, tai apsunkina skaitomumą.
272
272
````
@@ -288,99 +288,99 @@ if (i > 5) {
288
288
289
289
290
290
```js no-beautify
291
-
(i > 5) ? alert(i) : *!*continue*/!*; // continue nėra čią leidžiamas
291
+
(i > 5) ? alert(i) : *!*continue*/!*; // continue nėra leidžiamas
292
292
```
293
293
294
-
...jis nustoja veikti: tai yra sintaksinė klaida.
294
+
...jis nustoja veikti: tai yra sintaksės klaida.
295
295
296
296
Tai tik dar viena priežastis nenaudoti klaustuko operatoriaus `?` vietoje`if`.
297
297
````
298
298
299
299
## Etiketės break/continue
300
300
301
-
Sometimes we need to break out from multiple nested loops at once.
301
+
Kartais mums reikia ištrūkti iš daugybinių matrioškinių ciklų tuo pačiu metu.
302
302
303
-
For example, in the code below we loop over `i`and`j`, prompting for the coordinates `(i, j)`from`(0,0)`to`(2,2)`:
303
+
Pavyzdžiui, kode žemiau mes paleidžiame ciklą per `i`ir`j`, klausdami koordinačių `(i, j)`nuo`(0,0)`iki`(2,2)`:
304
304
305
305
```js run no-beautify
306
306
for (let i =0; i <3; i++) {
307
307
308
308
for (let j =0; j <3; j++) {
309
309
310
-
let input =prompt(`Value at coords (${i},${j})`, '');
310
+
let input =prompt(`Vertė koordinatėse (${i},${j})`, '');
311
311
312
-
//what if we want to exit from here to Done (below)?
312
+
//kas nutinka jeigu norime išeiti šiuo momentu iki Baigta (žemiau)?
313
313
}
314
314
}
315
315
316
-
alert('Done!');
316
+
alert('Baigta!');
317
317
```
318
318
319
-
We need a way to stop the process if the user cancels the input.
319
+
Mums reikia tokio būdo, kuris sustabdytų procesą, jeigu lankytojas atšaukia įvedimą.
320
320
321
-
The ordinary `break`after `input`would only break the inner loop. That's not sufficient--labels, come to the rescue!
321
+
Įprastinis `break`sekantis po `input`sustabdytų tik vidinį ciklą. To neužtenka--į pagalba ateina etiketės!
322
322
323
-
A *label* is an identifier with a colon before a loop:
323
+
*Etikėtė* tai toks identifikatorius su dvitaškiu prieš ciklą:
324
324
```js
325
-
labelName:for (...) {
325
+
etiketėsPavadinimas:for (...) {
326
326
...
327
327
}
328
328
```
329
329
330
-
The`break <labelName>`statement in the loop below breaks out to the label:
330
+
Teiginys`break <etiketėsPavadinimas>`cikle žemiau nutraukia procesą iki etiketės:
331
331
332
332
```js run no-beautify
333
-
*!*outer:*/!*for (let i =0; i <3; i++) {
333
+
*!*išorinis:*/!*for (let i =0; i <3; i++) {
334
334
335
335
for (let j =0; j <3; j++) {
336
336
337
-
let input =prompt(`Value at coords (${i},${j})`, '');
337
+
let input =prompt(`Vertė koordinatėse (${i},${j})`, '');
338
338
339
-
//if an empty string or canceled, then break out of both loops
340
-
if (!input) *!*breakouter*/!*; // (*)
339
+
//jeigu eilutė tuščia arba buvo atšaukta, nutraukti procesą iš abiejų ciklų
340
+
if (!input) *!*breakišorinis*/!*; // (*)
341
341
342
-
//do something with the value...
342
+
//darykite kažką su verte...
343
343
}
344
344
}
345
-
alert('Done!');
345
+
alert('Baigta!');
346
346
```
347
347
348
-
In the code above, `break outer` looks upwards for the label named `outer` and breaks out of that loop.
348
+
Kodas viršuje `break išorinis` suranda viršuje etiketę su pavadinimu `išorinis` ir nutraukia tą ciklą.
349
349
350
-
So the control goes straight from `(*)`to`alert('Done!')`.
350
+
Tad kontrolė pereina tiesiai nuo `(*)`iki`alert('Baigta!')`.
351
351
352
-
We can also move the label onto a separate line:
352
+
Mes taip pat galime perkelti etiketę į atskirą eilę:
353
353
354
354
```js no-beautify
355
-
outer:
355
+
išorinis:
356
356
for (let i =0; i <3; i++) { ... }
357
357
```
358
358
359
-
The`continue`directive can also be used with a label. In this case, code execution jumps to the next iteration of the labeled loop.
359
+
Direktyva`continue`taip pat gali būti naudojama su etiketėmis. Šiuo atveju kodo įvykdymas peršoka prie sekančios ciklo su etikete iteracijos.
360
360
361
-
````warn header="Labels do not allow to \"jump\"anywhere"
362
-
Labels do not allow us to jump into an arbitrary place in the code.
Etiketės negali leisti peršokti į bet kurią arbitrišką kodo vietą.
363
363
364
-
For example, it is impossible to do this:
364
+
Pavyzdžiui tai nėra įmanoma:
365
365
```js
366
-
break label; // doesn't jumps to the label below
366
+
break etiketė; // neperšoka į etiketę žemiau
367
367
368
-
label: for (...)
368
+
etiketė: for (...)
369
369
```
370
370
371
-
A call to `break/continue` is only possible from inside a loop and the label must be somewhere above the directive.
371
+
Šaukimas `break/continue` įmanoma tik iš ciklo vidaus ir etiketė turi būti kažkur virš direktyvos.
372
372
````
373
373
374
-
## Summary
374
+
## Santrauka
375
375
376
-
We covered 3 types of loops:
376
+
Mes aptarėme 3 ciklų tipus:
377
377
378
-
-`while` -- The condition is checked before each iteration.
379
-
-`do..while` -- The condition is checked after each iteration.
380
-
-`for (;;)` -- The condition is checked before each iteration, additional settings available.
378
+
-`while` -- Sąlyga patikrinima prieš kiekvieną iteraciją.
379
+
-`do..while` -- Sąlyga patikrinama po kiekvienos iteracijos.
380
+
-`for (;;)` -- Sąlyga patikrinama prieš kiekvieną iteraciją, įmanomi papildomi nustatymai.
381
381
382
-
To make an "infinite" loop, usually the`while(true)` construct is used. Such a loop, just like any other, can be stopped with the`break` directive.
382
+
Kad padarytume "begalinį" ciklą, naudojamas konstruktas`while(true)`. Toks ciklas, kaip ir bet kuris kitas, gali būti sustabdytas naudojant direktyvą`break`.
383
383
384
-
If we don't want to do anything in the current iteration and would like to forward to the next one, we can use the `continue`directive.
384
+
Jeigu nenorime nieko daryti esamoje iteracijoje, bet norime pereiti prie sekančios, galime naudoti `continue`direktyvą.
385
385
386
-
`break/continue`support labels before the loop. A label is the only way for `break/continue`to escape a nested loop to go to an outer one.
386
+
`break/continue`palaiko etiketes prieš ciklą. Etiketė yra vienintelis kelias tam, kad `break/continue`išeitų iš matrioškinio vidinio ciklo į išorinį.
0 commit comments