4.02. Особенности кода
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Особенности кода
Строки и инструкции
Как мы ранее определили, есть интерпретируемость (построчность) и компилируемость кода. Но собственно, что такое строка кода?
Строка кода (code line) — это одна физическая строка в тексте программы. Это аналог строки в книге: вы начинаете слева, пишете код, и заканчиваете справа. В большинстве редакторов каждая такая строка имеет свой номер строки.
Важно - не путайте строку кода с типом данных «Строка» (String)!
Номер строки (line number) — это позиционный идентификатор, который помогает ориентироваться в тексте программы. Он особенно важен:
- При отладке (например, сообщения об ошибках указывают номер строки).
- При чтении кода (можно быстро находить нужные участки).
- При работе в команде (ссылаться на конкретную строку).
К примеру, новичок когда отлаживает код с более опытным программистом, с этим и столкнётся - «у тебя на 176-ой строке ошибка», «поставь точку остановы на строку 243», «перейди на 78-ю строку». В некоторых средах (IDE) нумерация строк включена по умолчанию. В других её нужно включать вручную.
Инструкция (statement) — это минимальная логическая единица программы, которая выполняет какое-то действие. Допустим, объявление функции, присваивание значения переменной, вызов функции. Строка — это физическая часть текста, а инструкция - логическая единица (она может занимать несколько строк).
Иногда одна инструкция может быть разбита на несколько строк для удобства чтения. Это делается через:
- Скобки :
(),{},[]— внутри них можно переходить на новую строку. - Обратный слэш \ — явный символ продолжения строки.
Некоторые языки позволяют писать несколько инструкций в одной строке, разделяя их точкой с запятой:
x = 5; y = 10; print(x + y)
Три инструкции в одной строке. Но это считается плохим стилем, потому что снижает читаемость. Если разбить на строки, то будет так:
x = 5;
y = 10;
print(x + y)
Регистр
Регистр (case) — это характеристика букв, указывающая, являются ли они заглавными (прописными) или строчными (маленькими). С помощью регистра выполняется различение символов как заглавных (A–Z) или строчных (a–z).
- Заглавные буквы: A, B, C, ..., Z
- Строчные буквы: a, b, c, ..., z К примеру, здесь две разные переменные:
name = "Локи"
Name = "Танос"
В большинстве языков программирования регистр имеет значение, к примеру, C#, Java, JavaScript, Python, C++, Ruby, PHP, Go. То есть:
myVariable != MyVariable != MYVARIABLE != myvariable
Это четыре разные переменные с точки зрения интерпретатора или компилятора.
Есть и регистронезависимые языки, там язык не важен (частично) - SQL, Visual Basic, Pascal. Но даже в них часто рекомендуют придерживаться стиля ради читаемости.
К примеру в SQL:
SELECT name FROM users WHERE NAME = 'Snake';
-- Все эти слова могут быть написаны в любом регистре
Однако в SQL таблицы и столбцы могут быть регистрозависимыми в зависимости от системы управления БД (например, PostgreSQL). Так что тут следует придерживаться соглашений об именовании - о них мы поговорим позже отдельно.
Знаки препинания
Кто-то с детства использует знаки препинания при написании текста (они и становятся хорошистами-отличниками в школе), а кто-то привык писать лениво, не расставляя запятые, а про точку с запятой и вовсе не слышали.
В отличие от естественных языков, где знаки препинания нужны для интонации и пауз, в программировании они служат синтаксическим элементам:
- разделение выражений;
- обозначение блоков;
- работа с данными;
- определение типов.
Запятая (,) разделяет элементы в списке, аргументы функций, параметры. В некоторых языках может использоваться как оператор (например, в C-like языках).
numbers = [1, 2, 3]
Точка (.) используется для обращения к свойствам и методам объектов (что такое объект, мы ещё поговорим). В некоторых языках точка используется как часть чисел с плавающей точкой. Также точка может быть частью импортов или пространств имён.
System.out.println("Привет");
const person = { name: "Snake" };
console.log(person.name);
Кавычки " и ' используются для обрамления строковых литералов (значения переменных в коде). Некоторые языки различают одинарные и двойные кавычки, в других они взаимозаменяемы.
let greeting = "Привет";
В некоторых языках (JavaScript, PHP) двойные кавычки позволяют интерполировать переменные внутри строки. Интерполяция позволяет подставлять значение переменных в текст.
Переменная — это контейнер, в котором хранится значение. Её можно использовать в разных частях программы, в том числе внутри строк. Но в современных языках есть более удобный способ: интерполяция строк. Это возможность вставлять значения переменных прямо внутрь строки, без необходимости конкатенации (+) или вызова функций. Такой синтаксис делает код чище и понятнее.
Обратные кавычки: позволяют создавать многострочные строки и использовать интерполяцию, поддерживают переносы строк, и выражения вставлять очень удобно, к примеру, ${2 + 2}. Вот пример в JavaScript:
let user = "Довакин";
let greeting = `Привет, ${user}!
Как у тебя дела?`;
console.log(greeting);
// Привет, Довакин!
// Как у тебя дела?
PHP не использует $, но поддерживает интерполяцию внутри двойных кавычек:
$name = "Ульфрик";
echo "Привет, $name"; // Привет, Ульфрик
Точка с запятой (;) используется для завершения инструкции. К примеру, в C, C++, Java она обязательна, а в JavaScript не всегда обязательна. В Python и Ruby точка с запятой не нужна, но может использоваться для разделения нескольких инструкций в одной строке.
Двоеточие (:) используется в разных языках по разному для обозначения начала блока, типизации (в языках со статической типизацией) и для срезов (slicing) в некоторых языках. К примеру, TypeScript прямо требует указание типа:
let count: number = 10;
function greet(name: string): void {
console.log("Hello, " + name);
}
Не игнорируйте знаки препинания — их отсутствие или избыток может привести к ошибкам. Можете изучить стандарты написания кода, чтобы правильно расставлять запятые, но это знаете, штука интуитивная. На практике проще, чем кажется - но новички в основном то путают кавычки, то забывают точку с запятой или запятую, после чего всё и ломается.
Пользуйтесь подсветкой синтаксиса — она поможет увидеть, где вы что написали. Если используете язык с обязательным завершением строк точкой с запятой (Java, C++) — не забывайте её ставить.
Скобки
Скобки — это символы, которые всегда используются парами: открывающая ((, {, [, <) и закрывающая (), }, ], >).
Они служат для группировки выражений, определения блоков кода, объявления структур данных, указания типов или шаблонов, управления приоритетом операций.
Круглые скобки ():
- вызов функций и методов;
- передача параметров;
- изменение порядка выполнения операций;
- создание кортежей.
Это те самые скобки для функции(и, её, параметров). Если вы забудете скобку — это приведёт к синтаксической ошибке, наверняка ещё с математики мы помним правило - скобка открывающая требует закрывающую. Возможно, учителя в начальных классах вам даже дописывали красной ручкой забытую скобку. Так и будет в программировании.
Фигурные скобки {}, как мы уже говорили ранее, обозначают блок кода (тело функции, условия, циклы). Они создают объекты (в JS), создают множества и словари. В Python фигурные скобки не нужны для блоков — вместо них используется отступ. Но к этому опять же, вернёмся.
Квадратные скобки [] используются для доступа к элементам по индексу (списки, массивы), срезов, создания списков и массивов, и в некоторых языках для индексации.
Угловые скобки <> представляют собой обобщённые типы (generics), шаблоны (templates), и теги (в HTML/XML).
<p>Это абзац в HTML</p>
// C++: шаблон
std::vector<int> numbers;
// Java: обобщённый тип
List<String> names = new ArrayList<>();
Открывающие и закрывающие скобки — почему важна пара? Каждая открывающая скобка должна иметь соответствующую закрывающую, иначе программа не будет работать - программа будет ожидать, что она всё ещё в скобках, и не воспримет следующую инструкцию.
Не забывайте закрывать скобки — это самая частая ошибка новичков. Редакторы кода часто подсвечивают парные скобки и помогают находить незакрытые. Используйте автоформатирование в редакторе — он поможет расставить скобки правильно. Пишите отступы внутри фигурных скобок — это улучшает читаемость. Разбирайтесь, где какой тип скобок нужен — например, в JSON всегда используются фигурные скобки для объектов. Дуамю, вы ещё освоитесь с такими особенностями.
Специальные символы
Специальные символы — это знаки, которые не являются буквами или цифрами, но имеют семантическое значение в коде. Они могут быть:
- Операторами (+, -, *, /, =, ==, !=, &&, ||)
- Метасимволами (например, _, #, @)
- Частью конструкций : аннотаций, указания типов, условий
- Инструментами для работы с данными
Давайте рассмотрим в форме таблицы.
| Символ | Название | Использование | Примеры |
|---|---|---|---|
_ | Подчеркивание | Приватные переменные, игнорирование значений, разделение чисел | int _x; 1_000_000 |
* | Звёздочка | Умножение, указатель, распаковка, повторение | a * b *ptr "-" * 5 |
# | Октоторп / решётка | Комментарии (Python), препроцессор (C), метаданные | # комментарий #include <stdio.h> |
@ | "Собака" | Декораторы (Python), аннотации (Java), email/метки | @decorator @Override |
/ | Косая черта | Деление, пути файлов, регулярные выражения | 5 / 2 path/to/file /regex/ |
? | Вопросительный знак | Nullable-типы (Kotlin), тернарный оператор, Элвис-оператор | String? name age > 18 ? "ok" : "no" |
! | Восклицательный знак | Отрицание, ненулевые значения | if (!valid) value!! |
- | Дефис / минус | Вычитание, отрицательные числа, флаги | x = -5, 5 - 3 --verbose |
+ | Плюс | Сложение, конкатенация | 1 + 2, "Hello" + "World" |
| | Вертикальная черта | Логическое ИЛИ, пайплайн, разделение типов | a || b |
~ | Тильда | Побитовое НЕ, деструкторы (C++), домашняя директория | (~user) ~x ~MyClass() ~/Documents |
= | Равно | Присваивание, сравнение (==, !=) | x = 5 if (x == 5) |
</> | Меньше / Больше | Сравнение, обобщённые типы (generics), HTML/XML | if (a < b) List<String> <div> |
& | Амперсанд | Логическое И, ссылки (C++), битовые операции | a && b int& ref flags & mask |
% | Процент | Остаток от деления, форматирование строк | 5 % 2 "%.2f" % value |
$ | Доллар | Переменные (Bash), интерполяция (JS), шаблоны | $x ${name} $(ls) |
Не все символы одинаково используются во всех языках — всегда уточняйте контекст, поэтому тут важно рассматривать каждый язык отдельно. Узнайте, какие символы часто используются в вашем языке — это поможет читать и писать код быстрее. Пользуйтесь автодополнением в IDE — оно подскажет, что может означать символ. Избегайте перегрузки символов без причины — это снижает читаемость кода.
Экранирование
Экранирование (escaping) — это способ указания, что определённый символ должен интерпретироваться не как обычный текст , а как литерал , либо наоборот, как специальный управляющий символ.
Для этого перед таким символом ставится символ экранирования — чаще всего это обратный слэш \ .
Зачем нужно экранирование?
Потому что некоторые символы уже зарезервированы для выполнения определённых функций - к примеру, кавычки (" и ') обозначают начало и конец строки, а символы \n, \t — это спецсимволы: перенос строки и табуляция. В регулярных выражениях символ . означает «любой символ», но если вы хотите использовать точку буквально — её нужно экранировать.
Примеры экранирования:
print("Он сказал: \"Привет!\"")
# Результат: Он сказал: "Привет!"
print("Первая строка\nВторая строка")
# \n — это спецсимвол перевода строки
print("C:\\Program Files\\MyApp")
# Чтобы показать один \, нужно написать \\
Где ещё используется экранирование?
- URL и пути. Символы вроде пробела, #, & в URL нужно кодировать:
https://example.com/hello world → https://example.com/hello%20world
-
JSON / XML / HTML. Нужно экранировать символы
<,>,&: -
Командная строка / Shell - там требуется экранировать кавычки.
Отступы
Отступы (indentation) — это сдвиг текста относительно левого края. Они нужны для улучшения читаемости и определения логических блоков кода (например, тело цикла или условие). В большинстве языков отступы — вопрос стиля, но в Python они часть синтаксиса (к примеру, если убрать отступ в Python после if, то будет ошибка).
блок кода {
тело <- обратите внимание на оступ;
ещё один блок кода {
<-обратите внимание на ещё один отступ;
}
}
Табуляция (\t) представляет собой один символ, который говорит «Сделай отступ». Это клавиша Tab. Длина отступа зависит от настройки среды (часто 4 или 8 пробелов) - внешне это выглядит как один большой пробел.
Пробелы, в отличие от табуляции, являются литералом - каждый пробел будет отдельным символом. Они используются, чтобы контролировать размер отступа.
В проекте нужно выбирать один стиль - часто рекомендуют использовать четыре пробела вместо табуляции, так что здесь единообразия нет. Нажатие Enter ⏎ в редакторе создаёт новую строку кода , то есть физически делит текст программы на строки. Код не реагирует на простой Enter, если инструкция не закончена. Но если вы начали блок (например, if), то новая строка должна иметь правильный отступ.
Большинству языков программирования всё равно на пробелы и переводы строк, кроме случаев, когда они разделяют ключевые слова, операторы или идентификаторы. Исключение - Python, там отступы обязательны. Но обычные пробелы внутри строки или вокруг операторов — не влияют на выполнение.
Используйте автоформатирование в IDE (VS Code, PyCharm и др.) — он поможет соблюдать стиль.