MakeFirstStep· Frontend + зеҳни сунъӣ

Дарси 21 · 🏆 Лоиҳаи ниҳоӣ ва блоки касбӣ

Лоиҳаи ниҳоӣ: ҳимоя ва қадамҳои аввал дар касб

Имрӯз Шумо ҳамаи он чиро, ки дар ду моҳ омӯхтед, нишон медиҳед: лоиҳаи шахсии худро ҳимоя мекунед, курси пурраро такрор мекунед, резюме ва профили GitHub-ро тайёр мекунед ва шпаргалкаи шахсии промптҳоро бо худ мебаред. Ин поён нест, балки витрина аст: корфармо ё фармоишгар маҳз аз рӯи он қарор медиҳад, ки бо Шумо гуфтугӯ кардан меарзад ё не.

  • Талаботҳо ба лоиҳаи ниҳоӣ ва меъёрҳои баҳогузории 0–100-ро фаҳмидан
  • Мавзӯъҳои асосии ҳамаи модулҳоро такрор кардан ва худро дар 16 вазифаи худозмоии ниҳоӣ санҷидан
  • Ҳимояро дар 5 дақиқа гузаронидан: демо, шарҳи код, ҷавоб ба саволҳо
  • Ба ҳалли дигарон шарҳи судманд додан ва шарҳро ба ҳалли худ оромона қабул кардан
  • Профили GitHub, README ва резюмеи ҳалолонаро барои вазифаи junior frontend омода кардан
  • Шпаргалкаи шахсиро аз 10 промпти корӣ аз рӯи формулаи курс ҷамъ кардан
Бо ин саҳифа чӣ тавр кор кардан лозим аст

Ин дарси ниҳоӣ аст, бинобар ин дар он матни зиёд барои хондан ва омодагӣ ҳаст: талаботҳо, меъёрҳо, нақшаи ҳимоя, блоки касбӣ. Аммо амалиёт ҳам ҳаст. Бахши 04 худозмоии ниҳоӣ аз 16 вазифа аз рӯи тамоми курс аст (функсияҳо, массивҳо, объектҳо, DOM, ҳодисаҳо, шаклҳо, async). Дар бахшҳои дигар ҳам вазифаҳои хурд ҳастанд ва ҳар кадоме мисли дарсҳои гузашта худкор тафтиш мешавад. Вазифаҳои DOM дар қуттии регӣ бо пешнамоиш ҳал карда мешаванд. Худи лоиҳаро Шумо дар VS Code-и худ месозед, ва инҷо муқоиса мекунед ва машқ менамоед.

01 Лоиҳаи ниҳоӣ: чиро бояд супорид

Дар мини-лоиҳаҳо ғояро ба Шумо медоданд. Дар лоиҳаи ниҳоӣ ғоя аз они Шумост: Шумо худатон қарор медиҳед, ки барнома кадом вазифаро ҳал мекунад, аммо ҳатман онро пеш аз оғози кор бо омӯзгор мувофиқа мекунед. Ин муҳофизат аз ду ифрот аст: ғояи хеле оддӣ («тугма рангро иваз мекунад») ва хеле азим («Instagram-и худам»). Лоиҳае лозим аст, ки Шумо воқеан онро то охир расонида ва шарҳ дода тавонед.

Монанд аз ҳаёт

Устои дарзӣ дар Душанбе пеш аз буридани матои гаронбаҳо, эскизро ба фармоишгар нишон медиҳад ва дар бораи мӯҳлатҳо мувофиқа мекунад. Ғояи лоиҳа ҳамон эскиз аст: панҷ дақиқа сӯҳбат бо омӯзгор як ҳафтаи аз нав кардани корро сарфа мекунад.

Дар лоиҳа чӣ бояд бошад

Лоиҳа тамоми курсро якбора месанҷад: JavaScript, DOM, async, илова бар ин Git, деплой ва README. Ҳадди ақали ҳатмӣ:

№ТалаботИн дониш аз куҷост
1Ғояи худӣ, ки бо омӯзгор мувофиқа шудааст (тавсиф дар 3–5 ҷумла: барои кӣ, кадом вазифаро ҳал мекунад, чӣ кор карда метавонад)Дарси 12: таҷзияи вазифа
2JavaScript-и тоза ё JavaScript + Vite: функсияҳо, массивҳо, объектҳо; код ба функсияҳо ё модулҳои фаҳмо тақсим шудаастДарсҳои 2–7, 17, 20
3Кор бо DOM ва ҳодисаҳо: интерфейс аз рӯи маълумот сохта мешавад, шакл бо санҷиш (валидатсия) ҳаст, делегатсияи ҳодисаҳоДарсҳои 8–11
4Маълумот: ё API-и беруна тавассути fetch бо ҳолатҳои «боршавӣ / хато / холӣ / муваффақият», ё ҳолат дар localStorage (беҳтараш ҳарду)Дарсҳои 11, 13–16
5Git: репозиторий дар GitHub, на камтар аз 10 коммити пурмазмун, ҳадди аққал як шоха барои имкони навДарси 19
6Деплой: лоиҳа бо истиноди оммавӣ (Vercel ё GitHub Pages) кушода мешавад, на танҳо дар ноутбуки ШумоКурс: деплой
7README: ин чист, стек, чӣ тавр оғоз кардан, скриншот, истиноди демо, чиро беҳтар кардан мумкин астДарси 20
8Коди тоза: номҳои фаҳмо, коди мурда ва console.log-и зиёдатӣ нест, нусхабардории бемаънӣ нестДарси 20

Мисолҳои ғояҳои андозаи мувофиқ

Мувофиқ аст

  • Ҳисобкунаки хароҷоти оила бо сомонӣ бо категорияҳо ва нигоҳдорӣ
  • Ҷадвали машғулот бо филтр аз рӯи рӯзҳо ва «дарси наздиктарин»
  • Барномаи обу ҳаво аз рӯи шаҳрҳои Тоҷикистон бо API-и оммавӣ
  • Феҳристи дастурпухтҳо бо ҷустуҷӯ ва интихобшудаҳо
  • Луғати «русӣ — тоҷикӣ» бо кортҳо барои такрор
  • Викторина аз JavaScript бо ҳисоби натиҷа ва рекорд

Мувофиқ нест

  • Як экран бе мантиқ («лендинги зебо»)
  • Нусхаи мини-лоиҳаи 1 ё 2 бо номи дигар
  • Ғояе, ки сервер, базаи маълумот ва вуруд бо парол талаб мекунад (ин маводи Сатҳи 3 аст)
  • Лоиҳа аз туториали бегона бе тағйироти худӣ
  • Чизе хеле бузург: «шабакаи иҷтимоӣ», «бонки онлайн», «бозӣ мисли GTA»
Қоидаҳои курс инҷо ҳам амал мекунанд

ЗС иҷозат аст, аммо бо қоида: аввал 15 дақиқа худатон, ягон коде, ки онро сатр ба сатр шарҳ дода наметавонед, нест, ва дар ҳимоя омӯзгор ҳақ дорад дар бораи ҳар як сатр бипурсад. Шарҳ дода натавонистед, холҳо барои ин қисм кам карда мешаванд. «Тамоми лоиҳаро барои ман бинавис» — роҳи кафолатноки гирифтани 0 дар ҳимоя аст.

02 Лоиҳа чӣ тавр баҳо дода мешавад (0–100) ва натиҷаи курс чӣ тавр ҳисоб карда мешавад

Лоиҳаи ниҳоӣ аз рӯи шкалаи 0–100 баҳо дода мешавад ва 30% баҳои ниҳоии курс-ро медиҳад. Ин вазнинтарин ҷузъ аст, бинобар ин меъёрҳо аз пеш шаффофанд.

МеъёрХолҳоҲадди аксар мегузорем, агар…Қисман, агар…
Ғоя ва функсионалӣ20ғоя мувофиқа шудааст, барнома вазифаи эълоншударо аз аввал то охир ҳал мекунад, тугмаҳои «мурда» нестандяк қисми имкониятҳо кор намекунанд ё «барои намуд» сохта шудаанд
JavaScript, DOM, ҳодисаҳо20интерфейс аз рӯи маълумот сохта мешавад, санҷиши шакл ҳаст, делегатсия, хатоҳо коркард шудаанд, такрор нестбисёр ислоҳоти дастии DOM, коркардкунандаҳо барои ҳар унсур
Маълумот ва async15fetch ё localStorage тавассути try/catch, чор ҳолати экран, маълумоти вайрон барномаро аз кор намебарорадмаълумот бор мешавад, аммо хато ё ҷавоби холӣ саҳифаро вайрон мекунад
Git ва деплой1010+ коммити пурмазмун, шоха бо PR ё merge, истиноди оммавӣ кор мекунад1–3 коммити калон ё деплой «танҳо дар компютери ман»
README ва тозагии код10README бо скриншот ва дастур бо суханони худӣ, номҳои фаҳмо, ҳеҷ ахлот нестREADME расмист, дар код порчаҳои шарҳшуда (комментшуда) ҳастанд
Интерфейс5озода, дар телефон кор мекунад, ҳолатҳои «холӣ», :hover, :focus ҳастандкор мекунад, аммо мисли чорнавис
Ҳимоя20дар 5 дақиқа ҷойгир шуданд, сенарияро нишон доданд, кодро шарҳ доданд, ба саволҳо ҳалолона ҷавоб доданд, аз ҷумла дар бораи ЗСсуханони умумӣ, ба «ин сатрро шарҳ деҳ» часпиданд
ЯКҶОЯ100

Чӣ холҳоро кам мекунад

  • Коди худро шарҳ дода наметавонед — дар меъёре, ки он ба он тааллуқ дорад, холҳо гум мекунед.
  • Истиноди оммавӣ нест — ҳадди аксар 5 аз 10 барои «Git ва деплой».
  • Код аз донишҷӯи дигар нусха шудааст ё пурра аз чат бе фаҳмидан — 0 барои лоиҳа. Ба якдигар кӯмак кардан мумкин аст, аммо ҳар кас аз они худро менависад ва мефаҳмад.
  • Дер супоридан — бо мувофиқа бо омӯзгор, то −10 хол.

Баҳои ниҳоии курс

ҶузъВазнЧӣ тавр ҳисоб карда мешавад
Ҳозиршавӣ15%ҳиссаи дарсҳои иштирокшуда аз дарсҳои гузаронидашуда
Вазифаҳои хонагӣ30%холи миёна барои 24 ВХ (барои ҳар кадом 0–10)
Мини-лоиҳаҳо (2 адад)25%холи миёна барои мини-лоиҳаи 1 ва 2 (0–100)
Лоиҳаи ниҳоӣ30%ҳимоя дар дарси 21 (0–100)
ЯКҶОЯ100%

Шкалаи баҳоҳо

  • 90–100 — Аъло
  • 75–89 — Хуб
  • 60–74 — Қаноатбахш
  • камтар аз 60 — Аттестатсия нашуд

Шартҳои додани сертификат

  • Ҳозиршавӣ на камтар аз 70%
  • На камтар аз 18 аз 24 вазифаи хонагӣ супорида шудааст
  • Ҳарду мини-лоиҳа супорида шудаанд
  • Лоиҳаи ниҳоӣ бо баҳои на камтар аз 60 ҳимоя шудааст

Ҳамаи чор шартро бояд якбора иҷро кард. Биёед инро бо код ҳисоб кунем: қоидаҳо ин танҳо рақамҳо ва муқоисаҳоянд, ва бо онҳо Шумо аллакай кор карда метавонед.

Амалиёт: натиҷаи худро ҳисоб мекунем

ВАЗИФАИ 2.1

Холи ниҳоӣ

осон

Функсияи finalScore(att, hw, mini, final)-ро ба итмом расонед. Ҳозиршавӣ att — бо фоиз (0–100), миёнаи ВХ hw — аз 0 то 10 (барои ба 100 овардан дар 10 зарб кунед), мини-лоиҳаҳо mini ва финал final — аз 0 то 100. Вазни ҳар як ҷузъ — аз ҷадвали боло. Натиҷаро то як рақами баъди вергул ёфт кунед: Math.round(x * 10) / 10. Функсияи gradeLabel аллакай тайёр аст.

Таҳрир кардан мумкин аст · Ctrl + Enter
function gradeLabel(score) {
  if (score >= 90) return "Отлично";
  if (score >= 75) return "Хорошо";
  if (score >= 60) return "Удовлетворительно";
  return "Не аттестован";
}

