Урок 2. Основы программирования. Типы данных
Пока вы учитесь программированию, придётся написать тысячи строк кода. После учёбы – ещё больше. А по сути всё это набор данных, различающихся по типам и структурам. Что такое структуры данных мы обсудим в следующих уроках, а о типах поговорим сейчас.
Данные – это информация, записанная в той форме, которая удобна компьютеру для обработки и передачи. Данные в языках программирования бывают разных типов. В JavaScript это:
— number – число;
— string – строка;
— boolean – логический тип данных;
— undefined – тип данных, у которых значение не определено;
— null – тип данных с «пустыми» значениями;
— object – тип данных, хранящий свойства и методы.
Во всех языках программирования свои типы данных и способы их обозначений. На курсе «Основы программирования» мы подробно рассмотрим три базовых типа данных в JavaScript:
— числа;
— строки;
— логические или булевы значения.
Для работы ничего дополнительно устанавливать не нужно, всё выполняется в браузере. Понадобится сайт https://codepen.io/, так называемая «песочница», где пишется код JS и сразу выводится результат.
Готовы? Начнём по порядку.
Числа
Для обозначения каждого типа данных в языках программирования используются специальные слова.
В JavaScript тип данных «число» имеет обозначение number.
Теперь посмотрим, как это работает:
1. Заходим на сайт https://codepen.io, регистрируемся и видим такое поле:
2. Во вкладке JS вводим команды:
console.log(typeof 24);
console.log(typeof 24.3);
Справка! В конце каждой строки с командой в JS необходимо ставить точку с запятой. Воспринимайте это как знак препинания в обычном языке, на котором вы говорите. Поставив ; вы сообщите компьютеру, что вы закончили одну «фразу» и начинаете следующую.
Оператор typeof() говорит компьютеру о том, что необходимо вывести в консоль тип введённых данных, а не сами данные.
Результат сразу отображается во вкладке Console:
"number"
"number"
Видим, что тип не отличается у обоих значений и указывается как number.
Строки
Строки – это второй базовый тип данных. В JavaScript они обозначаются как string.
В программировании строкой признаётся последовательность символов, включая буквы, числа и специальные символы (точка, запятая, кавычка, пробел и т. д.).
Справка! Числа определяются как тип данных string, если они заключены в кавычки. Тогда они признаются не числом (number), а одним из символов строки (string). Проверим:
console.log(typeof(24));
console.log(typeof('24'));
Результат в консоли:
"number"
"string"
В программах строки указывают либо в одинарных кавычках-апострофах, либо в двойных кавычках – зависит от языка. В JS разрешено использовать и двойные, и одинарные кавычки по выбору.
При использовании одинарных кавычек, сложность возникает тогда, когда внутри строки стоит такой же символ. Например, 'It's cloudy day'. Английское местоимение It's включает в себя апостроф. Если мы проставим три апострофа (в начале, в слове It's и в конце строки), то компьютер обозначит конец строки после It:
console.log('It's cloudy day');
В консоль выведется:
"It"
Как этого избежать?
В таких случаях мы используем экранирование – ставим перед символом внутри строки обратный слэш «\». Тогда фраза 'it's cloudy day' примет вид 'it\'s cloudy day' и будет правильно считана:
console.log('It\'s cloudy day');
Результат:
"It's cloudy day"
В JavaScript мы можем писать подобные строки в двойных кавычках и результат сразу будет тот, что нужен:
console.log("It's cloudy day");
Результат:
"It's cloudy day"
Каждый символ в строке имеет порядковый номер – индекс. Его используют для того, чтобы указать компьютеру, к какому конкретно символу идёт обращение.
Справка! Отсчёт начинается с 0.
Например, в слове «синий» индексы присваиваются так:
с – 0
и – 1
н – 2
и – 3
й – 4
Строки можно склеивать, вырезать из них части, срезать и проводить другие операции. Рассмотрим, как это сделать.
Практика
1. Вводим в «песочнице» строку 'hello' с помощью команды console.log() через typeof(). В консоли увидим тип string. А если введём числовое значение без кавычек 24.3, увидим тип number:
console.log(typeof('hello'));
console.log(typeof(24.3));
Результат:
"string"
"number"
2. Попробуем ввести строку без typeof() и посмотрим на результат:
console.log('hello');
console.log(24.3);
Результат:
"hello"
24.3
3. Выделим из строки отдельный символ. Например, букву B в слове LOFTBLOG. Эта буква стоит в строке на 5 месте, поэтому имеет индекс 4 (помним, что нумерация с 0). Чтобы обратиться к символу, мы указываем его индекс в квадратных скобках – [4]:
console.log('LOFTBLOG'[4]);
Результат:
"B"
Выделение фрагмента строки
Для выделения фрагмента строки (подстроки) в JS используется три метода:
substring() – срез строки, где необходимо указать только первый или первый и последний символ через запятую.
Если укажем только первый, то отбразится часть строки от него и до конца. Если первый и последний – вырежем часть строки:
console.log('LOFTBLOG'.substring(4));
console.log('LOFTBLOG'.substring(4,6));
Результат:
"BLOG"
"BL"
Справка! Последним считается не индекс последнего символа, который мы хотим выделить, а следующий за ним. Например, в слове LOFTBLOG, буква G имеет индекс 7, но последним считается индекс 8, так как правая граница в срез не входит.
В примере первым символом мы указали четвёртый – B, а последним тот, что находится под индексом 6. Это буква O. Но в консоли мы увидели только две буквы – BL. Это подтверждает то, что правая граница не входит в срез. Если мы захотим вырезать слово BLOG, но укажем последним символ под номером 7, а не 8, то получим:
console.log('LOFTBLOG'.substring(4,7));
Результат:
"BLO"
slice() – действует так же, как и substring(), но ему допускается присваивать отрицательные значения, начиная с -1. Отсчёт начнётся с конца строки, а не с начала:
console.log('LOFTBLOG'.slice(4));
console.log('LOFTBLOG'.slice(-6));
Результат в консоли:
"BLOG"
"FTBLOG"
substr() – используется для выделения фрагмента с указанием индекса начального символа и количества символов после него, включая первый:
console.log('LOFTBLOG'.substr(1,4));
Результат:
"OFTB"
В качестве начального символа мы определили тот, что под индексом 1 – это первая O в слове LOFTBLOG. А через запятую попросили вывести 4 символа, включая его – это OFTB.
Логические (булевы) значения
Здесь за основу берутся логические выражения, на которые компьютер мог бы ответить «да, это верно» или «нет, это не верно». Буль принимает только два значения:
истина – true
ложь – false
Они используются, когда программа принимает решение о том, что делать дальше, анализируя логическое значение выражений. Например, при выполнении алгоритма «ветвление»: если выражение верно, то программа идёт по одному алгоритму, если не верно, то по другому.
Не читали наш первый урок про логику и алгоритмы? Он здесь.
В JavaScript булевы значения имеют тип boolean, писать их нужно с маленькой буквы:
console.log(typeof true);
console.log(typeof false);
Консоль покажет тип:
"boolean"
"boolean"
Напишем логическое выражение и посмотрим, что выводится в консоль в качестве значений. Например, «три равно три».
console.log(3==3);
Справка! Для проверки равенства в JavaScript необходимо прописывать 2 знака равно, так как одинарное равно уже используется для присваивания значений.
Результат:
true
Как видим, значением логического выражения «3==3» является true, так как три действительно равно трём.
Если ввести ложное условие, то значение станет false:
console.log(3==4);
Результат:
false
Преобразование типов данных
Не все типы данных совместимы в программах. Например, по умолчанию нельзя сложить строку с числом. Чтобы не допустить ошибок, один тип необходимо преобразовать в другой.
Одна из особенностей языка JavaScript в том, что здесь выполняется неявное преобразование типов – язык сам понимает, в какой тип преобразовать данные, в зависимости от операции, которую мы выполняем.
Но в JS есть команды, которые позволяют сделать это самостоятельно – провести явное преобразование.
Для этого используются команды:
— String()
— Number()
— Boolean()
console.log(String(2323));
console.log(Boolean('dsgg'));
console.log(Boolean(0));
console.log(Number(2323));
Увидим результат:
"2323"
true
false
2323
Число 2323, написанное без кавычек, имеет тип number. С помощью команды String() мы перевели его в тип string – строка. Это видно по отображению результата. Тип «число» указывается в консоли без кавычек. А тип «строка» в кавычках.
При преобразовании числа и строки в булевый тип, любое значение определяется, как true, кроме числового значения 0.
Если 0, написано как '0', то это тип данных string и он определится, как true, а если мы напишем 0 без кавычек, то это тип данных number и при переводе в буль он равен значению false. Проверим:
console.log(typeof(0));
console.log(typeof('0'));
console.log(Boolean(0));
console.log(Boolean('0'));
Результат:
"number"
"string"
false
true
Любые другие числа кроме 0 определятся как true.
Булевы значения можно преобразовать в числовой тип. Значению true соответствует 1, а false – 0:
console.log(Number(true));
console.log(Number(false));
Результат:
1
0
При преобразовании булевых значений в тип «строка» мы увидим слова «true» и «false» в кавычках, что означает, что тип изменился, так как значения boolean пишутся без кавычек:
console.log(String(true));
console.log(String(false));
Консоль:
"true"
"false"
Виды типизации
Типизация, в зависимости от языка программирования, может быть одновременно:
— сильной или слабой;
— динамической или статической.
Если говорят, что у языка сильная типизация, это значит, что он не позволяет сочетать разные типы данных и не в силах автоматически их преобразовывать. Например, не получится сложить строку с числом в Python.
Слабая типизация означает, что язык программирования выполняет автоматическое (неявное) преобразование типов, в зависимости от операции, которая над данными производится. Например, так происходит в JavaScript.
Чем более сильная типизация у языка, на котором написан код, тем более надежной считается программа. Поскольку именно такая типизация защищает программиста от простых ошибок, которые трудно обнаружить: опечатки, введение данных неподходящего типа.
В языках с динамической типизацией тип данных не фиксируется и может быть разным у одних и тех же данных в разных частях кода.
А в статической типизации тип фиксируется при первом объявлении значений. Изменить это у нас не получится. Ошибка в типе обнаружится еще до запуска программы.
Домашнее задание
Напишите типы данных двух разных языков программирования. Укажите, с какой они типизацией. Например, JavaScript – язык со слабой и динамической типизацией.
Опишите, с помощью каких команд в выбранных языках можно преобразовать друг в друга три базовых типа данных: целое число, строка и булевы значения.