ÐаÑикливание кода
ЯзÑки пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ð±ÑÑÑÑой ÑеализаÑии повÑоÑÑÑÑÐ¸Ñ ÑÑ Ð·Ð°Ð´Ð°Ñ. ÐÑ Ð±Ð°Ð·Ð¾Ð²ÑÑ ÑиÑловÑÑ Ð¾Ð¿ÐµÑаÑий до лÑбой дÑÑгой ÑиÑÑаÑии, когда Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ñ Ð¾Ð¿ÐµÑаÑий, коÑоÑÑе нÑжно вÑполниÑÑ. Ð ÑÑой ÑÑаÑÑе Ð¼Ñ ÑаÑÑмоÑÑим ÑÑÑÑкÑÑÑÑ Ñиклов, доÑÑÑпнÑе в JavaScript, коÑоÑÑе можно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑÑÐ¸Ñ Ñелей.
| ТÑебованиÑ: | ÐазовÑе знаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑной ÑиÑÑÐµÐ¼Ñ Ð¸ базовое понимание HTML и CSS, JavaScript пеÑвÑе Ñаги. |
|---|---|
| ЦелÑ: | ÐонÑÑÑ ÐºÐ°Ðº ÑабоÑаÑÑ ÑÐ¸ÐºÐ»Ñ Ð² JavaScript. |
Ð¦Ð¸ÐºÐ»Ñ Ð² коде
Ð¦Ð¸ÐºÐ»Ñ ÑвлÑÑÑÑÑ Ð²Ð°Ð¶Ð½Ð¾Ð¹ конÑепÑией в пÑогÑаммиÑовании. ÐÑ Ð¸ÑполÑзование оÑновано на повÑоÑении одного и Ñого же, ÑÑо в пÑогÑаммиÑовании назÑваеÑÑÑ Ð¸ÑеÑаÑией.
ÐавайÑе ÑаÑÑмоÑÑим ÑабоÑÑ ÑеÑмеÑа, коÑоÑÑй ÑÐ»ÐµÐ´Ð¸Ñ Ð·Ð° Ñем, ÑÑÐ¾Ð±Ñ Ñ Ð½ÐµÐ³Ð¾ бÑло доÑÑаÑоÑно едÑ, ÑÑÐ¾Ð±Ñ ÐºÐ¾ÑмиÑÑ Ð²ÑÑ ÑÐ²Ð¾Ñ ÑемÑÑ Ð² ÑеÑении недели. Ðго ÑабоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑедÑÑавиÑÑ Ð² виде Ñикла:

