пʼятниця, 28 квітня 2017 р.

Урок 2. Перемінні. Частина 1

Доброго всім часу. І ми продовжуємо серію наших уроків, а на черзі другий урок, який присвячений вивченню перемінних їх використанню на практиці.   Тільки цього разу ми розглянемо усі доступні типи перемінних. Як я вже казав раніше, перемінні це елементи які дозволяють нам зберігати необхідні значення в пам'яті комп'ютера. Їх є декілька видів: цілочисельні, дробові (або елементи з плаваючою та з фіксованою точкою ), символьні, логічні та об'єктні. І почнемо ми з ряду цілочисельних перемінних. У попередньому уроці ми, біглим поглядом, розглядали цілочисельну перемінну типу int, тепер ми розглянемо її та інші цілочисельні типи, більш детально.




Отже, в шарпі є 8 цілочисельних типів і всі вони розділяються по діапазону значень і відповідно по розміру, виділеної на цю перемінну пам'яті. Таблиця внизу:



1sbyte0 .. 2558 бітЗнаковий
2byte-128 .. 1278 бітБеззнаковий
3short-32,768 .. 32,76716 бітЗнаковий
4ushort0 .. 65,53516 бітБеззнаковий
5int-2,147,483,648 .. 2,147,483,64732 бітЗнаковий
6uint0 .. 4,294,967,29532 бітБеззнаковий
7long-9*10^18 — 9*10^1864 бітЗнаковий
8ulong0— 18*10^1864 бітБеззнаковий