function finalScore(att, hw, mini, final) {
  // маҷмӯи вазндорро баргардонед, ки то 0.1 мудаввар шудааст
}

for (const [name, ...marks] of [
  ["Алишер", 90, 8, 86, 78],
  ["Мадина", 100, 9, 94, 92],
  ["Рустам", 60, 6, 56, 50],
]) {
  const score = finalScore(...marks);
  console.log(`${name}: ${score} ${gradeLabel(score)}`);
}
Натиҷаи интизоршаванда
Алишер: 82.4 Хорошо
Мадина: 93.1 Отлично
Рустам: 56 Не аттестован
Ишора 1

Ҳар як ҷузъро ба 100 хол меорем ва ба вазн зарб мекунем: att * 0.15, hw * 10 * 0.30, mini * 0.25, final * 0.30.

Ишора 2

const sum = att * 0.15 + hw * 10 * 0.3 + mini * 0.25 + final * 0.3; return Math.round(sum * 10) / 10;

ВАЗИФАИ 2.2

Оё донишҷӯ сертификат мегирад

миёна

Функсияи blockers(s)-ро нависед: он массиви номҳои шартҳои иҷронашудаи сертификатро бармегардонад (массиви холӣ — ҳама иҷро шудааст). Номҳо: "посещаемость", "ДЗ", "мини-проекты", "финал", маҳз бо ҳамин тартиб. Минбаъд код хулосаро чоп мекунад.

Таҳрир кардан мумкин аст · Ctrl + Enter
function blockers(s) {
  const list = [];
  // ҳозиршавӣ >= 70, ВХ супорида >= 18, ҳарду мини-лоиҳа супорида шудаанд (2), финал >= 60
  return list;
}

const students = [
  { name: "Алишер", attendance: 85, homework: 20, miniProjects: 2, finalScore: 78 },
  { name: "Зарина", attendance: 65, homework: 17, miniProjects: 2, finalScore: 90 },
  { name: "Фарход", attendance: 90, homework: 24, miniProjects: 1, finalScore: 55 },
];

for (const s of students) {
  const bad = blockers(s);
  console.log(bad.length === 0 ? `${s.name}: сертификат` : `${s.name}: нет, не хватает — ${bad.join(", ")}`);
}
Натиҷаи интизоршаванда
Алишер: сертификат
Зарина: нет, не хватает — посещаемость, ДЗ
Фарход: нет, не хватает — мини-проекты, финал
Ишора 1

Чор if-и алоҳида: агар шарт иҷро нашуда бошад — list.push("номи шарт"). На else if: ҳамаи шартҳоро бояд санҷид.

Ишора 2

if (s.attendance < 70) list.push("посещаемость"); ва ғайра. Барои мини-лоиҳаҳо: s.miniProjects < 2.

ВАЗИФАИ 2.3

Дар ҳимоя чанд хол гирифтан лозим аст

осон

Барои Алишер ҳозиршавӣ (90%), миёнаи ВХ (8) ва мини-лоиҳаҳо (86) аллакай маълуманд. Дар ҳимоя ба ӯ чанд хол лозим аст, то натиҷаи ниҳоӣ на камтар аз 75 («Хуб») бошад? Холҳои намерасида — ин target - known аст; онҳо 30%-и натиҷаро медиҳанд, бинобар ин ба вазни финал (0.3) тақсим кунед ва ба боло тавассути Math.ceil мудаввар кунед. Сатри Нужно на защите: N-ро чоп кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const known = 90 * 0.15 + 8 * 10 * 0.3 + 86 * 0.25;
const target = 75;

// дар финал чанд хол лозим аст?
Натиҷаи интизоршаванда
Нужно на защите: 54
Ишора 1

Формула: (target - known) / 0.3. Натиҷа каср аст, бинобар ин онро ба боло мудаввар кардан лозим аст.

Ишора 2

const need = Math.ceil((target - known) / 0.3); console.log("Нужно на защите: " + need);

03 Такрори курс: панҷ модул дар як саҳифа

Пеш аз ҳимоя муфид аст тамоми роҳро бо як нигоҳ аз назар гузаронед. Дар поён — барои ҳар модул як блоки фишурда: Шумо чӣ карда метавонед ва чиро ба ёд овардан лозим аст. Агар ягон банд нигаронкунанда бошад — дарсро аз рӯи истинод кушоед ва аз нав хонед. Баъд худро дар бахши 04 санҷед.

Монанд аз ҳаёт

Пеш аз имтиҳони рондан инструктор аз нав намеомӯзонад, балки иҷозат медиҳад маршрутро тай кунед: таваққуфгоҳ, гардиш, бозгашт. Такрори курс ҳамон маршрут аст: аз ҳамаи «истгоҳҳо» гузаред ва қайд кунед, ки дар куҷо боэътимод меравед ва дар куҷо суръатро паст мекунед.

Модули 1 · Пойдевори JS (дарсҳои 1–6)

Модули 2 · DOM ва интерфейс (дарсҳои 7–12)

Модули 3 · Async ва API (дарсҳои 13–18)

Модули 4 · Абзорҳо ва марҳалаи ниҳоӣ (дарсҳои 19–21)

Модули 5 · React Lite, бонус (дарсҳои 22–24)

Ин рӯйхатро чӣ тавр истифода бурдан лозим аст

Қалам гиред ва дар муқобили ҳар як дарс нависед: «ба дӯст шарҳ дода метавонам», «мефаҳмам, аммо бо ишора» ё «бояд аз нав хонам». Дар ҳимоя маҳз дар бораи он чизе, ки «ба дӯст шарҳ дода метавонам» қайд шудааст, мепурсанд, бинобар ин баҳои ҳалолона аз баҳои зебо муфидтар аст.

04 Худозмоии ниҳоӣ: 16 вазифа аз рӯи тамоми курс

Ин мустаҳкамкунӣ аст, на имтиҳон: барои он баҳо нест, аммо натиҷа нишон медиҳад, ки нуқтаҳои заифи Шумо дар куҷоянд. Қоидаҳо оддӣанд: аввал худатон, бе ЗС ҳал кунед (мисли кори назоратии дарсҳои 6 ва 18), ишораҳоро танҳо пас аз кӯшиши ҳалолона кушоед. Вазифаҳо аз рӯи модулҳо мераванд: аввал пойдевор (4.1–4.8), баъд DOM, ҳодисаҳо ва шаклҳо (4.9–4.11), баъд async (4.12–4.14) ва дар охир — ислоҳи хато ва кори бехатар бо маълумот (4.15–4.16).

Ду хатое, ки дар ҳимоя холҳо мегиранд

Якум: хондани хосият аз undefined. Дуюм: фаромӯш кардани он, ки функсияи async (ва fetch) Promise бармегардонад, на қимати тайёр. Ин чунин менамояд:

Ин код хато медиҳад · Ctrl + Enter
const user = { name: "Мадина" };
console.log(user.address.city); // ✖ TypeError: Cannot read properties of undefined (reading 'city')
Ин код на он чизеро, ки интизоред, чоп мекунад · Ctrl + Enter
async function getPrice() {
  return 25;
}

const price = getPrice();
console.log(price + 5); // ✖ "[object Promise]5" чоп мекунад, на 30: await-ро фаромӯш кардаанд

Ислоҳ: user.address?.city (ё санҷиш пеш аз хондан) ва const price = await getPrice(); дар дохили функсияи async. Агар Шумо фавран мебинед, ки хато дар куҷост, пас модули 3-ро азхуд кардаед.

Модули 1: функсияҳо, массивҳо, closure-ҳо

ВАЗИФАИ 4.1

Нарх бо тахфиф

осон

Функсияи тирчадори withDiscount(price, percent)-ро нависед. Агар тахфиф дода нашуда бошад, он ба 10% баробар аст. Даъватҳо дар коди поён аллакай ҳастанд.

Таҳрир кардан мумкин аст · Ctrl + Enter
// const withDiscount = ...

console.log(withDiscount(200) + " сомони");
console.log(withDiscount(350, 20) + " сомони");
console.log(withDiscount(99, 0) + " сомони");
Натиҷаи интизоршаванда
180 сомони
280 сомони
99 сомони
Ишора 1

Қимати пешфарзи параметр бевосита дар қавсҳо навишта мешавад: (price, percent = 10). Диққат диҳед: нол ҳам қимати ҳақиқӣ аст, percent = 10 танҳо ҳангоми undefined кор мекунад.

Ишора 2

const withDiscount = (price, percent = 10) => price - price * percent / 100;

ВАЗИФАИ 4.2

Натиҷаи чопро пешбинӣ кунед

осон

Аввал бе иҷрои код нависед, ки шаш сатр чӣ чоп мекунанд. Баъд иҷро кунед ва муқоиса намоед. Сипас сатри ҳафтумро илова кунед: сатри "12px"-ро тавассути Number ба рақам табдил диҳед ва натиҷаро чоп кунед. Чӣ мешавад ва чаро?

Таҳрир кардан мумкин аст · Ctrl + Enter
console.log("5" + 3);
console.log("5" - 3);
console.log(typeof null);
console.log(0.1 + 0.2 === 0.3);
console.log(Boolean("0"));
console.log("10" > "9");

// сатри ҳафтум — аз они Шумо
Натиҷаи интизоршаванда
53
2
object
false
true
false
NaN
Ишора 1

Оператори + бо сатр часпонда мегирад, - бошад ҳамеша ҳамчун рақамҳо ҳисоб мекунад. Сатрҳо аломат ба аломат муқоиса мешаванд: "1" аз "9" хурдтар аст.

Ишора 2

console.log(Number("12px")); — сатр дар маҷмӯъ рақам нест, бинобар ин натиҷа NaN аст («не рақам»).

ВАЗИФАИ 4.3

Баҳоҳои гурӯҳ

осон

Функсияи label(score)-ро (шкалаи курс: аз 90 — «Отлично», аз 75 — «Хорошо», аз 60 — «Удовлетворительно», дар акси ҳол «Не аттестован») ва давраи for...of-ро, ки сатрҳоро ба намуди 95: Отлично чоп мекунад, ба итмом расонед. Дар охир чоп кунед, ки чанд донишҷӯ аттестатсия нашудаанд.

Таҳрир кардан мумкин аст · Ctrl + Enter
const scores = [95, 82, 67, 45, 75];

// function label(score) { ... }

// давраи for...of: «хол: баҳо»-ро чоп мекунем, аттестатсиянашудагонро мешуморем
Натиҷаи интизоршаванда
95: Отлично
82: Хорошо
67: Удовлетворительно
45: Не аттестован
75: Хорошо
Не аттестовано: 1
Ишора 1

Шумораи let failed = 0-ро пеш аз давра таъин кунед ва онро ҳангоме зиёд кунед, ки label(score) «Не аттестован»-ро баргардонд.

Ишора 2

Шартҳо аз боло ба поён меоянд: if (score >= 90) return "Отлично"; ва ғайра. Сатри охирини функсия — return "Не аттестован";.

ВАЗИФАИ 4.4

Филтр ва миёна

миёна

Бо ду сатр чоп кунед: номҳои ҳамаи онҳое, ки холашон на аз 75 паст аст (бо вергул, бо тартиби аслӣ), ва холи миёнаи гурӯҳи A бо як рақам баъди вергул. filter, map ва reduce-ро истифода баред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const students = [
  { name: "Алишер", score: 92, group: "A" },
  { name: "Мадина", score: 78, group: "B" },
  { name: "Фарход", score: 64, group: "A" },
  { name: "Зарина", score: 88, group: "B" },
  { name: "Рустам", score: 55, group: "A" },
];

// 1) номҳо бо хол >= 75
// 2) холи миёнаи гурӯҳи A, toFixed(1)
Натиҷаи интизоршаванда
Алишер, Мадина, Зарина
Среднее по группе A: 70.3
Ишора 1

Барои номҳо: students.filter(...).map((s) => s.name).join(", "). Барои миёна аввал гурӯҳи A-ро филтр кунед.

Ишора 2

const a = students.filter((s) => s.group === "A"); const avg = a.reduce((sum, s) => sum + s.score, 0) / a.length; ва баъд avg.toFixed(1).

ВАЗИФАИ 4.5

Рейтинг бе вайрон кардани массиви аслӣ

миёна

Се беҳтаринро дар формати 1. Алишер — 92 чоп кунед ва массиви аслии students-ро тағйир надиҳед. Бо сатри охирин исбот кунед, ки тартиби аслӣ солим аст: номи донишҷӯи аввалро дар массиви аслӣ чоп кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const students = [
  { name: "Мадина", score: 78 },
  { name: "Алишер", score: 92 },
  { name: "Фарход", score: 64 },
  { name: "Зарина", score: 88 },
];