Цикл обÑÑно ÑоÑÑавлÑÐµÑ Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко из ÑледÑÑÑÐ¸Ñ ÑÑнкÑий:
- СÑÑÑÑик, коÑоÑÑй иниÑиализиÑÑеÑÑÑ Ñ Ð¾Ð¿ÑеделÑнного знаÑÐµÐ½Ð¸Ñ â наÑалÑной ÑоÑки Ñикла (Ðа ÑиÑÑнке вÑÑе пеÑвÑй ÑÑап: "Ñ Ð¼ÐµÐ½Ñ Ð½ÐµÑ ÐµÐ´Ñ (i have no food)")
- УÑловие вÑÑ Ð¾Ð´Ð° â кÑиÑеÑий, пÑи коÑоÑом Ñикл оÑÑанавливаеÑÑÑ, â обÑÑно наÑÑÑпаеÑ, когда Ñикл доÑÑÐ¸Ð³Ð°ÐµÑ Ð¾Ð¿ÑеделÑнного знаÑениÑ. ÐÑо иллÑÑÑÑиÑÑеÑÑÑ Ð²ÑÑе Ñловами "ÐоÑÑаÑоÑно ли Ñ Ð¼ÐµÐ½Ñ ÐµÐ´Ñ? (Do I have enough food?)". ÐÑедположим, ÑеÑмеÑÑ Ð½Ñжно 10 поÑÑий едÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑокоÑмиÑÑ ÑемÑÑ.
- ÐÑеÑаÑÐ¾Ñ Ð¿Ð¾ÑÑепенно ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑÑÑÑÑик на некоÑоÑое знаÑение на каждом Ñаге Ñикла, пока не доÑÑигнÑÑо ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ Ð¾Ð´Ð°. ÐÑ Ñвно не показали ÑÑо в изобÑажении, но еÑли пÑедположиÑÑ ÑÑо ÑеÑÐ¼ÐµÑ ÑобиÑÐ°ÐµÑ Ð´Ð²Ðµ поÑÑии ÐµÐ´Ñ Ð² ÑаÑ, Ñо поÑле каждого ÑаÑа, колиÑеÑÑво едÑ, коÑоÑое Ñ Ð½ÐµÐ³Ð¾ имееÑÑÑ, ÑвелиÑиваеÑÑÑ Ð½Ð° две поÑÑии, и он пÑовеÑÑÐµÑ Ð´Ð¾ÑÑаÑоÑно ли Ñ Ð½ÐµÐ³Ð¾ ÐµÐ´Ñ ÑейÑаÑ. ÐÑли Ñ Ð½ÐµÐ³Ð¾ ÑобÑалоÑÑ 10 поÑÑий (ÑÑловие вÑÑ Ð¾Ð´Ð°), он Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑановиÑÑ ÑÐ±Ð¾Ñ Ð¸ веÑнÑÑÑÑÑ Ð´Ð¾Ð¼Ð¾Ð¹.
РпÑевдокоде ÑÑо бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ ÑледÑÑÑим обÑазом:
loop(food = 0; foodNeeded = 10) {
if (food = foodNeeded) {
exit loop;
// У Ð½Ð°Ñ Ð´Ð¾ÑÑаÑоÑно едÑ, поÑа домой
} else {
food += 2; // ÐÑоÑÑл ÑаÑ, колиÑеÑÑво ÐµÐ´Ñ ÑвелиÑилоÑÑ Ð½Ð° 2
// пеÑеÑ
од на ÑледÑÑÑÑÑ Ð¸ÑеÑаÑÐ¸Ñ Ñикла.
}
}
Таким обÑазом, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ðµ колиÑеÑÑво ÐµÐ´Ñ ÑÑÑанавливаеÑÑÑ ÑавнÑм 10, а изнаÑалÑно ÑеÑÐ¼ÐµÑ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð½Ð¸ одной поÑÑии, Ñ.е. наÑало Ñавно 0. Ðа каждой иÑеÑаÑии Ñикла пÑовеÑÑем, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ ÑобÑанное колиÑеÑÑво едÑ, Ñ Ñем колиÑеÑÑвом, коÑоÑое ÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾. ÐÑли ÑÑо Ñак, можно вÑйÑи из Ñикла, еÑли неÑ, ÑеÑÐ¼ÐµÑ ÑобиÑÐ°ÐµÑ ÐµÑÑ 2 поÑÑии и Ñнова пеÑÐµÑ Ð¾Ð´Ð¸Ñ Ðº пÑовеÑке.
ÐаÑем ÑÑо нÑжно?
ÐÑак Ð²Ñ ÑазобÑалиÑÑ, как ÑабоÑаÑÑ ÑиклÑ. Ðо, веÑоÑÑно, дÑмаеÑе: "ХоÑоÑо, но как ÑÑо мне Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¸ÑаÑÑ ÐºÐ¾Ð´ на JavaScript". Ðак Ð¼Ñ Ð¿Ð¸Ñали Ñанее, ÑÐ¸ÐºÐ»Ñ Ð¿Ð¾ÑÑоÑнно повÑоÑÑÑÑ Ð¾Ð´Ð½Ð¾ и Ñоже дейÑÑвие, ÑÑо оÑлиÑно Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ Ð±ÑÑÑÑого вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÑоÑÑÑÑÐ¸Ñ ÑÑ Ð·Ð°Ð´Ð°Ñ.
ЧаÑÑо код бÑÐ´ÐµÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ оÑлиÑаÑÑÑÑ Ð½Ð° каждой поÑледÑÑÑей иÑеÑаÑии Ñикла. ÐÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполнÑÑÑ Ð·Ð°Ð´Ð°Ñи, коÑоÑÑе Ð¿Ð¾Ñ Ð¾Ð¶Ð¸, но Ñ Ð½Ð¸Ñ ÐµÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑазлиÑиÑ. ÐапÑимеÑ, еÑли вам нÑжно вÑполниÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑÑиÑлений, немного оÑлиÑаÑÑÐ¸Ñ ÑÑ Ð½Ð° каждой иÑеÑаÑии.
Ðа ÑледÑÑÑем пÑимеÑе попÑобÑем показаÑÑ, поÑÐµÐ¼Ñ ÑÐ¸ÐºÐ»Ñ Ñак полезнÑ. ÐÑедположим Ð¼Ñ Ñ
оÑели наÑиÑоваÑÑ 100 ÑлÑÑайнÑÑ
кÑÑгов на ÑлеменÑе <canvas>. ÐажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ "ÐбновиÑÑ", ÑÑÐ¾Ð±Ñ Ñнова и Ñнова запÑÑкаÑÑ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¸ ÑвидеÑÑ, ÑÑо кÑÑги ÑиÑÑÑÑÑÑ ÑлÑÑайнÑм обÑазом.
Ðам необÑзаÑелÑно понимаÑÑ Ð²Ñе ÑаÑÑи кода, но давайÑе поÑмоÑÑим на меÑÑо, где ÑиÑÑÑÑÑÑ 100 кÑÑгов.
for (var i = 0; i < 100; i++) {
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
}
random(), опиÑÐ°Ð½Ð½Ð°Ñ Ð² коде, возвÑаÑÐ°ÐµÑ ÑлÑÑайное ÑиÑло междÑ0иx-1.WIDTHиHEIGHTâ ÑÑо вÑÑоÑа и ÑиÑина окна бÑаÑзеÑа.
ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½ÑÑÑ Ð¾ÑновнÑÑ Ð¸Ð´ÐµÑ: Ð¼Ñ Ð¸ÑполÑзÑем Ñикл Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка 100 иÑеÑаÑий ÑÑого кода, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· коÑоÑÑÑ ÑиÑÑÐµÑ ÐºÑÑг в ÑлÑÑайном меÑÑе в окне. ÐолиÑеÑÑво кода бÑло Ð±Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм, еÑли Ð±Ñ Ð½Ð°Ð¼ нÑжно бÑло наÑиÑоваÑÑ 10, 100 или 1000 кÑÑгов, поменÑеÑÑÑ Ð»Ð¸ÑÑ Ð¾Ð´Ð½Ð¾ ÑиÑло.
ÐÑли Ð±Ñ Ð¼Ñ Ð½Ðµ иÑполÑзовали ÑиклÑ, нам Ð±Ñ Ð¿ÑиÑлоÑÑ Ð¿Ð¾Ð²ÑоÑиÑÑ ÑледÑÑÑий код, Ð´Ð»Ñ Ð¾ÑÑиÑовки каждого кÑÑга:
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
ÐÑо множеÑÑво лиÑнего кода оÑÐµÐ½Ñ ÑÑложнило Ð±Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ ÐºÐ¾Ð´Ð° в бÑдÑÑем, Ñ.к. еÑли Ð±Ñ Ð²Ð°Ð¼ Ð·Ð°Ñ Ð¾ÑелоÑÑ ÑÑо-Ñо измениÑÑ, в каждой иÑеÑаÑии Ñикла, пÑиÑлоÑÑ Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð²Ñе ÑаÑÑи кода по оÑделÑноÑÑи. РеÑÑ ÑÑо ÑÑложнÑÐµÑ Ð¿Ð¾Ð¸Ñк оÑибок, Ñ.к. еÑли вдÑÑг Ð²Ñ ÑовеÑÑиÑе логиÑеÑкÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¿Ñи опиÑании одной из иÑеÑаÑий, пÑидÑÑÑÑ Ð¿Ð¾ÑÑаÑиÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени на ÐµÑ Ð¿Ð¾Ð¸Ñки.
ÐÑавила запиÑи Ñикла
РаÑÑмоÑÑим некоÑоÑÑе конкÑеÑнÑе конÑÑÑÑкÑии Ñиклов. ÐеÑвÑй ваÑианÑ, коÑоÑÑй Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ ÑаÑе вÑего, ÑÑо Ñикл for. Ðн Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий ÑинÑакÑиÑ:
for (initializer; exit-condition; final-expression) {
// код Ð´Ð»Ñ Ð²ÑполнениÑ
}
ТÑÑ Ð¸Ð¼ÐµÐµÐ¼:
-
ÐлÑÑевое Ñлово for, за коÑоÑÑм ÑледÑÑÑ ÐºÑÑглÑе Ñкобки.
-
РкÑÑглÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ Ñ Ð½Ð°Ñ ÐµÑÑÑ ÑÑи ÑаÑÑи, ÑазделÑннÑе ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой:
- ÐниÑиализаÑÐ¾Ñ â обÑÑно ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑиÑленного Ñипа, коÑоÑÐ°Ñ ÑвелиÑиваеÑÑÑ ÐºÐ°Ð¶Ð´ÑÑ Ð¸ÑеÑаÑиÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑиÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво Ñагов Ñикла. ÐÑ Ñакже назÑÐ²Ð°ÐµÑ ÑÑÑÑÑиком.
- УÑловие вÑÑ Ð¾Ð´Ð° â как ÑпоминалоÑÑ Ñанее, опÑеделÑеÑ, когда Ñикл должен оÑÑановиÑÑÑÑ. ÐбÑÑно ÑÑо вÑÑажение Ñ Ð¾Ð¿ÐµÑаÑоÑом ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿ÑовеÑÑÑÑим, вÑполнено ли ÑÑловие вÑÑ Ð¾Ð´Ð°.
- ÐконÑаÑелÑное вÑÑажение â вÑÑиÑлÑеÑÑÑ (или вÑполнÑеÑÑÑ) каждÑй Ñаз, когда Ñикл пÑÐ¾Ñ Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»Ð½ÑÑ Ð¸ÑеÑаÑиÑ. ÐбÑÑно оно ÑлÑÐ¶Ð¸Ñ Ð´Ð»Ñ ÑвелиÑÐµÐ½Ð¸Ñ (или ÑменÑÑениÑ) пеÑеменной ÑÑÑÑÑика, ÑÑÐ¾Ð±Ñ Ð¿ÑиблизиÑÑ ÐµÑ Ð·Ð½Ð°Ñение к ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ Ð¾Ð´Ð°.
-
ФигÑÑнÑе Ñкобки, ÑодеÑжаÑие блок кода. ÐÑÐ¾Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð½Ð° каждой иÑеÑаÑии Ñикла.
ÐоÑмоÑÑим на пÑимеÑ, ÑÑÐ¾Ð±Ñ ÑазобÑаÑÑÑÑ Ð² ÑÑом более деÑалÑно.
var cats = ["Ðилл", "ÐакÑ", "ÐикÑи", "ÐлиÑа", "ÐаÑмин"];
var info = "ÐоиÑ
коÑек зовÑÑ ";
var para = document.querySelector("p");
for (var i = 0; i < cats.length; i++) {
info += cats[i] + ", ";
}
para.textContent = info;
ÐÑÐ¾Ñ Ð±Ð»Ð¾Ðº кода бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑледÑÑÑий ÑезÑлÑÑаÑ:
ÐÑимеÑание: ÐÑ Ð¼Ð¾Ð¶ÐµÑе найÑи ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð½Ð° GitHub или поÑмоÑÑеÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½.
ÐдеÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ Ñикл, иÑполÑзÑемÑй Ð´Ð»Ñ Ð¿ÐµÑебоÑа ÑлеменÑов в маÑÑиве и вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑннÑÑ Ð´ÐµÐ¹ÑÑвий Ñ ÐºÐ°Ð¶Ð´Ñм из Ð½Ð¸Ñ â оÑÐµÐ½Ñ ÑаÑпÑоÑÑÑанÑннÑй Ñаблон в JavaScript ÐодÑобнее:
-
ÐÑеÑаÑоÑ,
i, наÑинаеÑÑÑ Ñ0(var i = 0). -
Цикл запÑÑкаеÑÑÑ, пока знаÑение иÑеÑаÑоÑа не бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе Ð´Ð»Ð¸Ð½Ñ Ð¼Ð°ÑÑива коÑек. ÐÑо важно - ÑÑловие вÑÑ Ð¾Ð´Ð° показÑÐ²Ð°ÐµÑ ÐºÐ¾Ð³Ð´Ð° именно Ñикл должен ÑабоÑаÑÑ, а когда нÑжно вÑйÑи из Ñикла. ÐоÑÑÐ¾Ð¼Ñ Ð² ÑлÑÑае, пока
i < cats.lenghtпо-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑtrue, Ñикл бÑÐ´ÐµÑ ÑабоÑаÑÑ. -
ÐнÑÑÑи Ñела Ñикла Ð¼Ñ ÑоединÑем ÑекÑÑий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñикла (
cats[i]ÑÑоcats[незавиÑимо Ð¾Ñ Ñого, ÑемiÑвлÑеÑÑÑ Ð² даннÑй моменÑ]) Ñ Ð·Ð°Ð¿ÑÑой и пÑобелом. ÐÑак:- РнаÑале,
i = 0, поÑÑомÑcats[0] + ', 'ÑоединÑÑÑÑ Ð² ("Ðилл, "). - Ðа вÑоÑом Ñаге,
i = 1, поÑÑомÑcats[1] + ', 'ÑоединÑÑÑÑ Ð² ("ÐакÑ, ") - Ð Ñак далее. РконÑе каждого Ñикла
iÑвелиÑиÑÑÑ Ð½Ð° 1 (i++) , и пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð½Ð°ÑинаÑÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾.
- РнаÑале,
-
Ðогда
iдоÑÑÐ¸Ð³Ð½ÐµÑ Ð²ÐµÐ»Ð¸ÑинÑcats.lengthÑикл оÑÑановиÑÑÑ Ð¸ бÑаÑÐ·ÐµÑ Ð¿ÐµÑейдÑÑ Ðº ÑледÑÑÑÐµÐ¼Ñ ÑÑагменÑÑ ÐºÐ¾Ð´Ð° поÑле Ñикла.
ÐÑимеÑание:
ÐÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð»Ð¸ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ
ода i < cats.length, а не i <= cats.length, поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑеÑÑ ÑÑиÑаÑÑ Ñ 0, а не Ñ 1 â в наÑале i = 0 и ÑвелиÑиваеÑÑÑ Ð´Ð¾ i = 4 (Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ñледнего ÑлеменÑа маÑÑива). cats.length возвÑаÑÐ°ÐµÑ 5, Ñ.к. в маÑÑиве 5 ÑлеменÑов, но нам не нÑжно ÑвелиÑиваÑÑ Ð´Ð¾ i = 5, Ñ.к. cats[5] веÑнÑÑ undefined (в маÑÑиве Ð½ÐµÑ ÑлеменÑа Ñ Ð¸Ð½Ð´ÐµÐºÑом 5). Таким обÑазом Ð¼Ñ Ñ
оÑим пÑидÑи к ÑезÑлÑÑаÑÑ Ð½Ð° 1 менÑÑе, поÑÑÐ¾Ð¼Ñ i < cats.length, не одно и Ñоже ÑÑо i <= cats.length.
ÐÑимеÑание:
СÑандаÑÑной оÑибкой Ñ ÑÑловием вÑÑ
ода ÑвлÑеÑÑÑ Ð¸ÑполÑзование ÑÑÐ»Ð¾Ð²Ð¸Ñ "ÑавнÑй" (===) ,а не "менÑÑе или Ñавно" (<=). ÐÑли нам нÑжно ÑвелиÑиÑÑ ÑÑÑÑÑик до i = 5, ÑÑловие вÑÑ
ода должно бÑÑÑ i <= cats.length. ÐÑли Ð¼Ñ ÑÑÑановим i === cats.length, Ñикл не наÑнÑÑÑÑ, Ñ.к. i не Ñавно 5 на Ñамой пеÑвой иÑеÑаÑии, поÑÑÐ¾Ð¼Ñ Ñикл оÑÑановиÑÑÑ ÑÑазÑ.
ÐÑÑаÑÑÑÑ Ð¾Ð´Ð½Ð° неболÑÑÐ°Ñ Ð¿Ñоблема: вÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока ÑÑоÑмиÑована не ÑовÑем коÑÑекÑно:
ÐÐ¾Ð¸Ñ ÐºÐ¾Ñек зовÑÑ Ðилл, ÐакÑ, ÐикÑи, ÐлиÑа, ÐаÑмин,
Ридеале Ð¼Ñ Ñ
оÑим измениÑÑ ÐºÐ¾Ð½ÐºÐ°ÑенаÑÐ¸Ñ Ð½Ð° поÑледней иÑеÑаÑии Ñикла Ñак, ÑÑÐ¾Ð±Ñ Ñ Ð½Ð°Ñ Ð½Ðµ бÑло запÑÑой в конÑе пÑедложениÑ. ÐÐ»Ñ ÑÑого нÑжно добавиÑÑ ÑÑловное вÑÑажение внÑÑÑÑ Ñикла for Ð´Ð»Ñ Ð¾Ð±ÑабоÑки ÑÑого оÑобого ÑлÑÑаÑ:
for (var i = 0; i < cats.length; i++) {
if (i === cats.length - 1) {
info += "и " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
}
ÐÑимеÑание: ÐÑ Ð¼Ð¾Ð¶ÐµÑе найÑи ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð½Ð° GitHub или поÑмоÑÑеÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½.
ÐÑедÑпÑеждение: С Ñиклом for, Ñакже как и Ñ Ð´ÑÑгими Ñиклами, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑбедиÑÑÑÑ ÑÑо иниÑиализаÑÐ¾Ñ (ÑÑÑÑÑик) и оконÑаÑелÑное вÑÑажение поÑÑÑÐ¾ÐµÐ½Ñ Ñак, ÑÑо они доÑÑигнÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ Ð¾Ð´Ð°. ÐÑли ÑÑого не пÑоизойдÑÑ, Ñо Ñикл бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑÑÑ Ð²ÐµÑно. РиÑоге бÑаÑÐ·ÐµÑ Ð¸Ð»Ð¸ заÑÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ оÑÑановиÑÑÑÑ, или вÑдаÑÑ Ð¾ÑибкÑ. ÐÑо назÑваеÑÑÑ Ð±ÐµÑконеÑнÑм Ñиклом.
ÐÑÑ Ð¾Ð´ из Ñикла Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ break
ÐÑли Ð²Ñ Ñ
оÑиÑе вÑйÑи из Ñикла до завеÑÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
иÑеÑаÑий, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ break . ÐÑ Ñже вÑÑÑеÑалиÑÑ Ñ Ð½Ð¸Ð¼ в пÑедÑдÑÑей ÑÑаÑÑе, когда ÑаÑÑмаÑÑивали опеÑаÑÐ¾Ñ switch: когда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÑобÑÑие, ÑооÑвеÑÑÑвÑÑÑее ÑÑловиÑ, пÑопиÑÐ°Ð½Ð½Ð¾Ð¼Ñ ÐºÐ»ÑÑевÑм Ñловом case внÑÑÑи опеÑаÑоÑа switch, ÑÑловие break моменÑалÑно вÑÑ
Ð¾Ð´Ð¸Ñ Ð¸Ð· конÑÑÑÑкÑии switch и запÑÑÐºÐ°ÐµÑ ÑледÑÑÑий поÑле Ð½ÐµÑ ÐºÐ¾Ð´.
Тоже Ñамое и Ñ Ñиклами â ÑÑловие break моменÑалÑно законÑÐ¸Ñ Ñикл и заÑÑÐ°Ð²Ð¸Ñ Ð±ÑаÑÐ·ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑледÑÑÑий поÑле Ñикла код.
ÐÑедположим, в маÑÑиве даннÑÑ
Ð¼Ñ Ñ
оÑим найÑи имена конÑакÑов и ÑелеÑоннÑе номеÑа, а веÑнÑÑÑ ÑолÑко номеÑ, коÑоÑÑй Ð¼Ñ Ð½Ð°Ñли.
ÐаÑнÑм Ñ ÑазмеÑки HTML: поле <input> позволÑÐµÑ Ð½Ð°Ð¼ ввеÑÑи Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка, ÑÐ»ÐµÐ¼ÐµÐ½Ñ (кнопка) <button> Ð´Ð»Ñ Ð¿Ð¾Ð´ÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка, и ÑÐ»ÐµÐ¼ÐµÐ½Ñ <p> Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа:
<label for="search">ÐоиÑк по имени: </label>
<input id="search" type="text" />
<button>ÐоиÑк</button>
<p></p>
ТепеÑÑ Ð² JavaScript:
var contacts = [
"ÐÑигоÑий:2232322",
"ÐаÑина:3453456",
"ÐаÑилий:7654322",
"ÐаÑалÑÑ:9998769",
"Ðиана:9384975",
];
var para = document.querySelector("p");
var input = document.querySelector("input");
var btn = document.querySelector("button");
btn.addEventListener("click", function () {
var searchName = input.value;
input.value = "";
input.focus();
for (var i = 0; i < contacts.length; i++) {
var splitContact = contacts[i].split(":");
if (splitContact[0] === searchName) {
para.textContent = splitContact[0] + ", Ñел.: " + splitContact[1] + ".";
break;
} else {
para.textContent = "ÐонÑÐ°ÐºÑ Ð½Ðµ найден.";
}
}
});
-
ÐÑежде вÑего Ñ Ð½Ð°Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе пеÑеменнÑе: Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¼Ð°ÑÑив Ñ ÐºÐ¾Ð½ÑакÑной инÑоÑмаÑией, каждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÐºÐ¾ÑоÑого ÑÑо ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ð² Ñебе Ð¸Ð¼Ñ Ð¸ Ð½Ð¾Ð¼ÐµÑ ÑелеÑона, коÑоÑÑе ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ñ Ð´Ð²Ð¾ÐµÑоÑием.
-
Ðалее Ð¼Ñ Ð¿ÑименÑем обÑабоÑÑик ÑобÑÑÐ¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ (
btn), ÑÑÐ¾Ð±Ñ Ð¿Ñи ÐµÑ Ð½Ð°Ð¶Ð°Ñии запÑÑкалÑÑ ÐºÐ¾Ð´ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка и оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑов. -
ÐÑ ÑÐ¾Ñ ÑанÑем знаÑение, введÑнное в ÑекÑÑовое поле, в пеÑеменнÑÑ
searchName, заÑем оÑиÑаем введÑннÑй ÑекÑÑ Ð¸ Ñнова ÑокÑÑиÑÑемÑÑ Ð½Ð° ÑекÑÑовом поле Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ поиÑка. -
ТепеÑÑ Ð¿ÐµÑейдÑм к инÑеÑеÑÑÑÑей Ð½Ð°Ñ ÑаÑÑи â к ÑиклÑ
for:- ÐÑ Ð½Ð°Ñали ÑÑÑÑÑик Ñ
0, запÑÑкаем Ñикл до ÑÐµÑ Ð¿Ð¾Ñ, пока ÑÑÑÑÑик вÑÑ ÐµÑÑ Ð¼ÐµÐ½ÑÑе, Ñем contacts.length, а инкÑеменÑiÑвелиÑиваем на 1 поÑле каждой иÑеÑаÑии Ñикла. - ÐнÑÑÑи Ñикла Ð¼Ñ ÑнаÑала ÑазделÑем ÑекÑÑий конÑÐ°ÐºÑ (
contacts[i]) на Ñимволе двоеÑоÑиÑ, и ÑÐ¾Ñ ÑанÑем полÑÑеннÑе два знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼splitContact. - ÐаÑем Ð¼Ñ Ð¸ÑполÑзÑем ÑÑловнÑй опеÑаÑоÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, Ñавно ли
splitContact[0](Ð¸Ð¼Ñ ÐºÐ¾Ð½ÑакÑа) введÑнномÑsearchName. ÐÑли ÑÑо Ñак, Ð¼Ñ Ð²Ñводим ÑÑÑÐ¾ÐºÑ Ð² абзаÑ, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ, каков Ð½Ð¾Ð¼ÐµÑ ÐºÐ¾Ð½ÑакÑа, и иÑполÑзÑемbreakÐ´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ñикла.
- ÐÑ Ð½Ð°Ñали ÑÑÑÑÑик Ñ
-
ÐоÑле иÑеÑаÑии
(contacts.length-1), еÑли Ð¸Ð¼Ñ ÐºÐ¾Ð½ÑакÑа не ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð²Ð²ÐµÐ´ÑннÑм именем в поиÑковом запÑоÑе, Ð´Ð»Ñ ÑекÑÑа абзаÑа ÑÑÑанавливаеÑÑÑ: «ÐонÑÐ°ÐºÑ Ð½Ðµ найден.», и Ñикл пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ.
ÐÑимеÑание: ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй код на GitHub или запÑÑÑиÑÑ ÐµÐ³Ð¾ (also see it running live).
ÐÑопÑÑк иÑеÑаÑий Ñ Ð¿Ñодолжением
ÐпеÑаÑÐ¾Ñ continue ÑабоÑÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑм обÑазом, как и break, но вмеÑÑо полного вÑÑ
ода из Ñикла он пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº ÑледÑÑÑей иÑеÑаÑии Ñикла.
РаÑÑмоÑÑим дÑÑгой пÑимеÑ, в коÑоÑом в каÑеÑÑве вводнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑинимаеÑÑÑ ÑиÑло, а возвÑаÑаÑÑÑÑ ÑолÑко ÑиÑла, коÑоÑÑе ÑвлÑÑÑÑÑ ÐºÐ²Ð°Ð´ÑаÑами ÑелÑÑ ÑиÑел.
Ðод HTML в оÑновном Ñакой же, как и в пÑедÑдÑÑем пÑимеÑе â пÑоÑÑой ввод ÑекÑÑа и Ð°Ð±Ð·Ð°Ñ Ð´Ð»Ñ Ð²Ñвода. JavaScript в оÑновном Ñакой же, Ñ Ð¾ÑÑ Ñам Ñикл немного дÑÑгой:
var num = input.value;
for (var i = 1; i <= num; i++) {
var sqRoot = Math.sqrt(i);
if (Math.floor(sqRoot) !== sqRoot) {
continue;
}
para.textContent += i + " ";
}
ÐÑвод:
- Ð ÑÑом ÑлÑÑае на вÑ
оде должно бÑÑÑ ÑиÑло (
num). ЦиклÑforпÑиÑваиваеÑÑÑ ÑÑÑÑÑик, наÑинаÑÑийÑÑ Ñ 1 (поÑколÑÐºÑ Ð² данном ÑлÑÑае Ð½Ð°Ñ Ð½Ðµ инÑеÑеÑÑÐµÑ 0), ÑÑловие вÑÑ Ð¾Ð´Ð°, коÑоÑое говоÑиÑ, ÑÑо Ñикл оÑÑановиÑÑÑ, когда ÑÑÑÑÑик ÑÑÐ°Ð½ÐµÑ Ð±Ð¾Ð»ÑÑе Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾num, а иÑеÑаÑÐ¾Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ 1 к ÑÑÑÑÑÐ¸ÐºÑ ÐºÐ°Ð¶Ð´Ñй Ñаз. - ÐнÑÑÑи Ñикла Ð¼Ñ Ð½Ð°Ñ
одим квадÑаÑнÑй коÑÐµÐ½Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑиÑла Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Math.sqrt(i), а заÑем пÑовеÑÑем, ÑвлÑеÑÑÑ Ð»Ð¸ квадÑаÑнÑй коÑÐµÐ½Ñ ÑелÑм ÑиÑлом, пÑовеÑÑÑ, ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ð»Ð¸ он Ñ Ñамим Ñобой, когда он бÑл окÑÑглÑн до ближайÑего Ñелого ÑиÑла (ÑÑо Ñо, ÑÑо
Math.floor ()Ð´ÐµÐ»Ð°ÐµÑ Ñ ÑиÑлом, коÑоÑое пеÑедаÑÑ). - ÐÑли квадÑаÑнÑй коÑÐµÐ½Ñ Ð¸ окÑÑглÑннÑй вниз квадÑаÑнÑй коÑÐµÐ½Ñ Ð½Ðµ ÑÐ°Ð²Ð½Ñ Ð´ÑÑг дÑÑгÑ
(! ==), знаÑÐ¸Ñ ÐºÐ²Ð°Ð´ÑаÑнÑй коÑÐµÐ½Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÑелÑм ÑиÑлом, поÑÑÐ¾Ð¼Ñ Ð½Ð°Ñ Ð¾Ð½ не инÑеÑеÑÑеÑ. Ð Ñаком ÑлÑÑае Ð¼Ñ Ð¸ÑполÑзÑем опеÑаÑоÑcontinue, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑейÑи к ÑледÑÑÑей иÑеÑаÑии Ñикла без запиÑи ÑÑого ÑиÑла. - ÐÑли квадÑаÑнÑй коÑÐµÐ½Ñ ÑвлÑеÑÑÑ ÑелÑм ÑиÑлом, Ð¼Ñ Ð¿ÑопÑÑкаем блок
ifполноÑÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑcontinueне вÑполнÑеÑÑÑ; вмеÑÑо ÑÑого обÑединÑеÑÑÑ ÑекÑÑее знаÑениеiÑ Ð¿Ñобелом в конÑе ÑодеÑжимого абзаÑа.
ÐÑимеÑание: ÐÑ Ñакже можеÑе пÑоÑмоÑÑеÑÑ Ð¿Ð¾Ð»Ð½Ñй иÑÑ Ð¾Ð´Ð½Ñй код на GitHub (Ñак же ÑмоÑÑи ÑÑÐ¾Ñ ÐºÐ¾Ð´ вживÑÑ).
Ð¦Ð¸ÐºÐ»Ñ while и do...while
forâ не единÑÑвеннÑй Ñип Ñикла, доÑÑÑпнÑй в JavaScript. Ðа Ñамом деле ÑÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво дÑÑгиÑ
Ñипов Ñиклов. Ð Ñ
оÑÑ ÑейÑÐ°Ñ Ð½Ðµ обÑзаÑелÑно знаÑÑ Ð¸Ñ
вÑе, ÑÑÐ¾Ð¸Ñ Ð²Ð·Ð³Ð»ÑнÑÑÑ Ð½Ð° ÑÑÑÑкÑÑÑÑ Ð½ÐµÑколÑкиÑ
дÑÑгиÑ
, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ ÑаÑпознаÑÑ Ñе же ÑÑнкÑии, но в ÑабоÑе немного по-дÑÑгомÑ.
РаÑÑмоÑÑим Ñикл while. СинÑакÑÐ¸Ñ ÑÑого Ñикла вÑглÑÐ´Ð¸Ñ Ñак:
initializer
while (exit-condition) {
// code to run
final-expression
}
Ðго дейÑÑвие оÑÐµÐ½Ñ Ð¿Ð¾Ñ
оже на Ñикл for, но пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð½Ð¸ÑиализаÑоÑа ÑÑÑанавливаеÑÑÑ Ð¿ÐµÑед Ñиклом, а заклÑÑиÑелÑное вÑÑажение вклÑÑаеÑÑÑ Ð² Ñикл поÑле запÑÑка кода. Ðапомним, Ñ Ñикла for ÑÑи два ÑлеменÑа заклÑÑÐµÐ½Ñ Ð² кÑÑглÑÑ
ÑкобкаÑ
. ÐдеÑÑ Ð¶Ðµ поÑле клÑÑевого Ñлова while в кÑÑглÑÑ
ÑкобкаÑ
заклÑÑено ÑÑловие вÑÑ
ода из Ñикла.
ÐдеÑÑ Ð¿ÑиÑÑÑÑÑвÑÑÑ Ñе же ÑÑи ÑлеменÑа и в Ñом же поÑÑдке, ÑÑо и в Ñикле for. ÐÑо важно, Ñак как вам нÑжно опÑеделиÑÑ Ð¸Ð½Ð¸ÑиализаÑоÑ, пÑежде Ñем полÑÑиÑÑÑ Ð¿ÑовеÑиÑÑ, доÑÑиг ли Ñикл ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ
ода.
ÐконÑаÑелÑное ÑÑловие вÑполнÑеÑÑÑ Ð¿Ð¾Ñле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° внÑÑÑи Ñикла (иÑеÑаÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑена), и оно вÑполнÑеÑÑÑ ÑолÑко в Ñом ÑлÑÑае, еÑли ÑÑловие вÑÑ Ð¾Ð´Ð° еÑÑ Ð½Ðµ доÑÑигнÑÑо.
ÐоÑмоÑÑим еÑÑ Ñаз пÑÐ¸Ð¼ÐµÑ Ñо ÑпиÑком коÑек Ñ ÐºÐ¾Ð´Ð¾Ð¼ пеÑепиÑаннÑм под иÑполÑзование Ñикла while:
var i = 0;
while (i < cats.length) {
if (i === cats.length - 1) {
info += "and " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
i++;
}
ÐÑимеÑание: Цикл ÑабоÑÐ°ÐµÑ Ñак же, как и ожидалоÑÑ. ÐоÑмоÑÑиÑе, как он ÑабоÑÐ°ÐµÑ Ð½Ð° GitHub, а Ñакже поÑмоÑÑиÑе полнÑй иÑÑ Ð¾Ð´Ð½Ñй код.
Цикл** do...while** пÑедÑÑавлÑÐµÑ Ñобой ваÑиаÑÐ¸Ñ ÑÑÑÑкÑÑÑÑ Ñикла while:
initializer
do {
// code to run
final-expression
} while (exit-condition)
Ð ÑÑом ÑлÑÑае иниÑиализаÑÐ¾Ñ Ñнова ÑказÑваеÑÑÑ Ð¿Ñежде, Ñем Ñикл запÑÑкаеÑÑÑ. ÐлÑÑевое Ñлово do непоÑÑедÑÑвенно пÑедÑеÑÑвÑÐµÑ ÑигÑÑнÑм Ñкобкам, ÑодеÑжаÑим код Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка и конеÑное вÑÑажение.
РазлиÑие ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо ÑÑловие вÑÑ
ода идÑÑ Ð¿Ð¾Ñле вÑего оÑÑалÑного, заклÑÑÑнное в Ñкобки поÑле клÑÑевого Ñлова while. Ð Ñикле do...while код внÑÑÑи ÑигÑÑнÑÑ
Ñкобок вÑегда запÑÑкаеÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз, пÑежде Ñем вÑполнÑеÑÑÑ Ð¿ÑовеÑка, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ, должна ли она бÑÑÑ Ð²Ñполнена Ñнова (в while и for пÑовеÑка идÑÑ Ð¿ÐµÑвой, поÑÑÐ¾Ð¼Ñ ÐºÐ¾Ð´ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ вÑполнен).
ÐеÑепиÑем Ð½Ð°Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ñ ÐºÐ¾Ñками, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ñикл do...while:
var i = 0;
do {
if (i === cats.length - 1) {
info += "and " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
i++;
} while (i < cats.length);
ÐÑимеÑание: Ð Ñнова ÑÑо ÑабоÑÐ°ÐµÑ Ñак же, как и ожидалоÑÑ - поÑмоÑÑиÑе, как он ÑабоÑÐ°ÐµÑ Ð½Ð° GitHub (Ñакже поÑмоÑÑиÑе полнÑй иÑÑ Ð¾Ð´Ð½Ñй код).
ÐÑедÑпÑеждение:
ÐÑименÑÑ ÑÐ¸ÐºÐ»Ñ while and do...while , как и вÑе ÑиклÑ, ÑбедиÑеÑÑ, ÑÑо иниÑиализаÑÐ¾Ñ Ð¿Ð¾Ð²ÑоÑÑеÑÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½ в конÑе конÑов доÑÑиг ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÑÑ
ода. ÐÑли ÑÑо не Ñак, Ñикл бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑÑÑ Ð²ÐµÑно, и либо бÑаÑÐ·ÐµÑ Ð·Ð°ÑÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ оÑÑановиÑÑÑÑ, либо пÑоизойдÑÑ Ñбой. ÐÑо назÑваеÑÑÑ ~~докÑÐ¾Ñ Ð¡ÑÑÑндж и ÐоÑмаммÑ~~ беÑконеÑнÑм Ñиклом.
ÐÑакÑиÑеÑкое ÑпÑажнение: запÑÑкаем обÑаÑнÑй оÑÑÑÑÑ!
Ð ÑÑом ÑпÑажнении Ð¼Ñ Ñ Ð¾Ñим, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð½Ð°Ð¿Ð¸Ñали пÑоÑÑой оÑÑÑÑÑ Ð²Ñемени запÑÑка до Ð¿Ð¾Ð»Ñ Ð²Ñвода, Ð¾Ñ 10 до "ÐÑÑк!" Ð ÑаÑÑноÑÑи, Ð¼Ñ Ñ Ð¾Ñим, ÑÑÐ¾Ð±Ñ Ð²Ñ:
-
Цикл Ð¾Ñ 10 до 0. ÐÑ Ð¿ÑедоÑÑавлÑем вам иниÑиализаÑоÑ:
var i = 10;. -
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ иÑеÑаÑии ÑоздайÑе новÑй Ð°Ð±Ð·Ð°Ñ Ð¸ добавÑÑе его к вÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑлеменÑÑ
<div>, коÑоÑÑй Ð¼Ñ Ð²ÑбÑали, иÑполÑзÑÑvar output = document.querySelector ('.output');. РкомменÑаÑиÑÑ Ð¼Ñ Ð¿ÑедоÑÑавили вам ÑÑи ÑÑÑоки кода, коÑоÑÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ Ð³Ð´Ðµ-Ñо внÑÑÑи Ñикла:var para = document.createElement('p');â ÑоздаÑÑ Ð½Ð¾Ð²Ñй абзаÑ.output.appendChild(para);â добавлÑÐµÑ Ð°Ð±Ð·Ð°Ñ Ðº вÑводÑ<div>.para.textContent =â Ð´ÐµÐ»Ð°ÐµÑ ÑекÑÑ Ð²Ð½ÑÑÑи абзаÑа ÑавнÑм знаÑениÑ, коÑоÑое Ð²Ñ ÑаÑположили ÑпÑава, поÑле знака ÑавенÑÑва.
-
РазнÑе номеÑа иÑеÑаÑий ÑÑебÑÑÑ, ÑÑÐ¾Ð±Ñ Ð² абзаÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ иÑеÑаÑии помеÑалÑÑ Ñвой ÑекÑÑ (вам понадобиÑÑÑ ÑÑловнÑй опеÑаÑÐ¾Ñ Ð¸ неÑколÑко
para.textContent = lines):- ÐÑли ÑиÑло Ñавно 10, вÑведиÑе в абзаÑе «ÐбÑаÑнÑй оÑÑÑÑÑ 10».
- ÐÑли ÑиÑло Ñавно 0, вÑведиÑе в абзаÑе «ÐÑÑк!»
- ÐÐ»Ñ Ð»Ñбого дÑÑгого ÑиÑла вÑведиÑе в абзаÑе ÑолÑко ÑиÑло.
-
Ðе забÑдÑÑе вклÑÑиÑÑ Ð¸ÑеÑаÑоÑ! Ðднако в ÑÑом пÑимеÑе Ð¼Ñ Ð²ÐµÐ´Ñм обÑаÑнÑй оÑÑÑÑÑ Ð¿Ð¾Ñле каждой иÑеÑаÑии, а не ввеÑÑ , поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ не нÑжен
i ++. Ðак вÑполниÑÑ Ð¸ÑеÑаÑÐ¸Ñ Ð²Ð½Ð¸Ð·?
ÐÑли Ð²Ñ Ð´Ð¾Ð¿ÑÑÑили оÑибкÑ, Ð²Ñ Ð²Ñегда можеÑе ÑбÑоÑиÑÑ Ð¿ÑÐ¸Ð¼ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ «СбÑоÑ» (Reset). ÐÑли Ñ Ð²Ð°Ñ ÑовÑем ниÑего не полÑÑаеÑÑÑ, нажмиÑе «Show solution», ÑÑÐ¾Ð±Ñ ÑвидеÑÑ ÑеÑение.
ÐÑакÑиÑеÑкое ÑпÑажнение: Ðаполнение ÑпиÑка гоÑÑей
ÐозÑмиÑе ÑпиÑок имÑн, Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð² маÑÑиве, и помеÑÑиÑе Ð¸Ñ Ð² ÑпиÑок гоÑÑей. ТÑÑ Ð½Ðµ вÑÑ Ñак пÑоÑÑо: Ð¼Ñ Ð½Ðµ Ñ Ð¾Ñим пÑиглаÑаÑÑ Ð¤Ð¸Ð»Ð° и ÐолÑ, поÑÐ¾Ð¼Ñ ÑÑо они наглÑе и вÑÑ ÑожÑÑÑ! У Ð½Ð°Ñ ÐµÑÑÑ Ð´Ð²Ð° ÑпиÑка. Ðдин Ð´Ð»Ñ ÑÐµÑ , кого Ð¼Ñ Ñ Ð¾Ñим пÑиглаÑиÑÑ, вÑоÑой Ð´Ð»Ñ ÑÐµÑ , кого пÑиглаÑаÑÑ Ð½Ðµ нÑжно.
ÐÐ»Ñ ÑÑого нÑжно ÑделаÑÑ ÑледÑÑÑее:
- ÐапиÑиÑе Ñикл, коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ Ð¾Ñ 0 до Ð´Ð»Ð¸Ð½Ñ Ð¼Ð°ÑÑива
people. Ðам нÑжно наÑаÑÑ Ñ Ð¸Ð½Ð¸ÑиализаÑоÑаvar i = 0;, но какое нÑжно иÑполÑзоваÑÑ ÑÑловие вÑÑ Ð¾Ð´Ð°? - Ðо вÑÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ иÑеÑаÑии Ñикла нÑжно пÑовеÑÑÑÑ, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ ÑекÑÑий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива именам "Фил" или "Ðола", иÑполÑзÑÑ ÑÑловнÑй опеÑаÑоÑ:
- ÐÑли ÑÑо Ñак, пÑивÑжиÑе ÑÑÐ¾Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива в конеÑ
textContentабзаÑаrefused, за коÑоÑÑм ÑледÑÑÑ Ð·Ð°Ð¿ÑÑÐ°Ñ Ð¸ пÑобел. - ÐÑли ÑÑо не Ñак, пÑивÑжиÑе ÑÑÐ¾Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива в конеÑ
textContentабзаÑаadmitted, за коÑоÑÑм ÑледÑÑÑ Ð·Ð°Ð¿ÑÑÐ°Ñ Ð¸ пÑобел.
- ÐÑли ÑÑо Ñак, пÑивÑжиÑе ÑÑÐ¾Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива в конеÑ
ÐÑ Ñже пÑедоÑÑавили вам:
var i = 0;â Ð²Ð°Ñ Ð¸Ð½Ð¸ÑиализаÑоÑ.refused.textContent +=â наÑало ÑÑÑоки, коÑоÑÐ°Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½Ð¸Ñ ÑÑо-Ñо до конÑаrefused.textContent.admitted.textContent +=â наÑало ÑÑÑоки, коÑоÑÐ°Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½Ð¸Ñ ÑÑо-Ñо до конÑаadmitted.textContent.
ÐополниÑелÑнÑй бонÑÑнÑй вопÑÐ¾Ñ - поÑле ÑÑпеÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²ÑÑеÑпомÑнÑÑÑÑ Ð·Ð°Ð´Ð°Ñ Ñ Ð²Ð°Ñ Ð¾ÑÑанеÑÑÑ Ð´Ð²Ð° ÑпиÑка имÑн, ÑазделÑннÑÑ Ð·Ð°Ð¿ÑÑÑми, но они бÑдÑÑ ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑÑекÑно: в конÑе каждого ÑпиÑка бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑаÑ. СможеÑе ли Ð²Ñ ÑоÑÑавиÑÑ ÑÑи ÑпиÑки Ñак, ÑÑÐ¾Ð±Ñ Ð² конÑе каждой ÑÑÑоки вмеÑÑо запÑÑой бÑла ÑоÑка. Ðа помоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ обÑаÑиÑÑÑÑ Ðº ÑÑаÑÑе «ÐолезнÑе ÑÑÑоковÑе меÑодÑ».
ÐÑли Ð²Ñ Ð´Ð¾Ð¿ÑÑÑили оÑибкÑ, Ð²Ñ Ð²Ñегда можеÑе ÑбÑоÑиÑÑ Ð¿ÑÐ¸Ð¼ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ «СбÑоÑ» (Reset). ÐÑли Ñ Ð²Ð°Ñ ÑовÑем ниÑего не полÑÑаеÑÑÑ, нажмиÑе «ÐоказаÑÑ ÑеÑение», ÑÑÐ¾Ð±Ñ ÑвидеÑÑ ÑеÑение.
Так какой Ñип Ñикла иÑполÑзоваÑÑ?
РоÑновном, иÑполÑзÑÑÑ for, while и do...while ÑиклÑ, и они во многом взаимозаменÑемÑ. ÐÑе они могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ñ
и ÑеÑ
же Ð·Ð°Ð´Ð°Ñ Ð¸ какой из ниÑ
Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ, во многом завиÑÐ¸Ñ Ð¾Ñ Ð²Ð°ÑиÑ
лиÑнÑÑ
пÑедпоÑÑений. ÐÑполÑзÑйÑе ÑоÑ, коÑоÑÑй вам пÑоÑе вÑего запомниÑÑ Ð¸Ð»Ð¸ наиболее инÑÑиÑивно понÑÑен. ÐавайÑе вÑпомним каждÑй из ниÑ
.
For:
for (initializer; exit-condition; final-expression) {
// code to run
}
while:
initializer
while (exit-condition) {
// code to run
final-expression
}
do...while:
initializer
do {
// code to run
final-expression
} while (exit-condition)
ÐÐ»Ñ Ð½Ð°Ñала Ð¼Ñ Ð±Ñ Ð¿Ð¾Ñекомендовали for, Ñак как его пÑоÑе запомниÑÑ: иниÑиализаÑоÑ, ÑÑловие вÑÑ
ода и конеÑное вÑÑажение аккÑÑаÑно заклÑÑено в Ñкобки, поÑÑÐ¾Ð¼Ñ Ð¸Ñ
легко оÑÑледиÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ñ
не пÑопÑÑкаÑÑ.
ÐÑимеÑание: СÑÑеÑÑвÑÑÑ Ð¸ дÑÑгие ÑÐ¸Ð¿Ñ Ð¸ ÑÑнкÑии Ñикла, коÑоÑÑе Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð² ÑложнÑÑ Ð¸Ð»Ð¸ ÑпеÑиализиÑованнÑÑ ÑиÑÑаÑиÑÑ Ð¸ вÑÑ Ð¾Ð´ÑÑ Ð·Ð° Ñамки данной ÑÑаÑÑи. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе подÑобнее изÑÑиÑÑ ÑÐµÐ¼Ñ Ñиклов, пÑоÑиÑайÑе наÑе ÑаÑÑиÑенное ÑÑководÑÑво по Ñиклам и иÑеÑаÑиÑм.
ÐаклÑÑение
ÐÑа ÑÑаÑÑÑ ÑаÑкÑÑÐ²Ð°ÐµÑ Ð¾ÑновнÑе конÑепÑии и ÑазлиÑнÑе опÑии, доÑÑÑпнÑе пÑи ÑиклиÑеÑком кодиÑовании в JavaScript. ТепеÑÑ Ð²Ð°Ð¼ должно бÑÑÑ Ð¿Ð¾Ð½ÑÑно, поÑÐµÐ¼Ñ ÑÐ¸ÐºÐ»Ñ ÑвлÑÑÑÑÑ Ñ Ð¾ÑоÑим Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¿Ð¾Ð²ÑоÑÑÑÑимÑÑ ÐºÐ¾Ð´Ð¾Ð¼. СÑаÑайÑеÑÑ Ð¸ÑполÑзоваÑÑ Ð¸Ñ Ð² ÑÐ²Ð¾Ð¸Ñ ÑобÑÑвеннÑÑ Ð¿ÑимеÑÐ°Ñ !
ÐÑли Ð²Ñ Ñего-Ñо не понÑли, пÑобÑйÑе ÑиÑаÑÑ ÑÑаÑÑÑ Ñнова или ÑвÑжиÑеÑÑ Ñ Ð½Ð°Ð¼Ð¸, Ð¼Ñ Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÐ¼ ÑазобÑаÑÑÑÑ.
ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
- Ð¦Ð¸ÐºÐ»Ñ Ð¸ иÑеÑаÑии
- for ÑвойÑÑва и Ñ Ð°ÑакÑеÑиÑÑики
- while и do...while опиÑание
- break и continue опиÑание
- What's the Best Way to Write a JavaScript For Loop? â ÑÑаÑÑÑ Ð¾ пÑакÑиÑеÑком пÑименении Ñиклов