Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remade definition #31

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
69 changes: 47 additions & 22 deletions modules/30-variables/10-definition/description.ru.yml
Original file line number Diff line number Diff line change
@@ -1,53 +1,78 @@
---

name: Переменные в С++
name: Что такое переменная?
theory: |
В С++ как и во многие языки для хранения данных используются переменные.
Каждая переменная имеет свой тип и имя. Простейшее определение переменной может выглядит так:
Представьте, что мы пишем программу, которая складывает два числа и выводит результат на экран два или даже пять раз. Можно решить задачу в лоб и написать следующее:

```cpp
int num;
int main() {
std::cout << 2 + 3;
std::cout << 2 + 3;
}
```

Стоит учитывать, С++ это регистрозависимый язык и переменные int num и int Num - это две разные переменные. Кроме того, в качестве имени переменной нельзя использовать ключевые слова языке C++.
Выше в коде мы определили переменную типа int с именем num, но не про инициализировали ее, что же хранится в этой переменной?
На самом деле это зависит от ее места определения.
Если мы определим переменную внутри функции:
Но тут возникает проблема, что если результат сложения этих двух чисел нам понадобится где-то в программе или мы захотим поменять значение одного из слагаемых?

Нам придется найти все места в программе и выполнить необходимую замену. Но можно сделать это более изящно. Достаточно определить три переменные, в которых мы будем хранить значение чисел и результат их сложения. Давайте перепишем код с учетом наших новых знаний:

```cpp
int main() {
int num;
std::cout <<"num = " << num << "\n";
int numOne = 2;
int numTwo = 3;
int result = numOne + numTwo;
std::cout << result;
return 0;
}
```

То компилятор ее про инициализирует по умолчанию значением - неопределенно, либо в ней будет лежать мусор из памяти(тут зависит от компилятора).
Разберем подробнее что тут происходит. Когда мы определяем переменную, в начале указываем ключевое слово, которое обозначает тип данных.

В данном случае у нас тип int или integer, то есть целое число. После типа идет имя переменной, оператор присваивания и значение которое будет хранится в переменной.

<pre class='hexlet-basics-output'>
num = 4200475
</pre>
Стоит учитывать, С++ - это регистрозависимый язык и переменные int num и int Num - это две разные переменные. Кроме того, в качестве имени переменной нельзя использовать ключевые слова языке C++.

Если вне функции:
Можно определить переменную, не присваивая ей значение:

```cpp
int num;
```

Но так делать не стоит, потому что, если вы ее забудете проинициализировать, компилятор ей присвоит значение по умолчанию. Какое? Тут уже зависит от компилятора и места определения переменной.

В примере ниже использовался компилятор clang:

```cpp
int numOut;

int main() {
std::cout <<"num = " << num << "\n";
return 0;
int numIn;
std::cout << "The numOut = " << numOut << endl;
std::cout << "The numIn = " << numIn << endl;
}
```

Переменная получит значение 0.
Компилятор присвоил переменной значение 0.

<pre class='hexlet-basics-output'>
num = 0
The numOut = 0
The numIn = 0
</pre>

По этому, что бы избежать всяких неприятностей, лучше инициализировать переменную сразу каким-то нейтральным значением.
Можно настроить компилятор так, что бы он не смог скомпилировать программу если есть не проинициалезированные переменные, например в среде Visual Studio компилятор так настроен по умолчанию.
Так же для удобства анализа программы, переменные принято создавать как можно ближе к тому месту где они используются.
Хорошей практикой считается определять переменную ближе к тому месту в коде где она будет использоваться и инициализировать сразу нейтральным значением.
Например, если это счетчик цикла, то 0, если в переменную будет собираться строка, то пустой строкой.

```cpp
int main() {
string acc = "";
acc += "Hello,";
acc += "World";
std::cout << acc;
}
```

<pre class='hexlet-basics-output'>
Hello, World!
</pre>


instructions: |
Expand Down