Вітаю всіх! Нещодавно я завершив курс "Основи програмування на C" від Генчая Йилдиза. Цю статтю я готую як записи для себе, а також для закріплення знань. Думаю, що це може бути корисним і для інших.
У цій статті я надам нотатки та визначення тем, які були охоплені на курсі. У тих місцях, де вважатиму за потрібне, я підкріплю матеріал прикладами коду і завершу статтю таким чином. Бажаю приємного читання!
Що таке C#?
C# — це мова програмування, розроблена Microsoft, яка працює на платформі .NET, є сучасною, об'єктно-орієнтованою та багатофункціональною.
Вона надає потужну структуру і є популярною та зручною мовою для розробки як настільних, так і веб-додатків.
Що таке .NET?
.NET — це платформа, розроблена Microsoft, яка використовується для розробки програмного забезпечення з відкритим кодом.
Що таке .NET Framework і .NET Core?
Це платформи для розробки програмного забезпечення, створені Microsoft.
- Підтримка платформ:
- .NET Framework працює тільки на Windows.
- .NET Core підтримує кросплатформеність (Windows, macOS, Linux).
- Відкритий код:
- .NET Framework є закритим кодом.
- .NET Core розроблений з відкритим кодом і доступний на GitHub.
- Продуктивність:
- .NET Framework, оскільки використовує старі технології, іноді може мати обмеження продуктивності.
- .NET Core розроблений із використанням сучасних технологій, що дозволяє досягти кращої продуктивності.
Що таке компілятор?
Компілятор — це програма, яка перетворює код, написаний на високорівневій мові програмування, у машинний код або проміжну мову. Цей процес дозволяє комп'ютеру виконати код. Компілятор аналізує код, перевіряє на помилки і створює виконуваний файл.
Що таке Visual Studio (VS)?
Visual Studio — це інтегроване середовище розробки (IDE), розроблене Microsoft, яке підтримує багато мов програмування, таких як C#, C++, Python та інші.
Що таке Visual Studio Code (VS Code)?
Visual Studio Code — це легкий і відкритий текстовий редактор, розроблений Microsoft, який підтримує програмування на багатьох мовах, таких як JavaScript, Python, C++, HTML/CSS та інших.
Відмінності:
- Visual Studio: Повне і багатофункціональне середовище розробки, підходить для великих проєктів.
- Visual Studio Code: Легкий, гнучкий текстовий редактор, підходить для малих проєктів і швидкої розробки.
Обидва інструменти популярні, але вибір залежить від конкретної мети використання.
Основні принципи програмування:
Підсумовуючи загальні визначення, давайте звернемо увагу на найбільш важливі принципи, які допомагають програмісту стати хорошим спеціалістом. Їх стає все більше, але на мою думку, ось основні:
- Простота (Simplicity)
- Уникання повторення коду (DRY — Don’t Repeat Yourself)
- Значущі імена (Meaningful naming)
Я не буду детально пояснювати ці принципи, вони зрозумілі за назвами, але якщо вам цікаво дізнатися більше, ви можете ознайомитися з детальними поясненнями за цим посиланням.
Ключові поняття програмування
Нижче наведені деякі важливі поняття програмування і їх короткі пояснення. Правильне розуміння цих понять сприяє ефективному та стабільному процесу розробки програмного забезпечення.
- Main:
Точка початку програми. У більшості програм функціяMain()
є першим місцем, де починається виконання програми. В таких мовах, як C#, це виглядає якstatic void Main()
. - Dotnet run:
У проєктах .NET Core командаdotnet run
у терміналі або командному рядку дозволяє запустити проєкт.
Ця команда компілює проєкт і робить його виконуваним. - Toplevel:
Це особливість, введена в C# 9.0, яка дозволяє писати код без визначення класів або методів. Це полегшує написання коротших та простіших програм. Наприклад, код можна писати безпосередньо на рівні файлу. - Коментар (Comment):
Це рядки в коді, які використовуються для додавання пояснень, які ігнорує компілятор. Вони можуть бути однорядковими (//
) або багаторядковими (/* ... */
). Вони пояснюють, що робить код. - TODO:
Це позначка, яку програмісти використовують для позначення невиконаних завдань.TODO
зазвичай вказує на дії, які потрібно виконати під час розробки, і нагадує програмістам про те, що ці завдання повинні бути виконані в майбутньому. - Налагодження (Debugging):
Процес пошуку та виправлення помилок, що виникають під час виконання програми. Налагодження є основним методом перевірки, чи правильно працює програма. - Точка зупину (Breakpoint):
Позначка, яка використовується під час налагодження. Програма зупиняється на певному рядку, і розробник може перевірити стан програми. Зазвичай використовується в середовищі розробки (IDE). - Вікно моніторингу (Watch Penceresi):
Інструмент, який використовується під час налагодження для відстеження значень конкретних змінних. Розробник може спостерігати за значеннями змінних під час виконання програми. - Область видимості (Scope):
Це область, в межах якої змінні та функції є доступними. Область видимості змінної або функції визначає, в якому блоці (наприклад, всередині функції чи глобально) її можна використовувати. - Const (Константа):
Константа — це значення, яке не можна змінити після визначення. Визначається за допомогою ключового словаconst
. Константи зазвичай визначаються на початку програми і використовуються для значень, які не повинні змінюватися протягом роботи програми.
Що таке змінна?
Змінна — це іменоване місце в пам'яті, яке використовується для зберігання даних у програмі. Змінні можуть мати різні типи даних і їх значення можуть змінюватися протягом виконання програми.
- Value Type (Тип значення):
Тип значення — це тип даних, в якому самі дані зберігаються в змінній. Коли змінна типу значення копіюється, створюється копія оригінальної змінної. Прикладом типів значень єint
,double
,char
.
int a = 5; // Змінна 'a' є типом значення, тип int.
int b = a; // Змінній 'b' присвоюється копія змінної 'a', 'a' та 'b' є незалежними.
- Primitive Type (Простий тип):
Прості типи — це вбудовані типи даних, які надаються мовою програмування. В таких мовах, як C#, прості типи зазвичай є типами значення. Наприклад,int
,bool
,char
,float
— це прості типи.
int number = 10; // Змінна 'number' є простим типом int.
bool isActive = true; // Змінна 'isActive' є простим типом bool.
- Тип значення:
Змінні типу значення зберігають самі дані в пам'яті. Коли така змінна копіюється в іншу, створюється копія значення, і обидві змінні залишаються незалежними одна від одної.
int x = 15; // 'x' є змінною типу значення (int).
int y = x; // Значення 'x' копіюється в 'y'.
x = 20; // 'x' змінюється на 20, але 'y' залишиться рівним 15.
Console.WriteLine(x); // Вивід: 20
Console.WriteLine(y); // Вивід: 15
- Типи:
Ось деякі приклади типів значень:
Числові типи:int
,long
,float
,double
Тип символу:char
Логічний тип:bool
Структури (Struct): Користувацькі типи значень. - Правила:
Змінні визначаються згідно з певними правилами: - Ім'я змінної повинно починатися з літери або підкреслення (_).
- Цифри не можуть бути першими символами в імені змінної.
- Не можна використовувати пробіли, спеціальні символи або зарезервовані слова.
Ім'я змінної має бути значущим і відображати тип даних, що вона містить. - Присвоєння значення:
Присвоєння значення — це процес надання змінній певного значення.
int x = 25;
- Значення за замовчуванням та літерали за замовчуванням:
Значення за замовчуванням:
Змінні типу значення мають певне значення за замовчуванням, коли вони не ініціалізовані. Наприклад, дляint
значення за замовчуванням — 0, а дляbool
— false.
Літерали за замовчуванням:
Ключове словоdefault
використовується для отримання значення за замовчуванням для типу. Наприклад,default(int)
повертає 0. - Читання та присвоєння значень:
Читання значень змінних і присвоєння нових значень — це основні операції.
int number = 10; // Змінній 'number' присвоюється значення 10.
string name = "John"; // Змінній 'name' присвоюється значення "John".
- Глибоке та поверхневе копіювання:
Поверхневе копіювання (Shallow Copy):
Поверхневе копіювання копіює лише адресу об'єкта. Тобто між оригінальним об'єктом і його копією існує спільна ссилка. Якщо об'єкт містить інші об'єкти, копіюються тільки їхні посилання, а не самі об'єкти.
Глибоке копіювання (Deep Copy):
Глибоке копіювання створює копії самого об'єкта та всіх його вкладених об'єктів. Таким чином, між оригінальним об'єктом і копією забезпечується повна незалежність.
Ці поняття є основою для розуміння змінних і керування пам'яттю в програмуванні та займають важливе місце в процесі розробки програмного забезпечення.
Що таке тип Object?
У мові C# тип object
є базовим типом для всіх типів даних і може зберігати всі інші типи даних. Іншими словами, всі типи (типи значень, типи посилань) можна перетворити на тип object
. Тип object
може зберігати будь-які дані, але при роботі з ним важливо правильно визначати тип даних.
- Boxing і UnBoxing
Boxing і Unboxing — це процеси перетворення між типами значень і типом object
.
Boxing — це перетворення значення типу, наприклад int
, double
, в тип object
. Цей процес можна уявити як покладання значення в коробку.
int num = 25; // num — тип значення.
object obj = num; // num перетворюється в тип object (Boxing).
Console.WriteLine(obj); // Вивід: 25
Unboxing: Unboxing — це процес перетворення даних типу object
назад у відповідний тип значення. Тобто, витягування значення з коробки.
object obj = 25; // obj — тип object і містить значення типу int.
int num = (int)obj; // obj перетворюється в тип int (Unboxing).
Console.WriteLine(num); // Вивід: 25
Примітка: Під час процесу unboxing може виникнути помилка, якщо типи несумісні. Наприклад, спроба unbox'ити значення типу object
в невірний тип призведе до помилки InvalidCastException
.
Оператори
- Оператор @
Оператор@
дозволяє використовувати ключові слова як імена змінних у C#. Крім того, він дозволяє ігнорувати спеціальні символи в текстових рядках.
string @class = "C#"; // 'class' є ключовим словом, але за допомогою '@' його можна використовувати як ім'я змінної.
Console.WriteLine(@class);
string path = @"C:\Users\Public"; // Використовується для ігнорування спеціальних символів у текстових рядках.
Console.WriteLine(path);
- Оператор Cast
Оператор cast використовується для перетворення одного типу даних в інший.
double num = 9.78;
int convertedNum = (int)num; // Операція cast
Console.WriteLine(convertedNum); // Вивід: 9
- Арифметичні оператори
Виконують операції додавання, віднімання, множення, ділення та отримання залишку.
int a = 10;
int b = 3;
Console.WriteLine(a + b); // Вивід: 13
Console.WriteLine(a - b); // Вивід: 7
Console.WriteLine(a * b); // Вивід: 30
Console.WriteLine(a / b); // Вивід: 3
Console.WriteLine(a % b); // Вивід: 1
- Оператори порівняння
Порівнюють два значення та повертають true або false.
int x = 5;
int y = 10;
Console.WriteLine(x > y); // Вивід: False
Console.WriteLine(x <= y); // Вивід: True
- Логічні оператори
Використовуються для логічних операцій:&&
(і),||
(або),!
(не).
bool a = true;
bool b = false;
Console.WriteLine(a && b); // Вивід: False
Console.WriteLine(a || b); // Вивід: True
Console.WriteLine(!a); // Вивід: False
- Оператор !
Виконує логічну операцію "не". Перетворює вираз на протилежне значення.
bool isTrue = true;
Console.WriteLine(!isTrue); // Вивід: False
- Тернарний оператор
Повертає два різні значення в залежності від умови.
int number = 10;
string result = (number > 5) ? "Великий" : "Малий";
Console.WriteLine(result); // Вивід: Великий
- Оператор присвоєння
Використовується для присвоєння значення змінній.
int a = 5;
a += 3; // a = a + 3
Console.WriteLine(a); // Вивід: 8
- Оператор доступу до членів
Використовується для доступу до членів об'єкта (.
).
string text = "C#";
Console.WriteLine(text.Length); // Вивід: 2
- Оператор sizeof
Повертає розмір типу в пам'яті.
Console.WriteLine(sizeof(int)); // Вивід: 4
- Оператор typeof
Повертає метадані типу.
Type type = typeof(int);
Console.WriteLine(type); // Вивід: System.Int32
- Оператор default
Повертає значення за замовчуванням для типу.
int defaultValue = default(int); // Значення за замовчуванням - 0.
Console.WriteLine(defaultValue); // Вивід: 0
- Оператори is — is null — is not
Перевіряють, чи є у об'єкта конкретний тип.
object obj = "C#";
Console.WriteLine(obj is string); // Вивід: True
Console.WriteLine(obj is null); // Вивід: False
- Оператор as
Використовується для безпечного перетворення типу.
object obj = "C#";
string str = obj as string;
Console.WriteLine(str); // Вивід: C#
- Оператори Nullable
Позначають типи, які можуть приймати значення null.
int? nullableInt = null;
Console.WriteLine(nullableInt.HasValue); // Вивід: False
- Оператор Null Coalescing
Повертає альтернативне значення, якщо значення null.
string name = null;
Console.WriteLine(name ?? "За замовчуванням"); // Вивід: За замовчуванням
- Оператор Null Coalescing Assignment
Використовується для присвоєння значення, якщо воно null.
string name = null;
name ??= "За замовчуванням";
Console.WriteLine(name); // Вивід: За замовчуванням
Що таке ключове слово?
Ключові слова (keywords) — це зарезервовані слова в мові програмування, які використовуються для виконання конкретних завдань. У C# ключові слова визначають структуру та зміст коду. Вони не можуть бути використані як імена змінних, класів тощо.
- Var
Ключове словоvar
дозволяє компілятору автоматично визначати тип змінної. Тип визначається в залежності від значення, яке присвоюється змінній.
var number = 10; // Тип визначається як int.
var name = "C#"; // Тип визначається як string.
Console.WriteLine(number.GetType()); // Вивід: System.Int32
Console.WriteLine(name.GetType()); // Вивід: System.String
- Dynamic
Ключове словоdynamic
використовується для визначення змінної, тип якої визначається під час виконання програми.
Перевірка типу не проводиться під час компіляції.
dynamic value = 10;
Console.WriteLine(value); // Вивід: 10
value = "C#";
Console.WriteLine(value); // Вивід: C#
• З концепцією і без концепції
Концепція вказує на підхід, заснований на певній структурі або правилах у коді.
- З концепцією: Тип або мета змінної чітко визначені і грунтуються на певних правилах.
int age = 25; // Тип і мета чітко зазначені.
- Без концепції: Тип або мета зазвичай мають гнучку структуру. Використовується більш загальний або динамічний підхід.
dynamic data = 25; // Тип і мета є гнучкими.
- Ref
Ключове словоref
використовується для передачі змінної за посиланням. Це дозволяє змінювати її оригінальне значення.
void ChangeValue(ref int x)
{
x = 20;
}
int number = 10;
ChangeValue(ref number);
Console.WriteLine(number); // Вивід: 20
- Out
Ключове словоout
використовується для повернення значення змінної з методу. Початкове значення змінної не потрібно.
void GetValues(out int x, out int y)
{
x = 5;
y = 10;
}
int a, b;
GetValues(out a, out b);
Console.WriteLine(a); // Вивід: 5
Console.WriteLine(b); // Вивід: 10
Як працює код?
Я хочу пояснити загальну логіку того, як працює код, написаний на мові програмування.
- Написання коду:
Програміст пише код на мові, яку може прочитати людина. - Процес компіляції:
Написаний код компілюється за допомогою компілятора (compiler) в машинний код. Під час цього процесу перевіряється синтаксичні помилки. Код перетворюється в проміжну мову або безпосередньо в машинний код. - Час виконання (Runtime):
Скомпільований код виконується в операційній системі і середовищі .NET. На цьому етапі код виконується і генеруються результати. - Генерація результату:
В результаті виконання коду з'являються результати, такі як виведення на екран, операції з файлами або доступ до бази даних.
Що таке перетворення типів?
Перетворення типів — це процес перетворення одного типу даних в інший. Це робиться для приведення значення змінної або формату до відповідного типу.
- Parse: Метод
Parse
зазвичай використовується для перетворення рядкових значень у певні типи. Перетворюване значення має бути у відповідному форматі.
• Convert: КласConvert
надає широкі можливості для перетворення між різними типами даних. Процес перетворення залежить від вмісту даних.
• Навмисні та ненавмисні перетворення: Ненавмисне перетворення (implicit) — це автоматичне перетворення меншого типу в більший без втрати даних. Навмисне перетворення (explicit) зазвичай передбачає втрату даних і потребує втручання розробника.
• Інші вирази: Інші методи, що використовуються при перетворенні типів — цеTryParse
та спеціальні оператори перетворення. МетодTryParse
повертає false у разі невдалого перетворення замість викидання помилки.
Що таке механізми керування потоком?
Механізми керування потоком — це структури, які визначають, які блоки коду будуть виконуватися залежно від певних умов під час виконання програми. Ці структури дозволяють програмі відповідати на різні ситуації та керувати її потоком.
- Switch case (when — goto):
Структураswitch-case
дозволяє виконувати різні операції в залежності від значення. Ключове словоwhen
додає додаткову умову до блокуcase
, і якщо ця умова виконується, код переходить до цього блоку. Ключове словоgoto
дозволяє перейти до іншої точки програми або блокуcase
.
Однак використання оператораgoto
зазвичай не рекомендується, оскільки це може ускладнити читабельність коду.
int number = 10;
switch (number)
{
case 10 when number > 5:
Console.WriteLine("Число 10 і більше 5");
break;
case 5:
Console.WriteLine("Число 5");
break;
default:
Console.WriteLine("Інше число");
break;
}
• Що таке Switch Expressions:
Switch expressions — це можливість, введена в C# 8.0, яка пропонує більш сучасну та функціональну структуру для switch. Вона пропонує більш компактний та зручний спосіб написання коду порівняно з традиційною конструкцією switch-case. Значення повертаються безпосередньо в залежності від умов.
- Switch Expressions tuple patterns:
Це дозволяє використовувати структуру tuple для перевірки певних значень. Tuple — це тип даних, який дозволяє зберігати кілька значень разом. - Switch Expressions tuple patterns with when condition:
З використаннямwhen
можна застосовувати додаткові умови для співпадіння з tuple patterns. - Switch Expressions positional patterns:
Цей патерн використовується для співставлення елементів об'єкта за їх позицією. - Switch Expressions positional patterns with when condition:
За допомогоюwhen
можна додавати додаткові умови до співпадіння елементів за позицією. - Switch Expressions Property Patterns with when condition:
Property patterns дозволяють перевіряти властивості об'єкта, аwhen
додає додаткові умови для перевірки значень цих властивостей. - Switch Expressions Property Patterns:
Цей патерн дозволяє здійснювати співставлення за властивостями об'єкта, що дозволяє виконувати різні операції залежно від стану об'єкта.
• If — else if — else:
Конструкція if-else використовується для виконання різних операцій залежно від умови. Якщо умова if
є істинною, виконується перший блок. Якщо вона хибна, обробляються блоки else if
та else
. Ці конструкції ідеальні для перевірки кількох умов.
int x = 10;
if (x < 5)
{
Console.WriteLine("x менше за 5");
}
else if (x == 10)
{
Console.WriteLine("x дорівнює 10");
}
else
{
Console.WriteLine("x більше за 5, але не 10");
}
Що таке Pattern Matching?
Pattern matching — це техніка, введена в C# 7.0, яка використовується для співставлення об'єктів. Ця можливість дозволяє перевіряти типи змінних або їх вміст і виконувати відповідні операції.
- Type Pattern
Використовується для перевірки типу об'єкта. Якщо об'єкт має вказаний тип, виконуються відповідні дії.
object obj = 123;
if (obj is int)
{
Console.WriteLine("Об'єкт є цілим числом");
}
- Constant Pattern
Перевіряє, чи співпадає значення змінної з константним значенням. Це використовується для перевірки на рівність із певним значенням.
object obj = 10;
if (obj is 10)
{
Console.WriteLine("Об'єкт дорівнює 10");
}
- Var Pattern
Використовується для безпосередньої перевірки змінної незалежно від її типу. Цей патерн дозволяє працювати з будь-яким типом змінної без необхідності уточнювати її тип.
object obj = "Hello";
if (obj is var value)
{
Console.WriteLine($"Значення: {value}");
}
- Recursive Pattern
Використовується для перевірки внутрішніх властивостей об'єкта, що дозволяє працювати з більш складними структурами.
object obj = new List { 1, 2, 3 };
if (obj is List { Count: > 0 })
{
Console.WriteLine("Список має елементи");
}
- Simple Type Pattern
Перевіряє, чи є об'єкт простим типом.
Наприклад, прості типи, як int, bool, підпадають під цей патерн.
object obj = true;
if (obj is bool)
{
Console.WriteLine("Об'єкт є булевим значенням");
}
- Relational Pattern
Використовується для перевірки, чи знаходиться значення в певному діапазоні.
int number = 5;
if (number is > 0 and < 10)
{
Console.WriteLine("Число між 0 і 10");
}
Що таке цикли?
Цикли дозволяють виконувати певний блок коду багато разів, поки умова залишається істинною. Вони використовуються для виконання однієї і тієї ж операції кілька разів. У мові C# найбільш використовувані типи циклів:
- For
Циклfor
зазвичай використовується для повторення операцій певну кількість разів. Під час ініціалізації циклу вказуються початок, умова і крок/зміна.
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
- While
Циклwhile
продовжує виконуватись, поки задана умова істинна. Умова перевіряється перед кожною ітерацією.
int i = 0;
while (i < 5)
{
Console.WriteLine(i);
i++;
}
- Do
Циклdo
виконується хоча б один раз. Спочатку виконується блок коду, а потім перевіряється умова.
int i = 0;
do
{
Console.WriteLine(i);
i++;
} while (i < 5);
- Do While
Циклdo-while
спочатку виконує операцію, а потім перевіряє умову. Цикл триває, поки умова істинна.
int i = 0;
do
{
Console.WriteLine(i);
i++;
} while (i < 5);
- Break
Командаbreak
використовується для негайного виходу з циклу. Використовується, коли потрібно припинити виконання циклу при досягненні певної умови.
for (int i = 0; i < 5; i++)
{
if (i == 3)
{
break;
}
Console.WriteLine(i);
}
- Continue
Командаcontinue
пропускає поточну ітерацію циклу і переходить до наступної.
for (int i = 0; i < 5; i++)
{
if (i == 3)
{
continue;
}
Console.WriteLine(i);
}
- Return
Командаreturn
завершує виконання функції або методу і повертає значення. У циклах використовується для завершення функції або повернення значення.
int Sum(int a, int b)
{
return a + b;
}
Console.WriteLine(Sum(3, 4));
- Goto
Командаgoto
дозволяє перейти з однієї частини програми до іншої. Її використання зазвичай не рекомендується, оскільки вона може ускладнити читабельність коду.
int i = 0;
startLoop:
if (i < 5)
{
Console.WriteLine(i);
i++;
goto startLoop;
}
Що таке масиви та array?
Масиви дозволяють зберігати кілька значень одного типу під одним ім'ям змінної. У мові C# масиви мають фіксовану довжину, і кожен елемент повинен бути того ж типу. Масиви полегшують управління даними та забезпечують швидкий доступ до великої кількості значень.
• Як визначити масив
Під час визначення масиву вказуються його тип, ім'я та розмір. Масиви індексуються з нуля, і доступ до елементів здійснюється через індекс.
• Читання значення з масиву
Для доступу до елемента масиву використовується індекс. Масиви мають нульову індексацію, тобто перший елемент має індекс 0.
• Багатовимірні масиви
Багатовимірні масиви мають кілька індексів. Вони зазвичай використовуються для зберігання матриць.
• Нерегулярні масиви
Нерегулярні масиви (або "jagged arrays") дозволяють мати масиви різної довжини в різних рядках.
Властивості та методи масивів
У мові C# клас Array надає різні допоміжні функції для роботи з масивами. Ось деякі з них:
- Clear:
Використовується для очищення елементів масиву.
Наприклад, елементи в певному діапазоні також можна обнулити. - Copy:
Використовується для копіювання вмісту одного масиву в інший. - Sort:
Використовується для сортування елементів масиву. - Reverse:
Перевертає елементи масиву. - IsReadOnly:
Перевіряє, чи є масив доступним тільки для читання. - IsFixedSize:
Перевіряє, чи має масив фіксований розмір. - Length:
Повертає кількість елементів у масиві. - Rank:
Повертає кількість вимірів у масиві. Наприклад, для двовимірного масиву повертається 2. - CreateInstance:
Метод, що використовується для створення масиву. - ArraySegment Slicing:
Використовується для отримання сегмента масиву. Ця можливість дозволяє працювати лише з певною частиною масиву.
Ranges and Indices
В C# 8.0 та новіших версіях були додані нові можливості, такі як "Ranges" та "Indices", які дозволяють ефективніше працювати з масивами та колекціями. Ці можливості дозволяють легко отримувати доступ до елементів у певному діапазоні.
• System.Index
Клас System.Index
використовується для доступу до елементів колекції з кінця. Завдяки цій можливості можна отримати доступ до елементів масиву з використанням від'ємних індексів. Наприклад, вираз ^1
представляє останній елемент масиву. Це дуже корисно для доступу до кінця масиву, що раніше було можливо лише через позитивні індекси.
int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // Вивід: 50 (Останній елемент)
Console.WriteLine(numbers[^2]); // Вивід: 40 (Передостанній елемент)
• System.Indices
Особливість System.Indices
дозволяє отримувати доступ до елементів колекції в межах певного діапазону. За допомогою діапазонів можна вибирати елементи колекції від початку або від кінця. Діапазони визначаються за допомогою оператора ..
. Це забезпечує більш гнучке і функціональне управління масивами.
int[] numbers = { 10, 20, 30, 40, 50 };
var range = numbers[1..4]; // Від 1-го індексу до 4-го (4 не включається)
foreach (var number in range)
{
Console.WriteLine(number); // Вивід: 20, 30, 40
}
Класи
У мові C# класи, що виконують певні функції, надають допоміжні можливості для вирішення різних завдань у програмі. Ці класи полегшують виконання таких операцій, як математичні обчислення, робота з датами та часом, а також генерація випадкових чисел.
• Клас Math
Клас Math
містить безліч статичних методів для виконання математичних обчислень. Ці методи охоплюють широкий спектр операцій — від базових до складних математичних розрахунків.
- Abs
Повертає абсолютне значення числа. - Ceiling
Округляє число до найближчого більшого цілого. - Floor
Округляє число до найближчого меншого цілого. - Round
Округляє число до найближчого цілого. - Pow
Обчислює ступінь числа. - Sqrt
Обчислює квадратний корінь числа. - Truncate
Округляє число до цілого (відкидає десяткову частину).
• Клас DateTime
Клас DateTime
використовується для роботи з датами та часом. Цей клас надає методи для отримання поточної дати і часу, порівняння дат та виконання арифметичних операцій з датами.
- Now
Повертає поточну дату та час. - Today
Повертає поточну дату (без часу). - Compare
Порівнює два об'єктиDateTime
і визначає, який з них більший.
• Клас Random
Клас Random
використовується для генерації випадкових чисел. Цей клас зазвичай застосовується в іграх або інших програмах, де необхідно забезпечити випадковість.
- Next
Повертає випадкове ціле число в заданому діапазоні. - NextDouble
Повертає випадкове число з плаваючою точкою від 0 до 1.
Що таке методи?
Методи — це блоки коду, які виконують певну задачу в програмі. У мові C# методи використовуються для визначення повторюваних блоків коду, що виконують конкретні функції. Це дозволяє організувати код і полегшує його підтримку.
Методи можуть приймати параметри, повертати значення і викликати інші методи для організації потоку виконання. Ось деякі важливі поняття, пов'язані з методами:
Overloading (Перевантаження)
Перевантаження — це визначення кількох методів з однаковими іменами, але з різними параметрами. Це дозволяє писати методи, які виконують однакові функції, але працюють з різними типами параметрів.
Опис і створення методів
Методи — це блоки коду, які виконують певну задачу. Для визначення методів у мові C# використовуються ключові слова, і ці методи можуть бути викликані при необхідності.
Recursive (Рекурсія)
Рекурсія — це коли метод викликає сам себе для розв'язання проблеми, розділяючи її на менші частини. Зазвичай використовується в математичних обчисленнях і алгоритмах.
Non-Trailing Named Argument
Non-Trailing Named Arguments — це вказівка імен параметрів при виклику методу. Це дозволяє викликати методи без урахування порядку параметрів.
Метод доступу
Доступ до методу визначає, які операції можна виконувати з його допомогою. У C# рівні доступу до методів вказуються за допомогою ключових слів public, private, protected і internal.
Optional Параметри
Опціональні параметри дозволяють методам мати параметри, які є необов'язковими при виклику. Якщо ці параметри не передаються під час виклику, використовуються значення за замовчуванням.
Тип String
Тип String використовується для зберігання текстових даних у мові C#. Рядки складаються з символів і часто використовуються для операцій з текстами. Тип String є важливим при роботі з незмінними (mutable) даними та маніпуляціях з текстом.
Verbatim і Interpolation
- Verbatim String: Verbatim рядок не інтерпретує спеціальні символи, такі як
\n
або\t
, і зберігає їх так, як вони є. Починається зі символу@
. - Interpolation String: String interpolation дозволяє безпосередньо використовувати змінні та вирази в рядках. Це полегшує додавання динамічних даних до рядків.
Функції
Функції, часто використовувані з типом String, дозволяють швидко виконувати операції з текстами. Ось деякі важливі функції:
• Contains
Перевіряє, чи містить рядок інший рядок.
• StartsWith
Перевіряє, чи починається рядок з певного символу.
• EndsWith
Перевіряє, чи закінчується рядок на певний символ.
• Equals
Перевіряє, чи рівні два рядки.
• Compare
Порівнює два рядки і дає інформацію про їхнє сортування.
• CompareTo
Порівнює один рядок з іншим. Якщо вони рівні, повертається 0, якщо ні — різниця в порядку.
• IndexOf
Повертає індекс, на якому знаходиться символ або рядок в іншому рядку.
• Insert
Додає один рядок до іншого.
• Remove
Видаляє частину рядка.
• Replace
Заміщає певну частину рядка іншою.
• Split
Розділяє рядок на частини за заданим роздільником.
• Substring
Отримує частину рядка, починаючи з заданої позиції.
• ToLower
Перетворює рядок на маленькі літери.
• ToUpper
Перетворює рядок на великі літери.
• Trim
Очищає пробіли на початку та в кінці рядка.
• TrimEnd
Очищає пробіли в кінці рядка.
• TrimStart
Очищає пробіли на початку рядка.
String Segment
String Segment представляє частину рядка. Це дозволяє працювати тільки з певною частиною рядка, економлячи пам'ять.
StringBuilder
StringBuilder
є більш ефективним класом для роботи з рядками, що змінюються та маніпулюються, забезпечуючи кращу продуктивність при частих змінах рядка.
Зміни, виконані за допомогою StringBuilder, здійснюються без зміни оригінального рядка та без створення нового рядка в пам'яті.
Механізми обробки помилок
Механізми обробки помилок використовуються для виявлення помилок під час роботи програми та їх коректної обробки. Ці механізми дозволяють розробникам забезпечити, щоб програма могла справлятися з непередбачуваними ситуаціями.
Помилки компіляції/Синтаксичні помилки
Помилки компіляції виникають через помилки у написанні програми. Ці помилки з'являються, якщо код не відповідає синтаксичним правилам мови. Компілятор виявляє синтаксичні помилки, і програма не може бути виконана.
Помилки під час виконання
Помилки під час виконання виникають, коли програма вже працює. Наприклад, ділення на нуль, використання некоректних індексів можуть викликати помилки під час виконання програми. Ці помилки зазвичай виявляються під час запуску програми.
Try-Catch
Конструкції try-catch
використовуються для виявлення та обробки помилок під час виконання. Блоки коду, які можуть спричинити помилку, розміщуються в блоці try
, і якщо помилка виникає, вона обробляється в блоці catch
.
Логічні помилки
Логічні помилки — це помилки, коли програма генерує неправильні результати через логічні помилки в її виконанні. Такі помилки не виявляються компілятором, оскільки код може бути написаний правильно, але не виконувати те, що очікується. Логічні помилки зазвичай виявляються під час тестування та налагодження.
Кінець нотаток
Сьогодні я пояснив загальні структури мови C# за допомогою власних нотаток. Я охопив важливі концепції, від основних типів даних до циклів, механізмів управління потоком і обробки помилок. Думаю, що ця стаття буде корисною для тих, хто хоче отримати базові знання з програмування на C#.
Джерела:
[
Основи програмування на C# від А до Я
Навчальна програма Цей навчальний пакет охоплює як синтаксис, так і структуру мови програмування C# в найдрібніших деталях...
ngakademi.com
](https://ngakademi.com/courses/adan-zye-temel-c-programlama-egitimi/?source=post_page-----24492bcbeaab--------------------------------)
Перекладено з: C# Programlama Nedir? Başlangıç Seviyesinden Notlar.