// НУСХАИ массивро аз рӯи кам шудани хол ҷудо кунед, се аввалинро чоп кунед
Натиҷаи интизоршаванда
1. Алишер — 92
2. Зарина — 88
3. Мадина — 78
Первый в исходном списке: Мадина
Ишора 1

sort худи массивро тағйир медиҳад. Нусха гиред: [...students] ё students.slice().

Ишора 2

Муқоиса барои камшавӣ: .sort((a, b) => b.score - a.score). Баъд .slice(0, 3).forEach((s, i) => ...), рақам — i + 1.

ВАЗИФАИ 4.6

Объектро нав мекунем, кӯҳнаро вайрон намекунем

миёна

Тавассути spread ду объекти нав эҷод кунед: paidOrder (нусхаи order бо paid: true) ва movedOrder (нусхае, ки дар он шаҳри мизоҷ «Бохтар» аст, майдонҳои дигари мизоҷ нигоҳ дошта мешаванд). order-и аслӣ набояд тағйир ёбад. Сатрҳои санҷишӣ аллакай навишта шудаанд.

Таҳрир кардан мумкин аст · Ctrl + Enter
const order = {
  id: 1,
  customer: { name: "Мадина", city: "Душанбе" },
  items: ["плов"],
  paid: false,
};

// const paidOrder = ...
// const movedOrder = ...

console.log(order.paid);
console.log(paidOrder.paid);
console.log(order.customer.city);
console.log(movedOrder.customer.city);
console.log(movedOrder.customer.name);
console.log(order.items === paidOrder.items);
Натиҷаи интизоршаванда
false
true
Душанбе
Бохтар
Мадина
true
Ишора 1

Барои сатҳи боло: { ...order, paid: true }. Объекти дохилиро ҳам нусха кардан лозим аст, вагарна аслро тағйир медиҳед.

Ишора 2

const movedOrder = { ...order, customer: { ...order.customer, city: "Бохтар" } }; Сатри охирин true чоп мекунад: spread нусхаи рӯякӣ месозад, массиви items дар нусхаҳо умумӣ аст.

ВАЗИФАИ 4.7

Хӯрокҳоро аз рӯи категорияҳо мешуморем

миёна

Объекти ҳисобкунакро { категория: миқдор } (тавассути reduce ё давра) созед, сипас онро тавассути Object.entries бо сатрҳои гурӯҳ: N бо тартиби пайдошавии категорияҳо чоп кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const menu = [
  { name: "Плов", cat: "горячее" },
  { name: "Салат", cat: "закуски" },
  { name: "Лагман", cat: "горячее" },
  { name: "Самбуса", cat: "выпечка" },
  { name: "Шурпа", cat: "горячее" },
  { name: "Нон", cat: "выпечка" },
];

// 1) counts = { ... }
// 2) ҷуфтҳоро тавассути Object.entries чоп кунед
Натиҷаи интизоршаванда
горячее: 3
закуски: 1
выпечка: 2
Ишора 1

Қолаби ҳисобкунак: counts[item.cat] = (counts[item.cat] ?? 0) + 1. Агар калид ҳанӯз набошад, 0 мегирем.

Ишора 2

for (const [cat, n] of Object.entries(counts)) console.log(`${cat}: ${n}`);

ВАЗИФАИ 4.8

Ҳисобкунак бо closure

душвор

Функсияи makeCounter(step)-ро нависед, ки объектеро бо се метод бармегардонад: inc() (қиматро ба step зиёд мекунад), reset() (ба 0 бозмегардонад) ва value() (қимати ҷориро бармегардонад). Қимат дар closure нигоҳ дошта мешавад, онро аз беруна бевосита тағйир додан мумкин нест. Ҳар ҳисобкунак қимати худро дорад.

Таҳрир кардан мумкин аст · Ctrl + Enter
// function makeCounter(step) { ... }

const a = makeCounter(2);
a.inc();
a.inc();
console.log(a.value());

const b = makeCounter(5);
b.inc();
console.log(b.value(), a.value());

a.reset();
console.log(a.value());
Натиҷаи интизоршаванда
4
5 4
0
Ишора 1

let count = 0-ро дар дохили makeCounter эълон кунед, на дар берун, вагарна ҳамаи ҳисобкунакҳо як қиматро тақсим мекунанд.

Ишора 2

return { inc() { count += step; }, reset() { count = 0; }, value() { return count; } }; Методҳо count ва step-ро «ба ёд доранд» — ин худи closure аст.

Модули 2: DOM, ҳодисаҳо, шаклҳо

ВАЗИФАИ 4.9

Меню аз массив

миёна

Рӯйхати хӯрокҳоро аз массиви dishes созед. Ҳар банд: <li> бо матни Название — N сомони. Хӯрокҳои аз 20 сомонӣ гаронтар класси hot мегиранд. createElement, textContent, classList-ро истифода баред. Сатрҳои санҷишӣ аллакай ҳастанд.

Меню аз массив · Ctrl + Enter
<ul id="menu"></ul>
Пешнамоиш
Барои дидани натиҷа «Иҷро кардан»-ро пахш кунед.
Натиҷаи интизоршаванда
4
2
Самбуса — 8 сомони
Ишора 1

Дар давра: const li = document.createElement("li"); li.textContent = ...;, баъд menu.append(li).

Ишора 2

if (dish.price > 20) li.classList.add("hot"); Матн: `${dish.name} — ${dish.price} сомони`.

ВАЗИФАИ 4.10

Сабад: делегатсия

миёна

Як коркардкунандаи click-ро ба рӯйхати #cart гузоред: агар клик ба тугма расида бошад, банди <li>-и онро нест кунед. Коди поён худаш ба тугмаҳо «клик мекунад», аз ҷумла ба бандҳое, ки баъд аз гузоштани коркардкунанда илова шудаанд — делегатсия бояд барои он ҳам кор кунад.

Сабад · Ctrl + Enter
<ul id="cart">
  <li data-id="1">Чай <button>✕</button></li>
  <li data-id="2">Нон <button>✕</button></li>
  <li data-id="3">Самбуса <button>✕</button></li>
</ul>
Пешнамоиш
Барои дидани натиҷа «Иҷро кардан»-ро пахш кунед.
Натиҷаи интизоршаванда
1,3
1,3
Ишора 1

Дар коркардкунанда ба event.target менигарем: const btn = event.target.closest("button");. Агар btn набошад — мебароем.

Ишора 2

cart.addEventListener("click", (e) => { const btn = e.target.closest("button"); if (!btn) return; btn.closest("li").remove(); });

ВАЗИФАИ 4.11

Шакл бо санҷиш

миёна

Коркардкунандаи submit-ро ба итмом расонед: фиристиданро бекор кунед, қимати майдонро тавассути trim() гиред. Агар он холӣ бошад, дар #err матни Введите название-ро нишон диҳед ва чизе илова накунед. Дар акси ҳол <li>-ро ба рӯйхат илова кунед, майдон ва хабари хаторо тоза намоед. Коди поён шаклро ду маротиба мефиристад.

Шакли иловакунӣ · Ctrl + Enter
<form id="form">
  <input id="title" placeholder="Название">
  <button>Добавить</button>
</form>
<p id="err"></p>
<ul id="list"></ul>
Пешнамоиш
Барои дидани натиҷа «Иҷро кардан»-ро пахш кунед.
Натиҷаи интизоршаванда
Введите название|0
[] 1 Плов
Ишора 1

Сатри аввали коркардкунанда: event.preventDefault();. Баъд const text = input.value.trim(); ва бозгашти барвақт ҳангоми сатри холӣ.

Ишора 2

Хаторо дар шохаи муваффақ тоза кардан фаромӯш накунед: err.textContent = "";. Матни бандро тавассути textContent таъин кунед, на бо ворид кардани сатри HTML.

Модули 3: async ва хатоҳо

ВАЗИФАИ 4.12

Боркунии рӯйхат бо коркарди хато

миёна

Дар санҷиш шабакаи воқеиро истифода бурдан мумкин нест, бинобар ин «сервер»-ро fakeFetch тасвир мекунад: он пас аз 30 мс ҷавоб медиҳад, ва барои суроғаи номаълум ok: false ва ҳолати 404-ро бармегардонад. Функсияи async-и loadList(url)-ро нависед: он fakeFetch-ро даъват мекунад, ҳангоми !res.ok Error("HTTP " + res.status)-ро мепартояд, дар акси ҳол массивро аз res.json() бармегардонад. Сипас онро барои ду суроға бо try / catch / finally даъват кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const fakeFetch = (url) =>
  new Promise((resolve) =>
    setTimeout(() => {
      if (url === "/students") {
        resolve({ ok: true, status: 200, json: async () => ["Алишер", "Мадина", "Зарина"] });
      } else {
        resolve({ ok: false, status: 404 });
      }
    }, 30)
  );

// async function loadList(url) { ... }

async function main() {
  for (const url of ["/students", "/teachers"]) {
    // try / catch / finally: "Загружено: N" ё "Ошибка: HTTP 404", дар finally — "Готово: суроға"
  }
}

main();
Натиҷаи интизоршаванда
Загружено: 3
Готово: /students
Ошибка: HTTP 404
Готово: /teachers
Ишора 1

Дар дохили функсияи async пеш аз Promise await мегузорем: const res = await fakeFetch(url);. Хато тавассути throw new Error(...) ба catch-и коди даъваткунанда меафтад.

Ишора 2

Паёми хато — err.message. Блоки finally ҳам пас аз муваффақият, ҳам пас аз хато иҷро мешавад. Дар main await loadList(url)-ро фаромӯш накунед.

ВАЗИФАИ 4.13

Се дархост, яке афтод

душвор

Се дархост ҳамзамон мераванд, яке аз онҳо меафтад. Promise.all-и оддӣ тамоми натиҷаро рад мекард, бинобар ин Promise.allSettled-ро истифода баред: барои ҳар дархост сатри ном: ok (натиҷа) ё ном: ошибка (паём)-ро чоп кунед, ва дар охир — чанд дархост бомуваффақият гузашт.

Таҳрир кардан мумкин аст · Ctrl + Enter
const delay = (ms) => new Promise((r) => setTimeout(r, ms));

const requests = [
  { name: "студенты", run: async () => { await delay(40); return 12; } },
  { name: "преподаватели", run: async () => { await delay(10); return 3; } },
  { name: "оплаты", run: async () => { await delay(20); throw new Error("Нет сети"); } },
];

async function main() {
  // ҳамаи run()-ро ҳамзамон оғоз кунед, allSettled-ро интизор шавед
  // сатрҳоро бо тартиб аз массиви requests ва хулосаро чоп кунед
}

main();
Натиҷаи интизоршаванда
студенты: ok (12)
преподаватели: ok (3)
оплаты: ошибка (Нет сети)
Успешно: 2 из 3
Ишора 1

Promise.allSettled(requests.map((r) => r.run())) массиви объектҳои { status: "fulfilled", value } ё { status: "rejected", reason }-ро бо ҳамон тартибе, ки дархостҳо, бармегардонад.

Ишора 2

Натиҷаҳоро бо индекс тай кунед: номро аз requests[i].name гиред. Матни хато — result.reason.message. Муваффақиятҳоро бо филтр аз рӯи status === "fulfilled" бишуморед.

ВАЗИФАИ 4.14

Тартиби иҷро: event loop-ро пешбинӣ кунед

душвор

Дар массиви prediction тартиберо нависед, ки шаш нишона бо он иҷро мешаванд. Код худаш барномаро оғоз мекунад, тартиби воқеиро ҷамъ мекунад ва бо тартиби Шумо муқоиса менамояд. Аввал дар бораи ҷавоб фикр кунед, баъд оғоз намоед: коди синхронӣ аввал меояд, баъд микровазифаҳо (then, идома пас аз await), ва танҳо баъд таймерҳо.

Таҳрир кардан мумкин аст · Ctrl + Enter
const out = [];
const log = (s) => out.push(s);

async function f() {
  log("A");
  await null;
  log("B");
}

log("start");
setTimeout(() => log("timeout"), 0);
f();
Promise.resolve().then(() => log("promise"));
log("end");

// пешгӯии Шумо — нишонаҳо бо тартиби иҷро
const prediction = [];

