Към съдържанието

Програма ​

10 занятия по 4 учебни часа, общо 40 учебни часа.

Цел: задълбочено и солидно познаване на основите на JavaScript - как работи кодът, а не само какво да се напише - за да четете и пишете JavaScript с лекота и увереност. Приложено към вашата работа: в края на курса четете и пишете уверено правила за проверка върху JSON документи и можете да изградите, тествате и документирате малка помощна библиотека за JSON на един продукт.

Всяка тема е показана върху данните, с които работите: JSON отчетът на едно устройство (doc) и правило за проверка.

Занятия ​

Датите може да се променят: Календарът винаги показва актуалните.

ДатаТема
1вт 06.10Първи стъпки: настройка за курса, как се изпълнява една програма, какво е variable
2ср 14.10Variables, типове и оператори
3ср 21.10Сравнения, логика, условия и loops
4пт 23.10Arrays и списъци от записи
5пт 30.10Функции и четене на по-стар код
6пт 06.11Обекти: дълбоки пътища, dictionaries, различни форми на данните
7пт 13.11Методи на arrays: трансформиране, групиране и индексиране на данни; старт на проекта
8пт 20.11Strings, regular expressions, дати и числа
9пт 27.11JSON, Node.js, модули и грешки; локално изпълнение на правила
10пт 04.12Тестове, JSDoc типове и качество на кода; работа с Git; преглед на проекта

Подробно по занятия ​

1. Първи стъпки ​

  • За курса, ресурси, среда: VSCode, Node.js, Git, GitHub.
  • Въведение в JavaScript; текстов редактор срещу IDE.
  • Как се изпълнява една програма; структура на програмата; какво е variable.

2. Variables, типове и оператори ​

  • Деклариране и дефиниране на variables: let, const (и защо не var); правила и конвенции за имената.
  • Примитивни типове: number, string, boolean, null, undefined; typeof; NaN.
  • Strings: кавички, escape последователности, template strings.
  • Коментари, присвояване, аритметика, ++ / --, приоритет на операторите.
  • От string към number и обратно: стойностите в JSON отчета са strings.
  • Упражнение: variables за данните на примерното правило; съобщение за alert с template string; възрастта на отчет по неговия EPOCH.

3. Сравнения, логика, условия и loops ​

  • Оператори за сравнение; === срещу ==; защо "4.10" < "4.2" е true.
  • Логически оператори &&, ||, !; truthy и falsy; || и ?? за стойности по подразбиране.
  • if / else, switch, тернарният оператор; guard clauses (ранно спиране).
  • Loops: for, while, do...while, break, continue.
  • Четене на условията в съществуващи правила (по-стар стил).
  • Упражнение: предвиждане на резултата от сравнения; класифициране на firmware level; условието на примерното правило; версии с loops; || срещу ??.

4. Arrays и списъци от записи ​

  • Създаване на arrays, индекс, length; push, pop, slice, splice, at.
  • indexOf, includes (списъкът с модели в примерното правило); split и join - също и за стойности, събрани в един string ("a;b", "key=value,key=value").
  • Loops върху arrays: for, for...of; Array.isArray.
  • Arrays от обекти: дълъг списък от записи (resource, keyword, value) - търсене, броене и събиране.
  • Упражнение: allow-list от модели; разделяне на версия на числа; търсене на записи в списък от хиляди.

5. Функции и четене на по-стар код ​

  • Декларации, function expressions, arrow functions; параметри, стойности по подразбиране, return.
  • Scope; var срещу let / const, hoisting; защо насоките за правилата искат глобалните стойности да са const и никога да не се променят; чисти функции.
  • Функции във функции, closures; callbacks, написани като function (x) {...} и като arrow functions.
  • Структурата на едно правило: първо helper функциите, след това rule(doc).
  • Четене и модернизиране на по-старо правило, стъпка по стъпка.
  • Упражнение: наша собствена versionBelow(a, b); дълго правило, разделено на малки helper функции.

