Вправа – блоки коду та область змінних
- 11 хвилин
Блок коду – це одна або кілька операторів C#, які визначають шлях виконання. Оператори поза блоком коду впливають на час, якщо та як часто цей блок коду виконується під час виконання. Межі блока коду зазвичай визначаються хвилястими фігурними дужками. {}
Крім впливу на шлях виконання, блоки коду також можуть впливати на область змінних. Зразки коду, які ви перевіряєте під час цієї вправи, допоможуть зрозуміти зв'язок між блоками коду та змінною областю.
Блоки коду впливають на область оголошення змінної
Змінна область – це видимість змінної для іншого коду в програмі. Змінна з локальною областю доступна лише в блоці коду, у якому її визначено. Якщо ви спробуєте отримати доступ до змінної за межами блоку коду, з'явиться повідомлення про помилку компілятора.
Решта цієї одиниці досліджує зв'язок між блоками коду та змінною областю.
Підготовка середовища кодування
Цей модуль містить практичні дії, які допоможуть вам побудувати та запустити демонстраційний код. Вам рекомендується виконати ці дії, використовуючи Visual Studio Code як середовище розробки. Використання коду Visual Studio для цих дій допоможе вам стати більш зручним написанням і виконанням коду в середовищі розробників, яке використовують професіонали по всьому світу.
Відкрийте Код Visual Studio.
Щоб відкрити код Visual Studio, можна скористатися меню "Пуск" Windows (або еквівалентним ресурсом для іншої ОС).
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку перейдіть до папки "Робочий стіл Windows".
Якщо у вас є інше розташування папки, де зберігаються проекти коду, натомість можна використовувати це розташування папки. Для цього навчання важливо мати розташування, яке легко знайти та запам'ятати.
У діалоговому вікні Відкрити папку виберіть Вибрати папку.
Якщо з'явиться діалогове вікно безпеки з запитанням, чи довіряєте ви авторам, виберіть Так.
У меню коду Visual Studio Code виберіть Новий термінал.
Зверніть увагу, що в командному рядку на панелі терміналів відображається шлях до папки для поточної папки. Наприклад:
C:\Users\someuser\Desktop>Примітка
Якщо ви працюєте на власному ПК, а не в ізольованому середовищі або в розміщеному середовищі, а завершили інші модулі Microsoft Learn у цій серії C# , можливо, ви вже створили папку проекту для зразків коду. У такому разі можна пропустити наступний крок, який використовується для створення консолі в папці TestProject.
У командному рядку термінала, щоб створити нову програму консолі в указаній папці, введіть такий запит:
dotnet new console -o ./CsharpProjects/TestProjectЦя команда .NET CLI використовує шаблон програми .NET для створення нового проекту програми консолі C# у вказаному розташуванні папки. Ця команда створює папки CsharpProjects і TestProject і використовує TestProject як ім'я
.csprojфайлу.Якщо відображається повідомлення про те, що файли вже існують, виконайте наступні кроки. Ви повторно використовуватимете наявні файли проекту.
У поданні EXPLORER розгорніть папку CsharpProjects .
Має відобразитися папка TestProject і два файли, файл програми C# з іменем Program.cs і файл проекту C# з іменем TestProject.csproj.
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку виберіть папку CsharpProjects , а потім натисніть кнопку Вибрати папку.
У поданні EXPLORER розгорніть папку TestProject і виберіть Program.cs.
Видалення наявних рядків коду.
Ви використовуватимете цей проект консолі C# для створення, створення та виконання зразків коду під час цього модуля.
Закрийте панель терміналів.
Створення змінної в блоці коду
Ви почнете з перегляду випадку ініціалізованої змінної в блоці коду.
Переконайтеся, що на панелі "Редактор" відкрито код Visual Studio Code і Program.cs.
Примітка
Program.cs має бути пустим. Якщо це не так, виберіть і видаліть усі рядки коду.
Введіть такий код у редактор коду Visual Studio:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }У меню Файл код Visual Studio Code виберіть Зберегти.
Перед створенням або запуском коду необхідно зберегти файл Program.cs.
На панелі EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші TestProject , а потім виберіть Відкрити в інтегрованому терміналі.
Відкриється панель терміналів. Термінал має містити командний рядок, який показує, що термінал відкрито в папці TestProject.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Примітка
Якщо відображається повідомлення "Не вдалося знайти проект для запуску", переконайтеся, що в командному рядку термінала відображається очікуване розташування папки TestProject. Наприклад:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Ви побачите такий результат:
Inside the code block: 10
Це очікуваний результат. Але що робити, якщо потрібно отримати доступ до змінної value за межами if блоку коду оператора?
Спроба отримати доступ до змінної поза блоком коду, у якому її оголошено
У редакторі коду Visual Studio створіть новий кодовий рядок під блоком
ifкоду оператора.У створеному пустому рядку коду додайте такий рядок коду:
Console.WriteLine($"Outside the code block: {value}");Переконайтеся, що оновлений код має такий вигляд:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу, що під час спроби запустити програму з'являється помилка компіляції:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Частина Program.cs(7,46) повідомлення повідомляє, що помилка пов'язана з рядком 7 у файлі Program.cs стовпець 46.
Ця помилка створюється, тому що змінна, оголошена всередині блоку коду, доступна лише (її можна побачити) лише в цьому блоці коду. Оскільки до змінної не можна отримати доступ за межами блоку коду, у якому її оголошено, value доступ до неї не можна отримати з рядка 7 коду.
Змінну, оголошену в блоці коду методу, називають локальною змінною. Під час перегляду статей, у яких обговорюється змінна область, може відображатися локальна змінна терміна, яка використовується.
Переміщення оголошення змінної над блоком коду
Щоб отримати доступ до змінної як у блоці коду, так і за її межами, потрібно оголосити змінну до (вище) блоку коду, щоб код поза блоком коду міг "бачити" змінну.
Оновіть код у редакторі коду Visual Studio, як показано нижче.
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Щоб переглянути оновлення, знайдіть хвилинку.
Зверніть увагу, що
valueзараз оголошено (але не ініціалізовано) поза блокомifкоду.Збережіть оновлення за допомогою коду Visual Studio, а потім запустіть код.
Зверніть увагу, що ви все ще отримуєте помилку компіляції.
На цей раз під час спроби запустити програму, з'являється таке повідомлення про помилку компіляції:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Помилка пов'язана з рядком 6 у блоці коду, оскільки
valueнеініціалізовано (не призначено значення). Якщо рядокvalue = 10;коду розташовано над блокомifкоду оператора, застосунок буде компілюватися правильно, і все буде добре. Однак, оскількиvalueйого не ініціалізовано, доступ до нього не можна отримати в блоці коду.Щоб переконатися, що ваші змінні ініціалізовано перед спробою отримати до них доступ, вирішите цю проблему.
Ініціалізація змінної як частини змінної оголошення
Щоб ініціалізувати
valueйого як частину оголошення змінної, оновіть код таким інакше:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Цей код усуває помилку компіляції "непризначена локальна змінна", ініціалізуючи
valueїї як частину оголошення змінної.Щоб зберегти та запустити код, скористайтеся кодом Visual Studio.
Зверніть увагу, що тепер, коли ви запускаєте програму, відображається такий результат:
Inside the code block: 0 Outside the code block: 10
Перевірте інтерпретацію коду компілятора
Щоб уникнути помилок середовища виконання, компілятор C# аналізує код у редакторі коду Visual Studio та під час створення. Однак компілятор не завжди може інтерпретувати код так само, як і ви.
Розглянемо такі два зразки коду, які, як видається, використовуються для однієї мети:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Ви можете помітити, що ці два зразки завжди мають призвести до однакового результату, але компілятор C# інтерпретує ці два зразки коду по-різному.
Для першого зразка коду компілятор інтерпретує flag як логічну змінну, якій можна призначити значення або truefalse. Компілятор робить висновок, що якщо flag це false, value не буде ініціалізовано під час виконання другого Console.WriteLine() . По суті компілятор вважає можливі такі два шляхи виконання коду:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
І
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Оскільки компілятор вважає другий шлях можливістю (для зразка коду 1), під час створення створюється повідомлення про помилку. Крім того, редактор коду в Коді Visual Studio попереджає вас про цю проблему, відображаючи червону хвилясту лінію під value (під блоком коду).
Для другого зразка коду пособник робить висновок, що вміст if блоку коду виписки завжди виконуватиметься (true завжди true). Компілятор не створює помилку збірки, тому що інтерпретує другий зразок коду, щоб мати один шлях виконання, як описано нижче.
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Повторити введення
Ось кілька важливих речей, які слід пам'ятати про блоки коду:
- Коли ви оголошуєте змінну всередині блоку коду, її видимість локальна для цього блоку коду, і ця змінна не може бути доступна за межами блоку коду.
- Щоб переконатися, що змінна відображається як у блоці коду, так і за її межами, потрібно оголосити змінну перед блоком коду (зовні та над блоком коду).
- Переконайтеся, що змінні ініціалізовано, перш ніж код намагатиметься отримати до них доступ (для всіх потенційних шляхів виконання коду).
Перевірте свої знання
Зворотний зв’язок
Чи була ця сторінка корисна?
Ні
Потрібна допомога із цією темою?
Хочете скористатися Ask Learn, щоб отримати пояснення чи інструкції із цієї теми?