setTimeout(() => {
  console.log(out.join(" → "));
  console.log("Прогноз верный: " + (prediction.join(" → ") === out.join(" → ") ? "да" : "нет"));
}, 20);
Натиҷаи интизоршаванда
start → A → end → B → promise → timeout
Прогноз верный: да
Ишора 1

Ба таври синхронӣ иҷро мешаванд: start, баъд бадани f() то await-и аввал (яъне A), баъд end. Ҳама чизи дигар интизор аст.

Ишора 2

Ба навбати микровазифаҳо аввал идомаи f() (B), дуюм — then (promise) афтод. Дар охир, ҳамчун макровазифа, timeout меояд.

Ислоҳи хато ва маълумоти бехатар

ВАЗИФАИ 4.15

Хатоҳоро ёбед

осон

Функсия бояд миёнаи арифметикиро ҳисоб кунад, ва барои массиви холӣ 0 баргардонад. Ҳоло он NaN чоп мекунад. Дар он ду хато ҳаст ва як муҳофизат намерасад: онҳоро навбат ба навбат бо хондани натиҷа пайдо кунед ва ислоҳ намоед.

Таҳрир кардан мумкин аст · Ctrl + Enter
function average(numbers) {
  let sum;
  for (let i = 0; i <= numbers.length; i++) {
    sum += numbers[i];
  }
  return sum / numbers.length;
}

console.log(average([4, 8, 6]));
console.log(average([]));
Натиҷаи интизоршаванда
6
0
Ишора 1

Дар sum пеш аз ҷамъи аввал чӣ ҳаст? Ва индекси унсури охирини массиви се унсура чанд аст?

Ишора 2

let sum = 0;, шарти давра i < numbers.length, ва дар аввали функсия — if (numbers.length === 0) return 0;.

ВАЗИФАИ 4.16

Хондани бехатари JSON

миёна

Дар localStorage метавонад ҳар чиз бошад: сатри холӣ, ахлот, JSON-и нопурра. Функсияи safeParse(text, fallback)-ро нависед: он натиҷаи JSON.parse(text)-ро бармегардонад, ва ҳангоми ҳар хато — қимати fallback-ро.

Таҳрир кардан мумкин аст · Ctrl + Enter
// function safeParse(text, fallback) { ... }

console.log(safeParse('{"theme":"dark"}', {}).theme);
console.log(safeParse("{oops", { theme: "light" }).theme);
console.log(safeParse("", []).length);
Натиҷаи интизоршаванда
dark
light
0
Ишора 1

JSON.parse дар сатри бад хато мепартояд, ва хатоҳоро try / catch мегирад.

Ишора 2

try { return JSON.parse(text); } catch { return fallback; }

05 Ҳимоя: 5 дақиқае, ки 20 холро ҳал мекунад

Ҳимоя — ин ҳикояи кӯтоҳ дар бораи он аст, ки Шумо чӣ кардаед ва он чӣ тавр кор мекунад. На муаррифӣ ва на пурсиши ҷиноӣ: Шумо бояд нишон диҳед, ки лоиҳа аз они Шумост ва онро мефаҳмед. Бинобар ин барои ҳимоя 20 хол аз 100 ҷудо шудааст. Шумо мини-лоиҳаро дар дарси 12 ҳимоя карда будед, имрӯз ҳамон чиз аст, танҳо лоиҳа калонтар аст ва бо истиноди оммавӣ кор мекунад.

Монанд аз ҳаёт

Устод ба фармоишгар ҷевони тайёрро меорад. Ӯ дар бораи чӯб лексия намехонад, балки дарчаҳоро мекушояд, қуттиҳоро нишон медиҳад ва ҷавоб медиҳад: «Чаро ин мавод? Агар қулф шикаст чӣ мешавад?» Устои хуб ҷавобҳоро медонад, зеро ҳар як пайвандро худаш сохтааст. Шумо ҳам бо коди худ ҳамин тавр.

Сохтори ҳимоя барои 5 дақиқа

ВақтЧӣ кор мекунед
0:00–0:30Муаррифӣ. Бо як ибора: ин кадом барнома аст, барои кӣ, кадом мушкилиро ҳал мекунад. «Ин ҷадвали машғулот аст: мекушоӣ ва фавран мебинӣ, ки кадом дарс наздиктарин аст».
0:30–2:00Демо аз рӯи сенария. Истиноди оммавӣ-ро мекушоед (на localhost), сенарияи асосиро мегузаред, ҳолати хато ё рӯйхати холиро нишон медиҳед, саҳифаро нав мекунед ва нишон медиҳед, ки маълумот ҷояш аст.
2:00–3:30Код ва меъморӣ. Сохтори папкаҳо ё файлҳо, ҳолат дар куҷост, тасвир дар куҷо, дархостҳо ба маълумот дар куҷо; як порчаи код, ки бо он фахр мекунед; таърихи коммитҳо дар GitHub.
3:30–5:00Саволҳо. Омӯзгор ва гурӯҳ мепурсанд. Намедонед — ҳалолона бигӯед ва пешниҳод кунед, ки ҷавобро чӣ тавр меҷустед.

Сенарияи демо: аз пеш омода мекунем

Демо аксар вақт на аз сабаби код, балки аз сабаби омодагии нокифоя вайрон мешавад. Сенарияро дар коғаз нависед ва онро ҳадди аққал як маротиба бо овоз бо секундомер гузаронед.

  1. Ҷадвалҳои лозимиро аз пеш кушоед: сайти деплойшуда, репозиторий дар GitHub, муҳаррир бо файлҳо. Ҳарфро дар муҳаррир ва миқёси саҳифаро калон кунед (Ctrl +).
  2. Сенарияи асосӣ — се-чор амал, ки арзиши асосиро нишон медиҳанд: масалан «шаҳрро ворид кард → обу ҳаворо дид → ба интихобшудаҳо илова кард».
  3. Нишон диҳед, ки барнома намеафтад: воридоти холӣ, интернети ғайрифаъол (дар ҷадвали Network-и DevTools Offline-ро интихоб кардан мумкин аст) ё дархости нодуруст.
  4. Саҳифаро нав кунед (F5) ва нишон диҳед, ки маълумот барқарор шуд.
  5. Нақшаи эҳтиётӣ: аз пеш скриншот ё сабти кӯтоҳи экранро созед. Агар интернет дар аудитория шикаст бихӯрад, Шумо саргум намешавед.
  6. Бо ибораи пул хотима диҳед: «Акнун нишон медиҳам, ки ин дар код чӣ тавр сохта шудааст».

12 саволи маъмул ва дар бораи чӣ бояд ҷавоб дод

1. Чаро ту ин ғоярро интихоб кардӣ ва он барои кист?
Як истифодабарандаи воқеӣ (худатон, оила, ҳамгурӯҳон) ва як мушкилӣ. На «ба ҳама лозим аст», балки «ба ман лозим аст, зеро…».
2. Лоиҳа чӣ тавр сохта шудааст: кадом файлҳо ва барои чӣ масъуланд?
Нақшҳоро ном баред: маълумот ва дархостҳо, ҳолат, тасвир, коркардкунандаҳои ҳодисаҳо. Агар модулҳо бошанд — кадом файл чиро содир (export) мекунад.
3. state чист ва он дар лоиҳаи ту дар куҷост?
Як объект бо ҳамаи маълумоти барнома, саҳифа аз рӯи он кашида мешавад. Онро дар код нишон диҳед ва бигӯед, ки дар он чӣ ҳаст.
4. Аз клик ба тугма то тағйирот дар экран чӣ рӯй медиҳад?
Ҳодиса → коркардкунанда → тағйири ҳолат → render → нигоҳдорӣ. Занҷираро дар коди худ тарсим кунед.
5. Маълумот аз куҷо меояд ва хаторо чӣ тавр коркард мекунӣ?
fetch, санҷиши response.ok, try / catch ва чор ҳолати экранро нишон диҳед: боршавӣ, хато, холӣ, муваффақият.
6. async / await-ро дар мисоли худат шарҳ деҳ.
await Promise-ро интизор мешавад ва саҳифаро масдуд намекунад; функсияи дорои await ҳатман async бошад; хатоҳоро try / catch мегирад. Агар дархостҳои мувозӣ бошанд — Promise.all.
7. Дар localStorage чӣ ҳаст ва агар он ҷо ахлот бошад чӣ?
Сатри JSON бо калиди лоиҳа. Захира танҳо сатрҳоро мефаҳмад: ҳангоми сабт JSON.stringify, ҳангоми хондан JSON.parse дар try / catch, ҳангоми хато аз ҳолати холӣ оғоз мекунем.
8. Бо Git чӣ тавр кор кардӣ: шохаҳо, коммитҳо, хаторо чӣ тавр бозпас мегардонӣ?
Таърихро нишон диҳед: паёмҳои пурмазмун, шоха барои функсияи нав. Бозгашт: git revert (бехатар) ё бозгашт ба коммит; бо шохаи умумӣ чиро кардан мумкин нест — таърихро аз нав навиштан.
9. Лоиҳа чӣ тавр ҷойгир шудааст ва агар барпоӣ (build) афтад чӣ мешавад?
Дар куҷо деплой шудааст (Vercel ё GitHub Pages), чӣ тавр нав мешавад (push ба шоха), логи барпоиро дар куҷо дидан лозим аст. Ҳалолона: «хаторо дар лог аз боло мехонам, сатри аввали сурхро меҷӯям».
10. Кадом хато аз ҳама мушкилтар буд ва онро чӣ тавр пайдо кардӣ?
Мушаххасот: чиро интизор будед, чиро гирифтед, кадом фарзияҳоро санҷидед, DevTools ва console.log чӣ кӯмак карданд. Таърихи ҷустуҷӯ аз «ман хато надоштам» бештар қадр мешавад.
11. Ту ЗС-ро дар куҷо истифода бурдӣ? Ин сатрро шарҳ деҳ.
Ҳақиқатро бигӯед: чӣ пурсидед (нақша, шарҳи хато, санҷиш), чиро худатон тағйир додед. Ҳар як сатри нишондодашударо бо суханони худ шарҳ додан лозим аст. Наметавонед — ҳалолона бигӯед ва бо овоз таҳлил кунед.
12. Агар як ҳафтаи дигар медоштӣ, чиро беҳтар мекардӣ?
Як-ду банди мушаххас: тестҳо, таҳрир, мутобиқшавӣ ба экранҳо, гузариш ба React. Ин нишон медиҳад, ки Шумо ҳудуди лоиҳаи худро мебинед.
Чӣ ҳимояро вайрон мекунад

Код хондан бо овоз сатр ба сатр, баҳона овардан («натавонистам»), ва ҷавоб ихтироъ кардан ҳангоме ки намедонед. Беҳтар: «ин нест, зеро… инак ман онро чӣ тавр илова мекардам» ва «ба ёд надорам, аммо дар ҳуҷҷатҳо меёбам ва нишон медиҳам». Омӯзгор фаҳмишро баҳо медиҳад, на комилиро.

Ҳалли дигаронро чӣ тавр муҳокима кардан лозим аст

Ҳангоми ҳимояҳо дигарон истироҳат намекунанд: гӯш диҳед, бинед ва қайд кунед. Пас аз ҳар баромад як дақиқа барои вокуниши гурӯҳ ҳаст. Қоидаҳо оддӣ: дар бораи лоиҳа гап мезанем, на дар бораи шахс, ва ҳар як эзоҳ чор қисм дорад.

Вокуниши судманд

  • «Ба ман маъқул шуд, ки ҳангоми хатои шабака тугмаи „Такрор“ нишон дода мешавад»
  • «Дар функсияи render шартҳо зиёданд; як қисмашро ба функсияи алоҳида баровардан мумкин аст, он гоҳ хондани он осонтар мешавад»
  • «Агар API массиви холӣ баргардонад, чӣ мешавад?»
  • «Агар маълумот даҳ маротиба зиёд мебуд, ту инро чӣ тавр дигар мекардӣ?»

Вокуниши бефоида

  • «Хуб» ва «даҳшат», бе тавзеҳ
  • «Аз они ман беҳтар аст» ё «ман ин тавр намекардам»
  • Муҳокимаи муаллиф («ту ҳамеша дер мекунӣ»)
  • Ишора, ки чӣ тавр «дуруст» аст, бе савол дар бораи сабабҳои қарор
  1. Чӣ шуд: ду-се афзалияти мушаххас.
  2. Хатарро дар куҷо мебинам: ҷойе, ки барнома метавонад вайрон шавад, ва Шумо инро чӣ тавр санҷидед.
  3. Савол: «чаро ин тавр?» ба ҷои «ин нодуруст аст».
  4. Пешниҳод: як беҳбудии мушаххас. Муаллиф худаш қарор медиҳад, ки онро қабул кунад ё не.