6. Обекти: дълбоки пътища, dictionaries, различни форми на данните ​

  • Обектни литерали; точка срещу квадратни скоби; ключове с интервали или точки ("Firmware Version", "12_4.20").
  • Вложени обекти и дълги пътища; липсващ клон; in и Object.hasOwn; optional chaining ?..
  • Обекти, използвани като dictionaries (ключовете са id-та): Object.keys, Object.values, Object.entries, for...in; извличане на информация от самия ключ.
  • Едни и същи данни като array в един документ и като обект в друг; "сплескани" (flattened) експорти ("a.b.c": [value]).
  • Spread и destructuring; референции срещу копия; structuredClone.
  • Упражнение: get(doc, path, fallback) с път като string или като array; обектът с подробности за emit, с колоните в определен ред.

7. Методи на arrays: трансформиране, групиране и индексиране на данни ​

  • forEach, map, filter, find / findIndex / findLast, some, every, reduce; flat и flatMap.
  • Сортиране: sort с функция за сравнение, toSorted; числа, strings, версии, няколко ключа.
  • Верижно извикване на методи; кога обикновеният loop е по-ясен; console.table за записи.
  • Превръщане на списък от записи във вложен обект (групиране по resource, после по keyword); изграждане на индекс веднъж, вместо да търсим отново и отново в хиляди записи (Object.groupBy, Map); уникални стойности със Set.
  • Четене на по-старите форми: callbacks, написани като function (x) { ... }, forEach с push.
  • Старт на проекта: избор на продукт и примерни документи, създаване на repository-то, начало на library.js с първите helper функции.
  • Упражнение: остарели елементи; групиране на записи; сортиране на устройства по firmware level.

8. Strings, regular expressions, дати и числа ​

  • Методи на String: trim, toLowerCase, startsWith, endsWith, includes, slice, padStart, replaceAll, ...; кодиране на текста: Unicode, UTF-8, край на реда.
  • Regular expressions: test, match и capture groups, matchAll, replace с флага g, флагът i; четене на шаблоните в съществуващи правила.
  • Версии в много формати (4.2.1.7-B00, 42107-C00, XR420_117): нормализиране и сравняване - една обща helper функция вместо копие във всяко правило.
  • Дати: EPOCH в секунди и милисекунди; разчитане на форматите на датите в отчетите; Date, часови зони, сравняване и изваждане на дати.
  • Number, parseInt, toFixed, Math (max, min, round, floor, ...).
  • Упражнение: почистване и сравняване на версии; разчитане на ключове като "31_2.07"; възрастта на отчет при различни формати на датата.

9. JSON, Node.js, модули и грешки; локално изпълнение на правила ​

  • JSON: форматът, JSON.parse, JSON.stringify; какво JSON не може да съдържа; четене на примерни документи с fs.
  • Node.js и npm: process, package.json, вградени модули, обектът console.
  • Модули: CommonJS (require / module.exports, като обща library.js) и ES модули (import / export).
  • Грешки: try / catch / finally, throw, видовете грешки; защо catch, който само прави return, крие бъгове; защитен код за липсващи или странни данни.
  • Код, който чака: promises, async / await и fetch - JSON от уеб API.
  • Локално изпълнение на правило: фалшива emit() и папка с примерни документи.
  • Упражнения: JSON и обратно; модул; грешки с ясно съобщение; локален runner за правила.

10. Тестове, JSDoc типове и качество на кода; работа с Git; преглед на проекта ​

  • Тестване с node:test и assert: helper функции, гранични случаи (edge cases), цели правила върху примерни документи.
  • Документиране на helper функциите за другите потребители: JSDoc и типове за JSON на продукта с @typedef и // @ts-check (проверки и autocomplete в редактора, без build стъпка).
  • Linter (ESLint) и formatter: откриване на бъгове, преди кодът да се изпълни.
  • Работа с Git: branches, сливане (merge), конфликти, pull requests и code review.
  • От един продукт към следващия: обща основа плюс модул за всеки продукт.
  • Преглед на проекта: представяне на библиотеката - helper функции, правила, пренаписани с нея, тестове; въпроси, следващи стъпки и ресурси.

Домашно ​

След всяко занятие има малка задача върху JSON отчета. Тя се преглежда в началото на следващото занятие (около 15 мин).

Курсов проект ​

Вижте Курсов проект.

Създаден за