Javascript: робота з рядками, функції

8 0 Новини високих технологій

Об'єктно-орієнтовані можливості і асоціативні масиви javascript як семантичні «каркаси» використання функцій і конструкцій для обробки рядків представляють особливий інтерес для програмування процесів обробки інформації за її смислового змісту. На мові javascript функції роботи з рядками можна комбінувати власні смислові конструкції, спрощуючи код і формалізуючи предметну область завдання.

[thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_221.jpeg[/thumb]
У класичному варіанті обробка інформації - це, передусім, рядкові функції. Кожна функція і конструкція мови має свої особливості в синтаксис і семантику javascript. Методи роботи з рядками тут мають свій стиль, але в звичайному застосуванні це просто синтаксис в межах простий семантики: пошук, заміна, вставка, вилучення, контенкация, зміна регістру


Опис рядкових змінних

Для оголошення рядка використовується конструкція var. Можна відразу задати її значення або формувати його в ході виконання алгоритму. Для рядка можна використовувати одинарні або подвійні лапки. Якщо в ній повинна бути лапки, її необхідно екранувати символом «». Рядок, позначений подвійними лапками, вимагає екранування внутрішніх подвійних лапок. Аналогічно та, що зазначена одинарними, критична до наявності всередині одинарних лапок.
[thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_972.jpeg[/thumb]
В даному прикладі в рядку «str_dbl» перераховані корисні спеціальні символи, які можна використовувати в рядку. При цьому сам символ «» екранований.

Рядок - це завжди масив

Робота javascript з рядками може виконуватися безліччю способів. Синтаксис мови надає багато варіантів. В першу чергу ніколи не слід забувати, що (в контексті зроблених описів):


  • str_isV[3]=> «V»;
  • str_chr[1]=> «'»;
  • str_dbl[5]=> «a».
  • Тобто символи рядка доступні як елементи масиву, при цьому кожен спеціальний символ - це один символ. Екранування - це елемент синтакиса. В реальну рядок ніякої «екран» не поміщається. Використання функції charAt() дає аналогічний ефект:
  • str_isV.charAt(3) => «V»;
  • str_chr.charAt(1) => «'»;
  • str_dbl.charAt(5) => «a».
  • Програміст може використовувати будь-який варіант.

    Основні рядкові функції

    В javascript робота з рядками виконана дещо інакше, ніж в інших мовах. Ім'я змінної (або безпосередньо рядка) через точку записується ім'я функції. Зазвичай рядкові функції називають методами в стилі синтаксису мови, але перше слово звичніше.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_483.jpeg[/thumb]
    Найважливіший метод рядка (правильніше - властивість) - її довжина.
  • var xStr = str_isV.length + '/' + str_chr.length + '/' + str_dbl.length.
  • Результат: 11/12/175 по рядках наведеного вище опису. Найважливіша рядкова пара функцій - поділ рядка на масив елементів і злиття масиву в рядок:
  • split(s[, l]);
  • join(s).
  • У першому випадку рядок розбивається за символом-роздільником «s» на масив елементів, в якому кількість елементів не перевищує значення «l». Якщо кількість не задано, то розбивається весь рядок.
    У другому випадку масив елементів зливається в один рядок через заданий роздільник. Прикметна особливість даної пари: розбиття можна здійснювати за одним роздільником, а злиття - з іншого. У цьому контексті В javascript робота з рядками може бути виведена за межі» синтаксису мови.

    Класичні рядкові функції

    Загальні функції обробки рядків:
  • пошук;
  • вибірка;
  • заміна;
  • перетворення.
  • Представлені методами: indexOf(), lastIndexOf(), substr(), substring(), toLowerCase(), toUpperCase(), concan(), charCodeAt() та іншими.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_224.jpeg[/thumb]
    В javascript робота з рядками представлена безліччю функцій, але вони дублюють один одного, або залишені для старих алгоритмів і сумісності. Наприклад, використання методу concat() припустимо, але простіше написати:
  • str = str1 + str2 + str3;
  • Застосування функції charAt() теж має сенс, а ось застосування charCodeAt() має реальне практичне значення. Аналогічно, для javascript перенесення рядка має особливий сенс: у контексті виведення на екран, наприклад, у повідомленні alert() - це «n», в конструкції формування контенту сторінки це « ». У першому випадку це просто символ, а в другому - рядок символів.

    Рядки і регулярні вирази

    В javascript робота з рядками включає в себе механізм регулярних виразів. Це дозволяє виконувати всередині браузера складні пошуки, вибірки і перетворення рядків без звернення до сервера.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_775.jpeg[/thumb]
    Метод match знаходить, а replace замінює знайдене збіг потрібним значенням. Регулярні вирази реалізовані в javascript на високому рівні, по суті своїй, є складними, а зважаючи на специфіку застосування переносять центр ваги з сервера в браузер клієнта.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_956.jpeg[/thumb]
    При застосуванні методів match, search і replace слід не тільки приділити належну увагу тестування на всьому спектрі допустимих значень вихідних параметрів і шуканих рядків, але і оцінити навантаження на браузер.

    Приклади регулярних виразів

    Область застосування регулярних виразів для обробки рядків обширна, але вимагає великої акуратності і уважності від розробника. В першу чергу регулярки знаходять застосування при тестуванні введення користувача в полях форм.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_597.jpeg[/thumb]
    Тут представлені функції, які перевіряють, введення містить ціле число (schInt) або число речовий (schReal). Наступний приклад показує, наскільки ефективно обробляти рядки, перевіряючи їх на наявність тільки припустимих символів: schText - тільки текст, schMail - правильну адресу електронної пошти.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_688.jpeg[/thumb]
    Дуже важливо мати на увазі, що в javascript символи та рядки вимагають підвищеної уваги до локалі, особливо коли потрібно працювати з кирилицею. У багатьох випадках доцільно вказувати реальні коди символів, ніж їх значення. Російських букв це стосується в першу чергу.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_849.jpeg[/thumb]
    Слід особливо відзначити, що далеко не завжди слід виконувати завдання, як вона поставлена. Зокрема, щодо перевірки цілих чисел і речових: можна обійтися не класичними малими методами, а звичайними конструкціями синтаксису.

    Об'єктно-орієнтовані рядка

    В javascript робота з рядками представлена широким асортиментом функцій. Але це не є вагомою підставою для використання їх в первозданному вигляді. Синтаксис і якість функцій бездоганні, але це універсальне рішення. Будь-яке застосування рядкових функцій передбачає обробку реального сенсу, який визначається за даними, областю застосування, конкретним призначенням алгоритму.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_5810.jpeg[/thumb]
    Ідеальне рішення завжди полягає у тому, щоб інтерпретувати дані за їх змістом. Представляючи кожен параметр у вигляді об'єкта, можна сформулювати функції для роботи з ним. Завжди мова йде про обробку символів: числа рядка - це конкретним чином організовані послідовності символів. Є загальні алгоритми, а є приватні. Наприклад, прізвище або номер будинку - це рядки, але якщо в першому випадку допустимі тільки російські букви, то в другому випадку допустимі цифри, російські букви і можуть зустрічатися дефіси або індекси через похилу риску. Індекси можуть бути літерними або цифровими. Будинок може мати корпусу. Всі ситуації не завжди можна передбачити. Це важливий момент у програмуванні. Рідкісний алгоритм не вимагає доопрацювання, а в більшості випадків доводиться систематично коригувати функціонал.
    [thumb]http://hi-news.pp.ua/uploads/posts/2017-11/javascript-robota-z-ryadkami-funkcyi_4511.jpeg[/thumb]
    Формалізація оброблюваної рядкової інформації у вигляді об'єкта покращує читабельність коду, дозволяє вивести його на рівень смислової обробки. Це інша ступінь функціональності і значно кращу якість коду при більшій надійності розробленого алгоритму.