Шарҳро қабул карданро ҳам бояд омӯхт: фавран баҳс накунед, эзоҳро сабт кунед, ташаккур гӯед ва пас аз ҳимоя дар бораи он фикр кунед. Муаллиф ҳақ дорад розӣ нашавад, аммо бояд шарҳ диҳад, ки чаро.

Амалиёт: машқи ҳимоя

ВАЗИФАИ 5.1

Вақтбандии ҳимоя

осон

Ҷадвали ҳимояро тартиб диҳед: барои ҳар блок сатри оғоз–анҷом ном-ро дар формати д:сс чоп кунед, ва дар охир — давомнокии умумиро. Вақти оғози ҳар блоки навбатӣ — анҷоми блоки гузашта аст. Функсияи fmt сонияҳоро ба д:сс табдил медиҳад, он аллакай тайёр аст.

Таҳрир кардан мумкин аст · Ctrl + Enter
const fmt = (sec) => `${Math.floor(sec / 60)}:${String(sec % 60).padStart(2, "0")}`;

const parts = [
  { name: "Представление", sec: 30 },
  { name: "Демо", sec: 90 },
  { name: "Код и архитектура", sec: 90 },
  { name: "Вопросы", sec: 90 },
];

// "0:00–0:30 Представление" ва ғайраро чоп кунед, баъд "Итого: 5:00"
Натиҷаи интизоршаванда
0:00–0:30 Представление
0:30–2:00 Демо
2:00–3:30 Код и архитектура
3:30–5:00 Вопросы
Итого: 5:00
Ишора 1

Тағйирёбандаи let t = 0-ро таъин кунед. Дар давра оғозро ба ёд гиред (t), part.sec-ро илова кунед, ва анҷом — қимати нави t аст.

Ишора 2

console.log(`${fmt(start)}–${fmt(t)} ${part.name}`);, ва баъд аз давра — console.log("Итого: " + fmt(t));.

ВАЗИФАИ 5.2

Хулосаи алоқаи баръакс

душвор

Пас аз ҳимояҳо эзоҳҳои гурӯҳ ҷамъ карда шуданд: ҳар кадом — ин { to, kind, text } аст, ки дар он kind — "plus" (чӣ хуб аст) ё "minus" (чиро беҳтар кардан лозим) мебошад. Эзоҳҳоро аз рӯи лоиҳаҳо гурӯҳбандӣ кунед (бо тартиби пайдошавии аввал) ва барои ҳар кадом Имя: плюсов N, улучшений M-ро чоп кунед. Дар охир лоиҳаеро номбар кунед, ки шумораи беҳбудиҳояш аз ҳама зиёд аст.

Таҳрир кардан мумкин аст · Ctrl + Enter
const notes = [
  { to: "Мадина", kind: "plus", text: "Понятное демо" },
  { to: "Фарход", kind: "minus", text: "Нет обработки ошибки сети" },
  { to: "Мадина", kind: "plus", text: "Аккуратный код" },
  { to: "Зарина", kind: "plus", text: "Хороший README" },
  { to: "Фарход", kind: "plus", text: "Интересная идея" },
  { to: "Мадина", kind: "minus", text: "Длинная функция render" },
  { to: "Фарход", kind: "minus", text: "Много console.log" },
  { to: "Зарина", kind: "plus", text: "Есть состояния загрузки" },
  { to: "Фарход", kind: "minus", text: "Нет деплоя" },
  { to: "Зарина", kind: "plus", text: "Чистая история коммитов" },
];

// 1) stats = { ном: { plus, minus } }
// 2) сатрҳоро чоп кунед, баъд лоиҳаро бо ҳадди аксари minus
Натиҷаи интизоршаванда
Мадина: плюсов 2, улучшений 1
Фарход: плюсов 1, улучшений 3
Зарина: плюсов 3, улучшений 0
Больше всего улучшений: Фарход (3)
Ишора 1

Барои ҳар эзоҳ: агар барои stats[note.to] ҳанӯз сабт набошад, { plus: 0, minus: 0 }-ро эҷод кунед. Баъд stats[note.to][note.kind]++ (калидҳо бо қимати kind мувофиқанд).

Ишора 2

Тартиби калидҳои объект — тартиби илова шудан аст, бинобар ин Object.entries(stats) аллакай тартиби лозимаро медиҳад. Ҳадди аксарро бо давра ҷустуҷӯ кунед, minus-ро бо беҳтарини то ин лаҳза муқоиса намуда.

06 Блоки касбӣ: GitHub, резюме, портфолио, таҷрибаомӯзӣ

Лоиҳаи хуб, ки касе надидааст, ба ёфтани кор кӯмак намекунад. Ин бахш дар бораи он аст, ки худро ҳалолона ва равшан чӣ тавр нишон додан лозим аст. Принсипи асосиро дар хотир доред: ҳар чизе, ки дар профил ва резюме навиштаед, бояд бо овоз шарҳ дода тавонед. Корфармо месанҷад, ва дар мусоҳиба мепурсад.

Монанд аз ҳаёт

Бозор дар тирамоҳ: фурӯшандаи хуб молро ҷойгир мекунад, ки харидор фавран беҳтаринро бинад, на тарбузҳоро дар халта пинҳон мекунад. Профили GitHub, README ва резюме — пештахтаи Шумо. Ҳалолона ҷойгир мекунем: беҳтарин дар пеш, ва чизе, ки дар мағоза нест, нест.

Чек-листи профили GitHub

  • ☐ Акс ва ном: номи ҳақиқӣ бо ҳарфҳои лотинӣ, акси муътадил ё аватари озода.
  • ☐ Bio дар як сатр: «Junior frontend · JavaScript · дар MakeFirstStep меомӯзам», бе калимаҳои пурғавғо.
  • ☐ Ҷойгиршавӣ (Dushanbe, Tajikistan) ва тамос: Telegram ё почтаи корӣ. Рақами телефонро нашр кардан лозим нест.
  • ☐ README-и профилӣ (репозиторие бо номи ба логини Шумо мувофиқ): 5–8 сатр дар бораи худ, стек, истинодҳо ба лоиҳаҳо.
  • ☐ 3–6 репозиторий бо мирӯй (pin): беҳтарин лоиҳаҳо, на тайёрҳои «test» ва «untitled».
  • ☐ Дар ҳар лоиҳаи пайвандшуда: тавсиф, topics, истиноди демо дар майдони Website, README бо скриншот.
  • ☐ Таърихи тоза: коммитҳо бо паёмҳои фаҳмо бо забони англисӣ, на «fix», «asdf», «1».
  • ☐ Асрор нест: дар репозиторий файлҳои .env, калидҳо, паролҳо ва токенҳо нестанд. Агар тасодуфан калидро коммит карда бошед, онро вайроншуда ҳисоб кунед ва фавран иваз намоед.
  • ☐ Ахлот нест: node_modules дар .gitignore, репозиторийҳои холии кӯҳна нест карда шудаанд ё дар бойгонӣ.
  • ☐ Фаъолияти ҳалол: «мураббаъҳои сабз»-ро бо коммитҳои холӣ зиёд накунед. Чашми ботаҷриба инро фавран мебинад.

Резюмеи junior frontend: дар як саҳифа чӣ бояд бошад

Барои вазифа бе таҷриба корфармо ба се чиз менигарад: Шумо чӣ нишон дода метавонед (лоиҳаҳо), чӣ тавр меомӯзед ва оё бо Шумо кор кардан мумкин аст (возеҳӣ, ҳалолӣ). Резюме — як саҳифа, PDF, номи файл монанди Name-Surname-Frontend.pdf.

Сохтори резюме (мисол)
Мадина Рахимова
Junior Frontend Developer · Душанбе, Таджикистан
Telegram: @username · email@example.com
GitHub: github.com/username · Портфолио: username.github.io

О себе
Закончила курс «Frontend + ИИ» (MakeFirstStep, 2 месяца, JavaScript, DOM, fetch, Git).
Ищу стажировку или junior-позицию, готова работать в команде и быстро учиться.

Навыки
JavaScript (ES6+), HTML5, CSS3 (flexbox, grid), DOM и события, fetch и async/await,
Git и GitHub, Vite и npm, основы React (компоненты, useState, useEffect).

Проекты
Трекер привычек — чистый JavaScript, localStorage, фильтры, серии дней.
  Демо: ссылка · Код: ссылка
Погода по городам — fetch к публичному API, состояния загрузки и ошибки.
  Демо: ссылка · Код: ссылка

Образование и курсы
MakeFirstStep · Frontend + ИИ, Уровень 2 (2026)
Школа / вуз (если есть, одной строкой)

Языки
Таджикский — родной · Русский — свободно · Английский — чтение документации

Ин тавр наменависем

  • «Мутахассиси беназир», «эксперт аз JavaScript», «беҳтарин хонанда»
  • «Таҷрибаи кор 2 сол», агар танҳо лоиҳаи таълимӣ буд
  • «React-ро медонам», агар се дарси муқаддимавиро гузашта бошед
  • Шкалаҳои «JavaScript — 90%», «HTML — 100%»: маълум нест, ки онҳо чӣ маъно доранд
  • Рӯйхати 25 технология, ки нисфашро як маротиба дидаед
  • Лоиҳа бе истинод: «сайт сохтам»

Ин тавр менависем

  • «Трекери одатҳо бо JavaScript, маълумот дар localStorage нигоҳ дошта мешавад»
  • «Блоки муқаддимавии React-ро гузаштам: компонентҳо, useState, useEffect + fetch»
  • Малакаҳо бо гурӯҳҳо: «Боэътимод», «Дар лоиҳаҳо истифода бурдам», «Ошноӣ»
  • Дар ҳар лоиҳа: чиро ҳал мекунад, бо чӣ сохта шудааст, истинодҳо ба демо ва код
  • 2–3 лоиҳаи беҳтарин ба ҷои даҳ лоиҳаи суст
  • Сана ва номи курсе, ки Шумо воқеан гузаштаед
Блоки ЗС: резюме ва профил бо кӯмаки ЗС — аз рӯи қоидаҳои курс

Ин ҳолати №21 аз китобхонаи промптҳост. ЗС ибораҳоро хуб ҷило медиҳад, аммо ба осонӣ он чизеро «илова мекунад», ки Шумо надоред: солҳои таҷриба, технологияҳо, дастовардҳо. Ҳар як калимаро санҷед: агар Шумо сатрро дар мусоҳиба шарҳ дода натавонед, он набояд дар резюме бошад.

барои ман резюмеи ҷолиби таҳиягари фронтенд бинавис
Контекст: ман junior ҳастам, курси 2-моҳаи JavaScript-ро (DOM, fetch, Git) тамом кардаам, дар Душанбе зиндагӣ мекунам. Таҷрибаи тиҷоратӣ надорам. Лоиҳа: «Трекери одатҳо» бо JavaScript-и тоза, маълумот дар localStorage, филтрҳо ва силсилаи рӯзҳо. Вазифа: ин лоиҳаро барои резюме дар 3 сатр тавсиф кун: масъала, стек, натиҷа. Маҳдудиятҳо: бе калимаҳои «беназир», «беҳтарин», «эксперт»; технологияҳо ва таҷрибае, ки ман ном набурдаам, илова накун; бе рақамҳои ихтироъшуда. Формати ҷавоб: се банди кӯтоҳ, ҳар кадом дар як сатр. Санҷиш: пас аз ҷавоб номбар кун, ки кадом калимаҳоро аз худат илова кардӣ, то ман онҳоро барои ҳалолӣ санҷида тавонам.

Аввал тавсифи лоиҳаро худатон нависед, 15 дақиқа, баъд ба ЗС диҳед, ки онро беҳтар кунад, на ихтироъ кунад. Ду вариантро муқоиса кунед ва аз они худро интихоб намоед. Ибораҳоро бо код месанҷем:

Амалиёт: ибораҳо ва README-ро месанҷем

ВАЗИФАИ 6.1

Ошкорсози пафос дар резюме

осон

Функсияи flags(text)-ро ба итмом расонед: он массиви «калимаҳои мамнӯъ»-ро (асосҳо аз рӯйхати STOP), ки дар матн бе назардошти ҳарфи калон ё хурд вомехӯранд, бармегардонад. Агар массив холӣ бошад, банд «ок» аст, дар акси ҳол пафос (слово, слово).