В програмуванні ігор, доволі важливо стежити за виділенням пам'яті. Тому рекомендую мати таблицю типів завжди під рукою. В майбутньому, коли ми будемо програмувати більш серйозні приклади, ви  зрозумієте  навіщо за цим слідкувати, а зараз для прикладу можу привести вам наступне. Згадайте ігру Total war, там в режимі бою на сцені може знаходитися до декількох тисяч воїнів. У кожного з них є власні очки життя, які припустимо, реалізовані цілочисельним типом. Очевидно, що для воїнів достатньо 10000 очків життя, тобто нам достатньо використати тип short (16 біт - 2байти), проте якщо б ми використали тип int (32біта - 4байти) кількість виділеної пам'яті збільшиться вдвічі. Тепер підрахуємо, нехай на сцені 1000 воїнів - це 2000 байтів (майже 2 мегабайти) проти 4000 байтів. А тепер врахуйте що у кожного є такі параметри як: швидкість, сила атаки, захист (від стріл, від глухих ударів, від порізів), точність ударів, кількість стріл у лучників і це тільки мала частина списку. Слідкуючи за виділенням пам'яті на перемінні ми можемо економити до третини оперативної пам'яті​ в ваших іграх (без урахування пам'яті яку потребує движок). Наступним, на що потрібно звернути увагу, це те що Шарп строго типізований. Це означає, що ви маєте визначити тип перемінної під час того, як об'являєте перемінну.
Типи з плаваючою точкою є тільки два. Це float і double. Тип з плаваючою точкою може містити дробові значення. Тип double являється більшою версією типу float.



9float+1.5*10^-45 -/+3.4*10^3832 бітЗнаковий
10double+5.0*10^-324 -/+1.7*10^30864 бітЗнаковий

Тип decimal, призначений для математичних операцій зв'язаних з  грошовими одиницями. Причина цьому, помилки зв'язані з заокругленням, в математичних операціях, типів з плаваючою точкою. Цей тип здатний точно представити до 28 десяткових розрядів.

11decimal+1.0*10^-28 - +7.9*10^28128 бітЗнаковий





В C# на відміну від інших мов програмування символьний тип представляє собою 16-розрядний, без знаковий тип, який може представити алфавіти всіх існуючих в світі мов, так як використовує стандарт кодування юнікод(unicode). Як наслідок стрічки також закодовані в цьому кодуванні.

12charсимвол Юнікода16 бітБеззнаковий
13stringМістить послідовність символів char





Символьний типам значення потрібно призначати в лапках (в одинарних лапках для символьного типу, і в подвійних лапках для стрічки).
Логічний тип bool. Цей тип може містити тільки два значення, правильно або неправильно (true або false).

14booltrue або false8 бітБеззнаковий





І на завершення object. Цей тип ми розглянемо детальніше коли будемо вивчати класи. Зараз вам потрібно знати, що цей тип являється предком усіх базових типів C# і може містити значення будь якого з них.
Нижче приведена повна таблиця типів.

Тип Діапазон Розмір в бітах Знаковість
1 sbyte 0 .. 255 8 біт Знаковий
2 byte -128 .. 127 8 біт Беззнаковий
3 short -32,768 .. 32,767 16 біт Знаковий
4 ushort 0 .. 65,535 16 біт Беззнаковий
5 int -2,147,483,648 .. 2,147,483,647 32 біт Знаковий
6 uint 0 .. 4,294,967,295 32 біт Беззнаковий
7 long -9*10^18 — 9*10^18 64 біт Знаковий
8 ulong 0— 18*10^18 64 біт Беззнаковий
9 float +1.5*10^-45 -/+3.4*10^38 32 біт Знаковий
10 double +5.0*10^-324 -/+1.7*10^308 64 біт Знаковий
11 decimal +1.0*10^-28 - +7.9*10^28 128 біт Знаковий
12 char символ Юнікода 16 біт Беззнаковий
13 string Містить послідовність символів char
14 bool true або false 8 біт Беззнаковий
15 object Предок усіх базових типів в C#

Зверніть увагу. Не варто зубрити всі перемінні напам'ять, для початку ви можете зберегти та використовувати таблицю типів, як джерело. І ви замітите, що вже дуже скоро ви автоматично запам'ятаєте всі типи.
А зараз, давайте розглянемо всі доступні варіанти об'явлення всіх цих типів, а також методи маніпуляції цими перемінними.

int i=0;
int j;
j=0;


Ці варіанти ініціалізації перемінної ми вже розглядали в попередньому уроці. Тепер давайте розглянемо нові варіанти ініціалізації перемінних.

int a, b, c;
a=0;
b=1;
c=2;
int x, y=10, z=5;
int t= x+y+z;


Зверніть також увагу на те що досі ми ініціалізувати тільки цілочисельний тип переменних. Хоч правила ініціалізації залишаються дійсними і для інших типів, проте значення, які ми присвоюємо перемінним можуть відрізнятися в залежності від типу перемінної. Наприклад:

bool a = true;
char s = '@';
string str = "стрічка";
float b = 1.5f;
double c = 1.5;
decimal d = 1.5m;


Отже Як бачите значення які ми присвоїли перемінним відрізняється від значень цілочисельного типу. Розглянемо детальніше кожне із значень. Першим іде логічне значення true (перемінний типу bool можна призначити значення тільки true або false). Далі йде символьне значення. Для типу char ми використовуємо одинарні лапки в яких заключено текстовий символ. Для типу string ми використовуємо подвійні лапки в яких заключаємо стрічку тексту. Далі йдуть дробові типи значень. Для типу float ми присвоюємо значення 1.5 з буквою f в кінці. Дана буква являється літералом, про які ми поговоримо пізніше. Робиться це тому, що дробові значення по замовчуванню представляються як значення типу double, а даний літерал приводить значення до типу float. Аналогічна ситуація відбувається і з типом decimal, тільки там ми використовуємо літерал, тільки там ми використовуємо літерал, тільки там ми використовуємо літерал m. Проте для самого типу double ми не використовуємо літерал, так як дробові числа, як було сказано раніше, по замовчуванню використовують цей тип значень.

В наступних частинах ми розглянемо літерали, приведення типів (конвертацію типів), облась видимості перемінних і їх час життя.

Не забувайте висловлювати свою думку щодо даної статті в коментарях, задавайте запитання, діліться ідеями. Також дивіться урок в YouTube і одразу ж підписуйтесь на канал. Діліться моїм блогом зі своїми друзями. Підписуйтесь на мій Твіттер, щоб не пропустити нові уроки та статті. А головне всім удачі.

Немає коментарів:

Дописати коментар