Рядки

ВАЖЛИВО: цей розділ не є обов'язковим для дорослих, для проходження вступного тестування Ш++ тому можете переходити до наступної теми. Але якщо є час та натхнення — краще почитайте та зробіть задачі ;)

Для початку згадаємо, що таке рядки, і що з ними можна робити. Що буде, якщо запустити цей код?

let a = "hello";
console.log(a);
console.log(a + a);
console.log(a * 2);

На цьому прикладі видно, як склеювати рядки і виводити їх на екран. Також, на екран можна виводити конкретний символ в рядку, якщо сприймати текстовий рядок як масив (але все ж таки це не масив!):

console.log(a[1]);
console.log(a.length);

Іноді буває, що потрібно змінити рядок. Це не так просто: потрібно скопіювати рядок в масив посимвольно і змінювати кожну окрему комірку в масиві.

let a = "hello";
let b = [];
// сподіваюсь вам комфортно з for
for (let i = 0; i < a.length; i++) {
    b[i] = a[i];
}
b[3] = "X"; // нарешті можна змінити

а потім можна склеїти назад масив символів в рядок

let c = "";
for (let i = 0; i < b.length; i++) {
    c = c + b[i];
}

подивимось на результат:

console.log(c);

... а всю цю маніпуляцію ми робимо, тому що рядки — immutable (незмінні). А масиви можна змінювати (точніше значення їх комірок)

це треба перевірити:

let a = "hello";
a[1] = "x";
console.log(a); // що буде?

Взагалі, є варіанти змінити рядок простіше, але ми їх вам не показуємо, тому що всередині вони працюють так само як і варіант вище, просто пишуться по-іншому.

Для того, щоб рухатися далі ─ треба зрозуміти, що таке таблиця ASCII і навіщо вона потрібна. Ось вона:

У цій табличці вказані числа, які відповідають символам в рядках. Для комп'ютера все є числами.

Перші числа від 0 до 31 кодують будь-яку дивну штуку, але із знайомого там — код 13 (символ переходу на наступний рядок, зазвичай записується як "\n") і код 9 (табуляція). Втім неважливо. Набагато простіше сприймати коди від 32 до 126 ─ там вже звичні нам символи, від пробілу і знаку оклику до букви z. Після 127 йде темний ліс ─ всілякі закарлючки, російські літери та інше, ми з ними працювати не будемо (поки що).

Розуміючи, що всі літери ─ це числа за фактом, можна з ними робити будь-які маніпуляції. Як перетворити символ в його число-код?

Так, наприклад:

let a = "A";
console.log(a.charCodeAt(0)); // напише 65

або ж так:

console.log("ABC".charCodeAt(1)); // напише 66 (код літери B)

... тут 0 або 1 ─ це позиція символу в рядку, для якого ми хочемо отримати код. Виходить "ABE".charCodeAt(2) поверне 69

А можна будь-який ASCII-код перетворити назад в символ.

console.log(String.fromCharCode(65)); // поверне А

... завдяки коду символу, можна легко з'ясувати, чи є цей символ літерою.

Адже насправді все питання в діапазонах, які можна підглянути в таблиці ASCII. Наприклад великі літери починаються з числа 65 і закінчуються ... не пам'ятаю, самі подивіться в таблиці. Нагадаю, що в задачах Ш++ маються на увазі тільки латинські літери.

Що цікаво — символам, що позначають числа (наприклад "0") відповідають зовсім інші числа (у "0" код 48, а не 0). До речі код 0 — це взагалі окрема тема, але в javascript з нею практично не стикаються, тому зупинятися на цьому не будемо.

Робота із рядками може бути набагато простіше, АЛЕ:

Ми спеціально не розповідаємо набагато зручніші способи роботи з рядками

Тому що завдання цього етапу — навчити вас користуватися тим, що є.

...а не магічними функціями, які працюють незрозуміло як і роблять все самі.

Тому що ми не вчимо рядки — насправді ми вчимося писати код і вирішувати ним завдання, а інструменти ви вивчите пізніше

Тому прохання для вирішення задачок не використовувати об'єкти, мепи, різні методи класу String і інші приколи, про які легко дізнатися, якщо погуглити завдання. Ми їх вивчимо пізніше.

Загалом, краще не гуглити нічого додатково. ...просте використання циклів і масивів (за прикладами того що було вгорі показано) 一 ось що ми очікуємо від вас при вирішенні домашніх завдань

Для практики можете написати програму, яка промотує лічильник від 32 до 126 і виводить символи, які відповідають цим кодам через пробіл, c допомогою fromCharCode

Додаткові матеріали

Про рядки (uk.javascript.info)

Ще про рядки (яваскрипт.укр)

Про шаблонні рядки (яваскрипт.укр)

Обов'язкові задачі

Нагадуємо, що "чіти" типу .toLowerCase() — не можна використовувати в розв'язанні наших задач. Все тому, що завдання створенні, аби вчити вас алгоритміці, а не для проходження "для галочки" ;)

Виникли питання або труднощі? Зверніться за допомогою до Ш++.

Last updated