Таҳрир кардан мумкин аст · Ctrl + Enter
const STOP = ["уникальн", "лучш", "эксперт", "гуру", "опытн"];

function flags(text) {
  // массиви асосҳоро аз STOP, ки дар матн ҳастанд, баргардонед (toLowerCase + includes)
}

const bullets = [
  "Трекер задач на чистом JavaScript: добавление, фильтры, сохранение в localStorage",
  "Уникальный проект, который меняет мир",
  "Опытный эксперт по JavaScript",
  "Приложение погоды на fetch и Open-Meteo API: состояния загрузки и ошибки",
];

bullets.forEach((b, i) => {
  const found = flags(b);
  console.log(`${i + 1}: ${found.length ? "пафос (" + found.join(", ") + ")" : "ок"}`);
});
Натиҷаи интизоршаванда
1: ок
2: пафос (уникальн)
3: пафос (эксперт, опытн)
4: ок
Ишора 1

STOP.filter(...)-ро истифода баред: он асосҳоро нигоҳ медорем, ки барояшон text.toLowerCase().includes(асос) дуруст аст.

Ишора 2

Тартиби калимаҳо дар ҷавоб — тартиби дар массиви STOP аст, бинобар ин дар сатри сеюм аввал «эксперт», баъд «опытн».

ВАЗИФАИ 6.2

Санҷиши README

миёна

Дар README-и хуб панҷ бахш ҳаст: «Что это», «Стек», «Запуск», «Скриншот», «Что дальше» (номҳои бахшҳо дар код русӣ мемонанд). Сарлавҳаи бахш бо ## оғоз мешавад. Барои ҳар бахш ✓ ном ё ✗ ном-ро чоп кунед, баъд Готово: N из 5-ро. Дар ин README скриншот нест, ва санҷиш бояд инро пай барад. Баъд бахшро ба README-и воқеии худ илова кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const readme = `# Трекер привычек

## Что это
Приложение для отметки привычек и подсчёта серии дней.

## Стек
JavaScript, HTML, CSS, localStorage.

## Запуск
Откройте index.html в браузере.

