Нагадайки-поясняйки
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 + 123
i += 123
i = i + "*"
i += "*"
i = i + ":)"
i += ":)"
i = i + "\n"
i += "\n"
i = i - 15
i -= 15
i = i * -3
i *= -3
i = i / 7.98
i /= 7.98
Це працює і зі змінними, і з літералами. Звісно, змінна може називатись не лише i
Якщо треба додати / відняти саме одиницю, є ще коротші форми: інкремент та декремент.
i = i + 1
i += 1
i++
i = i - 1
i -= 1
i--
Увага: = в інкременті не треба. Треба просто i++
або i--
: як є, без нічого. Умовно кажучи, у цих спецсимволах =
вже "вшитий під капотом".
Запис типу i = i++
або i = i--
працюватиме, але це неправильно і нівелює саму суть скорочення запису.
Запустіть код та читайте консоль
boolean
!
— логічне заперечення, логічне "не".
Тернарний оператор
Тернарний оператор — це коротка (та з парою особливих фіч) заміна if else
для випадків, коли є лише 2 можливих варіанти розгалуження, а кожна дія може бути записана одним рядком коду.
У звичайного if else
структура така:
А тернарним оператором те ж саме записується так:
Тобто, наприклад
З тернарником скорочується до
А якщо звернути увагу, що в обох варіантах початок та кінець повторюються, можна ще коротше:
Тобто, краще не писати так:
А замість того писати так:
Вкладені тернарники
Як if else
можуть вкладатись одне в одного, так і тернарники можуть бути вкладеними в інші тернарники.
Кількість рівнів вкладеності необмежена.
У цій кракозябрі легко заплутатись, але тернарник у більшості випадків нормально розуміє перенос рядків, тому можна записати якось так:
Це теж далеко не зразок читабельності. Але вже набагато більше схоже на знайомі if else
. Та одночасно непогано демонструє вкладені один у одного тернарники.
Проте, якщо доводиться щось таке писати, то тернарник майже 100% буде не найкращим рішенням. Тому що він про скорочення, а тут не дуже й коротко; ну а без переносів це не дуже читабельно.
Остача від ділення націло (%)
Якщо ви гуглили, що воно таке, то, скоріш за все, натикались на статтю з Вікіпедії. Якщо зрозуміли - круто. Але якщо той математичний канцелярит не зайшов, є простіше пояснення.
Є 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