Нагадайки-поясняйки
Escape characters
\n
— перенос рядка
\t
— табуляція (горизонтальна)
\ — екранування наступного символа. Екранований символ просто відображається як текст, а не використаний як спеціальна штука з мови програмування. Наприклад:
Увага: \n
, \t
та інші escape characters треба екранувати разом із їх бекслешем:
Не лякайтесь посилання: крім \n
, \t
та екранованих лапок вам на Zero інші escapes не знадобляться :)
p.s. Конкретно лапки можна вставляти в рядки й без екрану, якщо вони різних типів:
Про =, == та ===
Літерали
Літерал — це "голе" значення. Умовно кажучи: те, що можна покласти до змінної. Наприклад:
У цьому прикладі літерали — це:
"222"
100500
", "
12345
true
Скорочення
Числа
Штуки типу i = i + 2
або i = i + "*"
варто скорочувати через +=.
Довго | Коротко |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Це працює і зі змінними, і з літералами. Звісно, змінна може називатись не лише i
Якщо треба додати / відняти саме одиницю, є ще коротші форми: інкремент та декремент.
Дуже довго | Довго | Гарнюня |
---|---|---|
|
|
|
|
|
|
Увага: = в інкременті не треба. Треба просто i++
або i--
: як є, без нічого. Умовно кажучи, у цих спецсимволах =
вже "вшитий під капотом".
Запис типу i = i++
або i = i--
працюватиме, але це неправильно і нівелює саму суть скорочення запису.
Запустіть код та читайте консоль
boolean
!
— логічне заперечення, логічне "не".
Тернарний оператор
Тернарний оператор — це коротка (та з парою особливих фіч) заміна if else
для випадків, коли є лише 2 можливих варіанти розгалуження, а кожна дія може бути записана одним рядком коду.
У звичайного if else
структура така:
А тернарним оператором те ж саме записується так:
Тобто, наприклад
З тернарником скорочується до
А якщо звернути увагу, що в обох варіантах початок та кінець повторюються, можна ще коротше:
Тут слід пам'ятати, що тернарник, на відміну від if else
— це окрема незалежна сутність (як масив, наприклад). І тому, якщо треба результат передати до функції, не треба викликати її саму в тернарнику двічі поспіль. Можна сам тернарник передати, як аргумент 😉
Тобто, краще не писати так:
А замість того писати так:
Вкладені тернарники
Як if else
можуть вкладатись одне в одного, так і тернарники можуть бути вкладеними в інші тернарники.
Кількість рівнів вкладеності необмежена.
У цій кракозябрі легко заплутатись, але тернарник у більшості випадків нормально розуміє перенос рядків, тому можна записати якось так:
Це теж далеко не зразок читабельності. Але вже набагато більше схоже на знайомі if else
. Та одночасно непогано демонструє вкладені один у одного тернарники.
Проте, якщо доводиться щось таке писати, то тернарник майже 100% буде не найкращим рішенням. Тому що він про скорочення, а тут не дуже й коротко; ну а без переносів це не дуже читабельно.
Тож дійте за обставинами, керуйтесь здоровим глуздом і не туліть всюди тернарники замість if else
без необхідності, а просто тому, що це якась прикольна штука 😉
Остача від ділення націло (%)
Якщо ви гуглили, що воно таке, то, скоріш за все, натикались на статтю з Вікіпедії. Якщо зрозуміли - круто. Але якщо той математичний канцелярит не зайшов, є простіше пояснення.
Є a % b
. Беремо найбільше число, кратне b
, яке менше або дорівнює a
. Віднімаємо від a
це число. Отримана різниця - і є результат. На прикладі 10 % 3
: найближче до 10
, яке можна націло розділити на 3
(тобто кратне 3
) - це 9
. 10 - 9
= 1
. Тобто10 % 3
буде 1
.
Ось демо-код. Повводьте туди різні числа, в т.ч. від'ємні та не цілі (6.21
і т.п.). І дивіться, що буде.
Яке у цього практичне застосування? Та дуже просте. Якщо остача a % b === 0
, то a
ділиться без остачі на b
. Тобто a
кратне b
. Так, наприклад, можна перевірити число на парність/непарність, визначивши, чи кратне воно двійці. Або можна дізнатись, скільки мінімум автобусів потрібно для перевозки групи a
туристів, якщо в кожному автобусі - максимум b
місць. Або ще щось таке, придумайте самі :)
Складання у змінну
Інколи (навіть часто), коли в циклах щось виводимо на консоль, замість 100500 разів просто виводити щось на кожній ітерації, корисніше та зручніше — складати значення до змінної (додавати до неї, конкатенувати з нею) а потім один раз виводити саме цю змінну.
Тобто замість
якось типу так
Приведення типів
Найчастіші процедури на Zero
Таблиця конвертацій
Табличка звідси
Значення | Перетворене на число | Перетворене на рядок | Перетворене на boolean |
false | 0 | "false" | false |
true | 1 | "true" | true |
0 | 0 | "0" | false |
1 | 1 | "1" | true |
"0" | 0 | "0" | true |
"000" | 0 | "000" | true |
"1" | 1 | "1" | true |
"20" | 20 | "20" | true |
"" | 0 | "" | false |
"twenty" | NaN | "twenty" | true |
NaN | NaN | "NaN" | false |
Infinity | Infinity | "Infinity" | true |
-Infinity | -Infinity | "-Infinity" | true |
null | 0 | "null" | false |
undefined | NaN | "undefined" | false |
[ ] | 0 | "" | true |
[20] | 20 | "20" | true |
[10,20] | NaN | "10,20" | true |
Скоуп
Скоуп (область видимості) — це шматок кода всередині{ }
Цикли 2, 3 та 4 входять до скоупу 1. 3 входить до скоупів 1 та 2. 4 входить до скоупу 1.
І є ще глобальний скоуп, куди входять вони всі разом. Це "нульовий" рівень, тобто ВЕСЬ код в редакторі. Можете уявити, що весь код в IDE загорнутий у верховні невидимі { }
.
Змінні зі внутрішнього скоупу "бачать" зовнішні. Але із зовнішнього скоупу не видно внутрішні.
Тобто правило просте: назовні — бачимо, всередину — ні.
Цикли
Тіло цикла — все, що знаходиться всередині цикла {
тут }
Структура циклів
Якщо треба повторити дії конкретну кількість разів, то юзаємо for.
Якщо вказати кількість повторів заздалегідь неможливо: while.
Якщо треба зробити щось незалежно від обставин як мінімум 1 раз, а далі — по ситуації: do while
for
1
: місце для створення однієї або кількох змінних (якщо кілька — через кому)
2
: вираз або змінна, який цикл конвертує в boolean (див. табличку вище). Доки 2
буде true
, цикл повторюватиметься. Якщо стане false
— цикл перерветься.
3
: дії, які виконаються в кінці кожної ітерації
У цьому прикладі:
1
: let i = 0, j = 10, k = true
2
: i < 25
3
: i++, j--, k = !k
Увага: 1
, 2
та 3
входять в скоуп цикла, в якому вони створені.
while
Те саме, що for
, але має лише блок 2
. 1
Треба руками записувати перед циклом десь ззовні, а 3
— в тілі циклу (дляповної тотожності — в самому кінці перед }
.
do while
Що б там не було, бодай 1 раз виконати все, що в X
. Потім перевірити, чи Y == true
. Якщо так — повторювати X
доти, доки Y == true
continue та break
continue
: "ігнорувати весь код в наступних рядках та перейти до наступної ітерації цикла"
break
: "завершити цикл" (точно так же, як якщо б в блоку 2
стало false)
Увага: continue
та break
впливають лише на свій скоуп і не чіпають зовнішній. Умовно:
Брейкати зовнішні скоупи можливо, але це не знадобиться на Zero.
А взагалі варто уникати continue
та break
. В тому сенсі, що, якщо можливо без них — робіть без них. Вони не про "коли завершити" а "якщо щось трапилось — завершити".
Повну різницю між ними зрозумієте на курсі P2P CS.
Ну типу, навіщо робити якось так:
коли сама структура циклів підштовхує робити так:
break
/ continue
доречні, коли треба зреагувати на щось, що виникає внаслідок роботи самого циклу. Наприклад:
Коротше кажучи, у більшості випадків, якщо цикл переривається через break
, а не через умову переривання в голові цикла — з алгоритмом щось не так, і його варто оптимізувати.
Last updated