## Что дальше
Редактирование привычек и тёмная тема.`;

const required = ["Что это", "Стек", "Запуск", "Скриншот", "Что дальше"];

// ҳар як бахшро тавассути includes("## " + name) санҷед
Натиҷаи интизоршаванда
✓ Что это
✓ Стек
✓ Запуск
✗ Скриншот
✓ Что дальше
Готово: 4 из 5
Ишора 1

Ҳисобкунаки let ok = 0-ро таъин кунед. Дар давраи for...of аз рӯи required readme.includes("## " + name)-ро санҷед.

Ишора 2

Дар давра: const has = readme.includes("## " + name); if (has) ok++; console.log((has ? "✓ " : "✗ ") + name); Пас аз давра — сатри ниҳоӣ бо ok ва required.length.

README ҳамчун портфолио

Барои junior бе таҷриба README худи витринаи лоиҳа аст. Рекрутер репозиторийро барои 30 сония мекушояд: барояш бояд фавран маълум бошад, ки ин чист, чӣ гуна менамояд ва чӣ тавр оғоз кардан мумкин аст. Қолаби ҳадди ақал:

README.md (қолаб)
# Название проекта

Одно предложение: что это и для кого.

[Демо](ссылка) · [Код](ссылка)

![Скриншот](screenshot.png)

## Что умеет
- добавление и удаление записей
- фильтры и поиск
- данные сохраняются после перезагрузки

## Стек
JavaScript (ES6+), HTML, CSS, Vite, Open-Meteo API

## Запуск
npm install
npm run dev

## Чему научился
Коротко, своими словами: что было сложно и как решил.

## Что дальше
- тёмная тема
- тесты на основные функции

Бахши «Чӣ омӯхтам»-ро худатон нависед, бе ЗС: маҳз он нишон медиҳад, ки Шумо лоиҳаро мефаҳмед. Ду-се лоиҳаи беҳтаринро бо чунин README ва бо скриншотҳо дар профил мустаҳкам кунед; боқиро нигоҳ доштан мумкин аст, аммо мустаҳкам кардан не.

Таҷрибаомӯзиро дар куҷо ҷустан лозим аст

Касе ба Шумо ҷой кафолат намедиҳад, ва ин муқаррарӣ аст. Дар поён — самтҳое, ки одатан таҷрибаи аввалро дар онҳо меҷӯянд. Ширкатҳои мушаххасро ваъда намекунем: бозор тағйир меёбад, дурустии маълумотро худатон санҷед.

КаналЧӣ тавр истифода бурдан лозим
Шабакаҳои касбӣ ва сайтҳои ҷойҳои холӣLinkedIn ва сайтҳои маҳаллии ҷойҳои холӣ: филтрҳои «intern», «junior», «стажёр»-ро гузоред, огоҳиҳоро пайваст кунед.
Каналҳо ва чатҳои TelegramҶамъиятҳои IT-и Тоҷикистон ва каналҳои русзабон бо ҷойҳои холӣ барои навомӯзон. Шартҳоро хонед, аз «таҷрибаомӯзиҳо бо пули Шумо» эҳтиёт шавед.
Мактубҳои бевосита ба ширкатҳоСтудияҳо ва ширкатҳои IT-и Душанбе: саҳифаи «Тамос» ё мутахассиси ҷалби кадрро ёбед, мактуби кӯтоҳ фиристед (қолаб дар поён).
Одамони атрофОмӯзгор, хатмкунандагони курс, ҳамгурӯҳон, шиносон дар IT. Қисми зиёди ҷойҳои аввал тавассути одамон ёфта мешаванд.
Митапҳо, хакатонҳо, конфронсҳоРавед, шинос шавед, лоиҳаро нишон диҳед. Ҳатто иштирок бе ғолибият тамос ва таҷриба медиҳад.
Вазифаҳои воқеии хурдСайт барои тиҷорати шиносе, кӯмак дар лоиҳаи open-source (issue-и хурд бо нишони «good first issue»). Ин аллакай таҷрибаест, ки онро ба резюме гузоштан мумкин аст.
Мактуби кӯтоҳ ба ширкат (мисол)
Здравствуйте, [Имя]!

Меня зовут Мадина, я junior frontend: закончила курс «Frontend + ИИ»
(JavaScript, DOM, fetch, Git). Ищу стажировку, готова выполнить тестовое задание.

Мои проекты: [ссылка на портфолио], GitHub: [ссылка].
Если у вас есть возможность взять стажёра или подсказать, куда обратиться,
буду благодарна за ответ.

С уважением,
Мадина, Telegram: @username
Интизориҳои воқеъбинона

Ҷавобҳои зиёд лозим мешавад: 20–30 ва бештар, ва ин омори муқаррарӣ барои навомӯзон аст. Ҳар ду ҳафта лоиҳаро аз рӯи шарҳҳо беҳтар кунед, на танҳо ҳамон резюмеро пахш кунед. Дар баробари ин омӯхтанро идома диҳед: пас аз ин курс Сатҳи 3 (React Pro + Next.js) Шуморо интизор аст, ва React-и қавӣ дар лоиҳаи воқеӣ эҳтимолро ба таври назаррас зиёд мекунад.

07 Шпаргалкаи шахсии промптҳо: 10-тои худатонро ҷамъ кунед

Аз дарси аввал мо омӯхтем, ки бо ЗС ҳамчун ёрирасон кор кунем: он тезонад, аммо ба ҷои Шумо фикр намекунад. Имрӯз ҳамаро дар шпаргалкаи шахсӣ ҷамъ мекунем: даҳ промпт, ки воқеан дар курс ба Шумо кумак карданд, аз рӯи формула аз нав навишта шудаанд ва барои истифодаи такрорӣ тайёранд. Ин ҳуҷҷатест, ки дар кор ҳам муфид аст: баъди як сол онро мекушоед ва як соат сарфа мекунед.

Монанд аз ҳаёт

Ҳар бонувон дафтари дастурпухти худро дорад: на «ба таври умумӣ чӣ тавр пухтан», балки «ман чӣ тавр мепазам». Қолаби промпт — дастурпухт: контекст — маҳсулот, вазифа — таом, маҳдудиятҳо — «бе тунд», формати ҷавоб — чӣ тавр пешкаш кардан, санҷиш — намакро чашида дидан.

Формулаи промпт (қоидаи курс №4)

УнсурЧӣ навиштанМисол
КонтекстЛоиҳа, забон, стек, сатҳи туМан бо JavaScript-и тоза бе китобхонаҳо менависам, сатҳ — навомӯз, лоиҳа таълимӣ аст
ВазифаЯк амали мушаххасФунксияеро бинавис, ки массиви молҳоро аз рӯи нарх филтр мекунад
МаҳдудиятҳоЧӣ мумкин нест ва чӣ ҳатмистБе китобхонаҳои беруна, танҳо ES6, HTML-ро тағйир надеҳ
Формати ҷавобНатиҷаро чӣ тавр пешкаш карданАввал код, баъд 3 сатр шарҳ, бе ҷадвалҳо
СанҷишЧиро иловатан хостан лозим2 ҳолати ҳадди охирро ном бар, ки дар онҳо ин код вайрон мешавад

Қоидаҳои кор бо ЗС: бе онҳо шпаргалка кор намекунад

  1. Аввал 15 дақиқа худат кӯшиш мекунӣ, танҳо баъд промпт.
  2. Кодеро, ки шарҳ дода наметавонӣ, намечаспонӣ, сатр ба сатр.
  3. Ҳамеша шарҳ мехоҳӣ, на танҳо код.
  4. Номҳои тағйирёбандаҳо, ҳолатҳои ҳадди охир ва мантиқро бо даст месанҷӣ.
  5. Дар корҳои назоратӣ (дарсҳои 6 ва 18) ЗС пурра хомӯш аст.

Китобхонаи промптҳои курс: 26 қолаб аз рӯи модулҳо

Ин китобхонаи умумӣ аст, ки дар ҷараёни курс ҷамъ шуд. Барои ҳар ҳолат чӣ дар ҷавоб бояд санҷид нишон дода шудааст: бе санҷиш промпт анҷом наёфтааст. Қавсҳои чоркунҷа […] — ҷойҳое, ки Шумо чизи худро мегузоред.

№Модул · дарсҲолатҚолаби промптДар ҷавоб чиро санҷидан лозим
1M1 · Дарси 2–3Намефаҳмам, чаро код ғайримуқаррарӣ рафтор мекунадИнак код: [код]. Сатр ба сатр шарҳ деҳ, ки чӣ рӯй дода истодааст ва чаро натиҷа чунин аст. Кодро аз нав нанавис — танҳо шарҳ деҳ.Оё шарҳ бо он чизе, ки консол воқеан чоп мекунад, мувофиқ аст
2M1 · Дарси 4Вазифаҳои машқӣ лозимандБарои [мавзӯъ] 5 вазифаи сатҳи навомӯз деҳ, аз содда то душвор, бе ҳал.Вазифаҳо аз рӯи мавзӯъ ва бе ҷавобҳои тайёр бошанд
3M1 · Дарси 5Функсия вазнин баромадБарои ин функсия 3 вариант пешниҳод кун: кӯтоҳ, хондашаванда ва пурсамар. Бигӯ, ки барои лоиҳаи таълимӣ кадомашро интихоб кардан лозим ва чаро.Интихобро Шумо мекунед, на варианти аввали ҷавоб
4M1 · Дарси 6Маълумот барои тест лозим астМассиви 100 объекти намуди {id, name, price, category}-ро ҳамчун коди JS тавлид кун. Нархҳо аз 10 то 500.2–3 объект ва намуди майдонҳоро бо даст санҷед
5M2 · Дарси 7JSON-и ношинос аз APIИнак порчаи JSON: [json]. Схемаро тавсиф кун: кадом майдонҳо, кадом намудҳо, кадомаш метавонад набошад.Схемаро бо ҷавоби воқеии API муқоиса кунед
6M2 · Дарси 8Барои вазифа аломатгузорӣ (разметка) лозим астҚолаби HTML-и корти молро бо классҳо аз рӯи BEM созед. Танҳо аломатгузорӣ ва CSS, бе JavaScript.Мантиқро худатон менависед — ин қоидаи курс аст
7M2 · Дарси 9Коркардкунандаҳои якхелаи зиёдДелегатсияи ҳодисаҳоро дар ин мисол шарҳ деҳ: [код]. Версияи ҳадди ақалро тавассути як коркардкунанда дар волид нишон деҳ.Оё мефаҳмед, ки чаро event.target кор мекунад
8M2 · Дарси 10Санҷиши шаклҚоидаҳои санҷишро барои майдонҳо тартиб деҳ: [рӯйхат]. Барои ҳар кадом — шарт, паёми хато ва ифодаи тартибӣ, агар лозим бошад.Ифодаҳои тартибиро бо маълумоти воқеии худ санҷед
9M2 · Дарси 11Намедонам, ҳолатро чӣ тавр нигоҳ дорамСохтори объекти ҳолатро барои барномаи [тавсиф] пешниҳод кун. Шарҳ деҳ, чаро чунин майдонҳо ва чиро ба localStorage гузоштан лозим.Бо версияи худатон муқоиса кунед ва худатон қарор диҳед
10M2 · Дарси 12Вазифаи калон, маълум нест аз куҷо оғоз карданВазифаи «[ғояи лоиҳа]»-ро ба 10–15 зервазифа ба 20–40 дақиқа, бо тартиби иҷро ҷудо кун.Зиёдатиро хориҷ кунед ва вақтро худатон баҳо диҳед
11M3 · Дарси 13Дар ғайримутобиқӣ саргум шудаамEvent loop-ро дар мисоли ин код шарҳ деҳ: [код]. Тартиби чопро дар консол ва сабаби чунин будани онро нишон деҳ.Кодро иҷро кунед ва тартиби чопро муқоиса намоед
12M3 · Дарси 14Promise ва async/awaitИн кодро аз promise ба async/await аз нав навис, коркарди хатоҳоро нигоҳ дошта: [код].Санҷед, ки try/catch воқеан хаторо мегирад
13M3 · Дарси 15Печонанда болои fetch лозим астПечонандаро болои fetch бинавис: URL-и асосӣ, таймаут, санҷиши response.ok, хатоҳои фаҳмо. JS-и тоза, бе китобхонаҳо.Бо 404 ва ҳангоми хомӯш будани шабака санҷед
14M3 · Дарси 16Дар ҳуҷҷатгузории API намефаҳмамИнак ҳуҷҷатгузории API: [матн ё истинод]. Ба ман [вазифа] лозим аст. Кадом эндпоинт, кадом параметрҳо, мисоли дархост?Параметрҳоро бо ҷавоби воқеии API муқоиса кунед
15M3 · Дарси 17Ҳолатҳои боршавӣ ва хатоҳоҲамаи ҳолатҳои экранро бо рӯйхат аз API тавсиф кун: боршавӣ, холӣ, хато, муваффақият. Барои ҳар кадом — истифодабаранда чӣ мебинад.Ҳамаи 4 ҳолат дар интерфейси Шумо ҳастанд
16M3 · Дарси 17Модулҳо ва барпоӣИн файлро ба модулҳои ES тақсим кун: [код]. Сохтори папкаҳоро барои лоиҳаи Vite пешниҳод кун.Воридотҳо ва роҳҳоро худатон санҷед, барпоиро оғоз кунед
17M4 · Дарси 19Коммитҳо ва pull requestИнак diff: [diff]. Паёми коммитро бо сабки Conventional Commits ва тавсифи кӯтоҳи PR-ро нависед: чӣ анҷом ёфт ва барои чӣ.Паём бояд маъноро инъикос кунад, на «fix»
18M4 · Дарси 19Хато ба ҷои «кор намекунад»Хато: интизорам [чӣ], мегирам [чӣ]. Коди ҳадди ақал: [код]. Хато дар консол: [матн]. 3 фарзияи сабабро аз рӯи эҳтимол деҳ.Фарзияҳоро навбат ба навбат санҷед, ҳамаро якбора ислоҳ накунед
19M4 · Дарси 20Баррасии коди худКодро аз рӯи чек-лист санҷ: номҳо, андозаи функсияҳо, такрор, бозгашти барвақт, ҷудо кардани мантиқ ва намоиш. Танҳо эзоҳҳо, бе аз нав навиштан.Ҳамаи маслиҳатҳоро қабул накунед — ҳар ислоҳро асоснок кунед
20M4 · Дарси 20README ва портфолиоREADME барои лоиҳа бинавис: [тавсиф, стек, функсияҳо]. Бахшҳо: ин чист, стек, оғоз, скриншот, минбаъд чӣ.Бо суханони худ аз нав нависед — вагарна ЗС намоён аст
21M4 · Дарси 21Резюме ва ҳимояи лоиҳаЛоиҳаи [ном]-ро барои резюме дар 3 сатр тавсиф кун: масъала, стек, натиҷа. Бе пафос ва бе калимаи «беназир».Ҳар чизеро, ки навиштаед, бояд шарҳ дода тавонед
22M5 · Дарси 22Гузариш аз DOM ба ReactИнак коди JS-и тоза: [код]. Онро ҳамчун компоненти React аз нав навис ва сатр ба сатр шарҳ деҳ, ки чӣ ба ҷои querySelector ва addEventListener омад.Мефаҳмед, ки ҳолат дар куҷост ва аломатгузорӣ дар куҷо
23M5 · Дарси 23Ҳолат нав намешавадUI нав намешавад. Компонент: [код]. Шарҳ деҳ, чаро useState кор накард ва чӣ тавр ислоҳ кардан лозим.Оё ҳолатро бевосита мутатсия намекунед
24M5 · Дарси 23key барои чӣ лозим астДар мисоли ман шарҳ деҳ, ки React барои чӣ key дар .map() лозим дорад ва бе он чӣ вайрон мешавад: [код].Ҳангоми нест кардани унсур аз миёнаи рӯйхат санҷед
25M5 · Дарси 24Боркунии маълумот дар ReactКомпоненти React-ро бинавис, ки маълумотро аз [API] дар useEffect бор мекунад ва ҳолатҳои loading, error, empty, success-ро нишон медиҳад. Бе китобхонаҳо.Рендери такрорӣ ва бекор кардани дархостро санҷед
26M5 · Дарси 24Пас аз курс чӣ кор кардан лозимНақшаи 8 ҳафтаро барои гузариш аз навомӯзи React ба React + Next.js-и боэътимод тартиб деҳ: мавзӯъҳо аз рӯи ҳафтаҳо ва барои ҳар 2 ҳафта як лоиҳа.Нақшаро бо барномаи Сатҳи 3 муқоиса кунед

Чиро накардан лозим

Антипаттернҳо

  • «Тамоми лоиҳаро барои ман бинавис»: кодеро мегиред, ки ҳимоя карда наметавонед
  • «Ислоҳ кун» бе тавсифи хато ва рафтори интизоршаванда
  • Коди бегонаро бе хондан часпондан: дар ҳимоя шарҳи ҳар сатрро талаб мекунанд
  • Дар корҳои назоратӣ аз ЗС истифода бурдан: ин қабул нашудан аст
  • Ба ҷавоби аввал бовар кардан: 2–3 вариант хоҳед ва худатон интихоб кунед

Ба ҷои ин чӣ кор кардан лозим

  • Вазифаро ба қадамҳо тақсим кардан ва аз рӯи як қадам кумак хостан
  • Чунин тавсиф кардан: «интизорам X, мегирам Y, инак код ва матни хато»
  • Хондан, иҷро кардан, номҳоро иваз кардан, бо суханони худ шарҳ додан
  • Ба корҳои назоратӣ бе ишора омода шудан, мисли имрӯз дар бахши 04
  • Пурсидан: «ин ҳал чӣ камбудиҳо дорад?»

10 промпти худро чӣ тавр ҷамъ кардан лозим

  1. Ба ёд оваред даҳ ҳолатеро, ки дар онҳо ЗС воқеан кумак кард (ё баръакс, ноумед кард, ва Шумо фаҳмидед, ки чӣ тавр навиштан лозим). Таърихи чатҳо, китобхонаи боло ва вазифаҳои хонагиро кушоед.
  2. Барои ҳар кадом қолаб аз рӯи формула нависед: ҳар панҷ унсур, бо нишонаҳои «Контекст:», «Задача:», «Ограничения:», «Формат ответа:», «Проверка:» (нишонаҳо бояд русӣ бошанд, санҷиши худкор онҳоро меҷӯяд).
  3. Қайди «ба чӣ пас аз санҷиш бовар кардан»-ро нависед: дар ҷавоб чиро бо даст месанҷед.
  4. Аз 1 то 5 баҳо диҳед, ки промпт чӣ қадар кумак кард. Сеҳо ва дуҳоро пинҳон накунед: маҳз онҳоро аз нав навиштан лозим.
  5. Нигоҳ доред дар ҳуҷҷати қулай (Google Docs, Notion, файли prompts.md дар репозиторий) ва ба омӯзгор супоред.

Дар поён — ҷадвал-қолаб барои шпаргалкаи Шумо. Онро ба ҳуҷҷати худ нусха кунед ва пур намоед:

№Барои кадом вазифаПромпти ман (5 унсур)Дар ҷавоб чиро санҷидан лозимКумак кард (1–5)
1…Контекст: … Задача: … Ограничения: … Формат ответа: … Проверка: ………
2…………
3…………
4…………
5…………
6…………
7…………
8…………
9…………
10…………
Блоки ЗС: промпт дар бораи промптҳо

Метавонед аз ЗС бипурсед, ки промпти Шуморо санҷад, аммо на ба ҷои Шумо нависад. Ду усулро муқоиса кунед:

барои ман 10 промпти хуб барои барномасоз ихтироъ кун
Контекст: ман донишҷӯи курси JavaScript ҳастам (сатҳ — навомӯз), шпаргалкаи шахсиро аз 10 промпт ҷамъ мекунам. Инак промпти №3-и ман: [промпти ман]. Вазифа: онро аз рӯи формулаи «контекст, вазифа, маҳдудиятҳо, формати ҷавоб, санҷиш» баҳо деҳ. Маҳдудиятҳо: чизеро аз нав набинавис; танҳо номбар кун, ки кадом унсурҳо намерасанд ва кадом калимаҳо мубҳананд. Формати ҷавоб: рӯйхати 5 банд, барои ҳар унсури формула як банд, бо баҳои «ҳаст / суст / нест». Санҷиш: як ҳолатро ном бар, ки дар он ин промпт ҷавоби бад медиҳад.

Амалиёт: формуларо бо код машқ мекунем

Промпт низ матн аст, ва бо матн кор карданро мо медонем. Се вазифа: промптро бо функсия ҷамъ кардан, промптҳои бегонаро санҷидан ва дар охир 10-тои худиро бо санҷиши худкор пур кардан.

ВАЗИФАИ 7.1

Ҷамъкунандаи промпт

осон

Функсияи buildPrompt-ро нависед: он объекти бо панҷ майдонро мегирад ва матни аз панҷ сатрро бо нишонаҳои Контекст:, Задача:, Ограничения:, Формат ответа:, Проверка: бармегардонад. Сатрҳоро тавассути "\n" ба ҳам часпонед.

Таҳрир кардан мумкин аст · Ctrl + Enter
function buildPrompt({ context, task, limits, format, check }) {
  // панҷ сатрро бо нишонаҳо баргардонед, ки тавассути "\n" часпонида шудаанд
}

console.log(buildPrompt({
  context: "Я пишу на чистом JavaScript без библиотек, уровень — новичок",
  task: "Напиши обёртку над fetch с базовым URL и таймаутом",
  limits: "Без внешних библиотек, только ES6",
  format: "Сначала код, потом 3 строки объяснения",
  check: "Назови 2 случая, где код сломается",
}));
Натиҷаи интизоршаванда
Контекст: Я пишу на чистом JavaScript без библиотек, уровень — новичок
Задача: Напиши обёртку над fetch с базовым URL и таймаутом
Ограничения: Без внешних библиотек, только ES6
Формат ответа: Сначала код, потом 3 строки объяснения
Проверка: Назови 2 случая, где код сломается
Ишора 1

Массиви панҷ сатри қолабиро ҷамъ кунед, масалан `Контекст: ${context}`, ва аз он .join("\n")-ро даъват кунед.

Ишора 2

return [`Контекст: ${context}`, `Задача: ${task}`, `Ограничения: ${limits}`, `Формат ответа: ${format}`, `Проверка: ${check}`].join("\n");

ВАЗИФАИ 7.2

Санҷиши промптҳои бегона

миёна

Функсияи missing(text)-ро нависед: он массиви номҳои унсурҳои формуларо, ки дар матн нестанд, бармегардонад. Унсур ҳозир ҳисоб мешавад, агар дар матн номи он бо ду нуқта бошад, масалан "Задача:". Тартиби натиҷа — мисли дар массиви LABELS.

Таҳрир кардан мумкин аст · Ctrl + Enter
const LABELS = ["Контекст", "Задача", "Ограничения", "Формат ответа", "Проверка"];

function missing(text) {
  // номҳоро аз LABELS баргардонед, ки барояшон дар матн "ном:" нест
}

const prompts = [
  "сделай калькулятор",
  "Контекст: новичок. Задача: калькулятор. Ограничения: без библиотек.",
  "Контекст: новичок. Задача: калькулятор. Ограничения: ES6. Формат ответа: код. Проверка: 2 бага.",
];

prompts.forEach((p, i) => {
  const lost = missing(p);
  console.log(`${i + 1}: ${lost.length ? "не хватает: " + lost.join(", ") : "полный"}`);
});
Натиҷаи интизоршаванда
1: не хватает: Контекст, Задача, Ограничения, Формат ответа, Проверка
2: не хватает: Формат ответа, Проверка
3: полный
Ишора 1

LABELS.filter(...) лозим аст: он номҳоро нигоҳ медорем, ки барояшон санҷиши «дар матн ҳаст» нодуруст аст.

Ишора 2

return LABELS.filter((name) => !text.includes(name + ":"));

ВАЗИФАИ 7.3

10 промпти кории ман

миёна

Массиви myPrompts-ро пур кунед: даҳ сабти { task, prompt, helped }. Дар task — барои кадом вазифа (ҳадди ақал 5 аломат), дар prompt — матни пурраи промпт бо панҷ нишонаи формула (қулай аст дар зеркалимаҳои акс дар якчанд сатр навиштан), дар helped — баҳои Шумо аз 1 то 5. Санҷиш аллакай навишта шудааст. Вазифа ҳалшуда ҳисоб мешавад, вақте ки Готово: 10 из 10 чоп шавад. Ин худи шпаргалкаи Шумост, матнҳои тайёрро ба ҳуҷҷати худ интиқол диҳед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const LABELS = ["Контекст:", "Задача:", "Ограничения:", "Формат ответа:", "Проверка:"];

const myPrompts = [
  {
    task: "Объяснить, почему код ведёт себя странно",
    prompt: `Контекст: я новичок, пишу на чистом JavaScript, учебный проект.
Задача: объясни построчно, что делает этот код: [код].
Ограничения: не переписывай код, только объясни.
Формат ответа: нумерованный список по строкам кода.
Проверка: назови одну строку, где новичок чаще всего ошибается.`,
    helped: 4,
  },
  // 2–10: блоки болоро нусха кунед ва бо маълумоти худ пур намоед
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
  { task: "", prompt: "", helped: 0 },
];

function problems(item) {
  const list = [];
  if (item.task.trim().length < 5) list.push("не указана задача");
  const lost = LABELS.filter((label) => !item.prompt.includes(label));
  if (lost.length) list.push("нет: " + lost.join(" "));
  if (!(item.helped >= 1 && item.helped <= 5)) list.push("оценка должна быть от 1 до 5");
  return list;
}

let ok = 0;
myPrompts.forEach((item, i) => {
  const list = problems(item);
  if (list.length === 0) ok++;
  console.log(`${i + 1}: ${list.length ? list.join("; ") : "ок"}`);
});
console.log(`Готово: ${ok} из ${myPrompts.length}`);
Натиҷаи интизоршаванда
1: ок
2: ок
3: ок
4: ок
5: ок
6: ок
7: ок
8: ок
9: ок
10: ок
Готово: 10 из 10
Ишора 1

Сабтҳои холӣ дар натиҷа таъкид шудаанд: масалан 2: не указана задача; нет: Контекст: Задача: …. Аз боло ба поён равед ва барои ҳар кадом сатри «ок»-ро ба даст оред.

Ишора 2

Қолабҳоро аз китобхонаи боло гиред (масалан №10, №13, №17, №18, №19) ва онҳоро аз рӯи формула бо ҳамаи панҷ нишона аз нав нависед. Баҳои helped-ро ҳалолона гузоред, баъд аз он ки промптро дар амал кӯшиш кардед.

08 Амалиёт дар дарс: ҳимояҳо ва алоқаи баръакс

Вақти асосии машғулот — ҳимояи лоиҳаҳои ниҳоӣ. Агар гурӯҳ калон бошад, онҳо тамоми дарсро мегиранд: он гоҳ блоки касбӣ ва шпаргалкаи промптҳо дар хона анҷом дода мешаванд (ва ба ВХ дохил мешаванд).

  1. 0–5 дақ · Ташкил. Омӯзгор тартиби ҳимояҳоро эълон мекунад. Лоиҳаи худро бо истиноди оммавӣ кушоед ва боварӣ ҳосил кунед, ки он бор мешавад.
  2. 5–70 дақ · Ҳимояҳо. Барои ҳар лоиҳа 5 дақиқа ва як дақиқа барои иваз шудани баромадкунанда. Дигарон гӯш медиҳанд ва варақ пур мекунанд: ду афзалият, як хатар, як савол барои ҳар лоиҳа.
  3. 70–85 дақ · Таҳлил. Омӯзгор ёфтаҳои умумӣ ва хатоҳои пешоянда ном мебарад: чӣ барои бисёриҳо баромад, чӣ аксар вайрон мешавад. Ҳар кас алоқаи баръаксро оид ба лоиҳаи худ мегирад.
  4. 85–90 дақ · Хулосаҳо. Минбаъд чӣ: харитаи роҳ ба Сатҳи 3 (React Pro + Next.js), мӯҳлатҳои супоридани шпаргалка ва истинодҳо.
Агар навбати худро интизоред

Телефонро варақ назанед: ба саволҳои таҳлил, ки ба ҳамсояи Шумо дода мешаванд, ба худ ҷавоб диҳед ва ғояҳоро барои лоиҳаи худ қайд кунед. Беҳтарин роҳи омодагӣ ба ҳимоя — гӯш додан ба се ҳимояи бегона аст.

ЗС дар дарс

Ҳангоми ҳимояҳо ЗС истифода намешавад. Пас аз машғулот метавонед аз он бипурсед, ки қайдҳои алоқаи баръаксатонро аз нав бихонад ва нақшаи беҳбудиҳоро тартиб диҳад (аз рӯи қоидаҳои курс: ғояҳоро худатон қабул мекунед ё рад менамоед).

09 Вазифаи хонагӣ

Вазифаи хонагии дарси 21: истиноди лоиҳаи деплойшударо фиристед ва ҳимояро барои 5 дақиқа омода кунед, баъд портфолио ва шпаргалкаи шахсиро ба охир расонед.

Чӣ кор кардан лозим аст

  • ☐ Истиноди лоиҳаи деплойшуда ва истиноди репозиторийро фиристед (то ҳимоя).
  • ☐ Ҳимояро барои 5 дақиқа аз рӯи бахши 05 омода кунед: сенарияи демо, скриншоти эҳтиётӣ, ҷавобҳо ба 12 савол ҳадди аққал бо овоз дар назди оина.
  • ☐ Худозмоии ниҳоиро (бахши 04) гузаред: ҳамаи 16 вазифа ҳал шуда бошанд; онҳое, ки набаромаданд, аз рӯи истинодҳо ба дарсҳо аз нав хонда шаванд.
  • ☐ Шпаргалкаи шахсиро аз 10 промпт (бахши 07) пур кунед ва ҳуҷҷатро супоред.
  • ☐ Профили GitHub-ро аз рӯи чек-листи бахши 06 нав кунед: репозиторийҳои мустаҳкамшуда, README-и профил.
  • ☐ Резюмеи як саҳифагӣ-ро дар PDF ва README-портфолиои беҳтарин лоиҳаро нависед. Ҳамаи ибораҳо ҳалолона бошанд.
  • ☐ Рӯйхати 10 ҷойро барои ҷавоб (каналҳо, ширкатҳо, одамон) тартиб диҳед ва ҳадди аққал се мактуб фиристед.

Чӣ супоридан лозим

Ба чати гурӯҳ (Telegram): истиноди лоиҳа, истиноди репозиторий, истинод ё файл бо шпаргалкаи шахсӣ, истиноди профили GitHub-и Шумо ва резюме дар PDF. Дар як паём, бо имзои номи Шумо.

ВХ чӣ тавр баҳо дода мешавад (0–10)

Чиро месанҷемХолҳо
Лоиҳа деплой шудааст, истинод бе вуруд ва бе хатоҳо дар консол кушода мешавад2
Шпаргалка: 10 промпт аз рӯи формула, бо баҳо ва қайди «чиро санҷидан лозим»3
Профили GitHub: тавсиф, репозиторийҳои мустаҳкамшуда, README дар лоиҳаҳо2
Резюмеи як саҳифагӣ, бе пафос ва далелҳои ихтироъшуда, бо истинодҳо ба лоиҳаҳо2
Худозмоӣ: ҳамаи 16 вазифа ҳал шудаанд1

Ин баҳо барои вазифаи хонагии дарс аст (0–10). Баҳо барои лоиҳаи ниҳоӣ (0–100, 30%-и натиҷа) аз рӯи ҷадвали бахши 02 гузошта мешавад ва алоҳида ҳисоб карда мешавад.

✓ Шпаргалкаи дарс

  • Лоиҳаи ниҳоӣ: ғояи худӣ, ки бо омӯзгор мувофиқа шудааст; тамоми курс (JS, DOM, async) + Git (10+ коммит) + деплой бо истиноди оммавӣ + README. Ин 30%-и натиҷаи курс аст.
  • Баҳо 0–100: ғоя ва функсионалӣ 20, JS/DOM/ҳодисаҳо 20, маълумот ва async 15, Git ва деплой 10, README ва тозагии код 10, интерфейс 5, ҳимоя 20.
  • Натиҷаи курс: ҳозиршавӣ 15% + ВХ 30% + мини-лоиҳаҳо 25% + финал 30%. Шкала: 90–100 аъло, 75–89 хуб, 60–74 қаноатбахш, камтар аз 60 аттестатсия нашудааст.
  • Сертификат: ҳозиршавӣ ≥ 70%, ≥ 18 аз 24 ВХ супорида шудааст, ҳарду мини-лоиҳа, финал ≥ 60.
  • Ҳимоя (5 дақ): 0:30 муаррифӣ, 1:30 демо бо истиноди оммавӣ бо F5, 1:30 код ва меъморӣ, 1:30 саволҳо. Код бо овоз нахонед, баҳона наоред, ҳалолона бигӯед «намедонам, аммо меёбам».
  • Саволҳои ҳимоя: ғоя, сохтор, state, роҳ аз клик то экран, fetch ва хатоҳо, async/await, localStorage, Git, деплой, хатои аз ҳама душвор, ЗС дар куҷо буд, чиро беҳтар кардан.
  • Ҳалли дигарон: чӣ шуд, хатар дар куҷост, савол «чаро ин тавр?», як пешниҳод. Дар бораи лоиҳа, на дар бораи шахс.
  • GitHub: ном ва bio, README-и профилӣ, 3–6 репозиторийи мустаҳкамшуда бо README, скриншот ва демо, таърихи тоза, ҳеҷ асрор ва мураббаъҳои зиёдкардашуда.
  • Резюмеи junior: як саҳифа, PDF; дар бораи худ, малакаҳо, 2–3 лоиҳа бо истинодҳо, курсҳо, забонҳо. Бе пафос ва таҷрибаи ихтироъшуда: ҳар сатрро шарҳ дода тавонистан лозим аст.
  • Таҷрибаомӯзӣ: шабакаҳои касбӣ ва сайтҳои ҷойҳои холӣ, каналҳои Telegram, мактубҳо бевосита, шиносон, митапҳо, вазифаҳои воқеии хурд. Ба 20–30 ҷавоб омода шавед ва омӯхтанро идома диҳед.
  • Шпаргалкаи промптҳо: формулаи «контекст → вазифа → маҳдудиятҳо → формати ҷавоб → санҷиш»; 10 промпти худӣ бо баҳои 1–5 ва қайди «чиро санҷидан лозим»; чиро накардан лозим: «тамоми лоиҳаро бинавис», «ислоҳ кун» бе тавсиф, коди бегона бе хондан, ЗС дар корҳои назоратӣ, бовар ба ҷавоби аввал.