Типізація - введення в програмування

важливі замітки

Тут значення не виявилося ненавмисно. Мабуть, просто ще не прийшов час дати цієї змінної значення.

null потрібен для явного, навмисного вказівки, що значення немає. Можна сказати let a = null ;. Наприклад, ви попросили користувача ввести інформацію, але він нічого не ввів. В такому випадку доречно записати в результат null.

null. на відміну від undefined. можна задавати вручну, передавати як аргумент у функцію і в цілому використовувати як будь-яке інше явне значення.

При порівнянні null і undefined потрібно бути обережним:

У цьому курсі ми порівнюємо дані, використовуючи три знака рівності:

Це порівняння пряме: чи є ці дані абсолютно ідентичними?

конспект уроку

NaN означає «не число", але тип цього значення - number.

Мінлива без значення має спеціальне значення undefined. Тип такої змінної - undefined:

Динамічна та статична типізація

Код конвертується в іншу форму, яку комп'ютер може запустити. Цей процес називається компіляцією, а період часу, за який цей процес відбувається - стадією компіляції (compile time).

Після того, як компіляція закінчена, запускається програма і період, поки вона запущена, називається стадією виконання (run time).

Статично типізовані мови перевіряють типи і шукають помилки типізації на стадії компіляції.

Динамічно типізовані мови перевіряють типи і шукають помилки типізації на стадії виконання.

Іншими словами: статичне тіпізірованія значить перевірку типів перед запуском програми; динамічне - перевірку типів, поки програма запущена.

Слабка і сильна типізація

опціонально

транскрипт уроку

В одному з минулих уроків ми говорили про помилки і як з ними справлятися. Є кілька видів помилок, і я хочу нагадати про один конкретний вид. Ось невеликий фрагмент того уроку:

Погляньте на цей код:

Помилка типізації - це як просити кішку випрати білизну. Можливо, ви хотіли попросити про це вашого друга.

typeof - це спеціальний оператор, який повертає рядок, в якій написаний тип.

А що, якщо создадать змінну, але не поставити їй ніякого значення? Який в цьому випадку буде тип? Це ні число, ні рядок, ніщо. Тому що немає значення, правильно?

Наприклад, тип number має безліч потенційних значень: 1, 2, -10, 69000 та інші числа. А тип undefined тільки одне - undefined.

Коли справа стосується типізації в програмуванні, важливо розрізняти дві концепції: динамічна проти статичної і слабка проти сильної.

Щоб розуміти різницю між динамічної та статичної типізацією, нам спочатку потрібно подивитися як написані програми стають запущеними програмами.

Код, який ви пишете, зазвичай конвертується в зрозумілу для запуску комп'ютером форму. Цей процес називається компіляцією, а проміжок часу, за який це відбувається - "стадією компіляції" або compile time.

Після того, як компіляція закінчена і програма запущена, починається відлік часу, який називається "стадією виконання" або run time.

Деякі мови перевіряють типи і шукають помилки типізації на стадії компіляції. У них статична типізація.

Інші мови перевіряють типи і шукають помилки типізації на стадії виконання. Така типізація - динамічна.

Іншими словами: статична типізація означає перевірку типів перед запуском програми, динамічна - перевірку типів, коли програма запущена.

C #, C ++, Java, Go - статично типізовані мови. Якщо в одному з цих мов ви створите число і спробуєте проводити з ним операції, як з функцією, ви отримаєте помилку під час компіляції, а програма не стане запускатися - вона навіть не дійде до цієї стадії, тому що помилка типізації буде виявлена ​​перед виконанням, в період компіляції.

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

У цій концепції немає нічого спільного з динамічної та статичної типізацією, сенс яких - КОЛИ перевіряти типи. Сильна проти слабкої - це НАСКІЛЬКИ СЕРЙОЗНО перевіряти типи.

Ви можете вважати, що слабка - це нестрогая типізація, а сильна - це вимоглива.

На відміну від динамічності-статичності, сила типізації це спектр. У PHP типізація трохи сильніше. У Python ще сильніше. І всі вони динамічно типізовані мови.

Можна припустити, що неявна конверсія з типу в тип - не найкраща ідея. Неявний, значить прихований, а прихований - значить важко зрозумілий і схильний до помилок. Поведінка програми стає менш очевидним. Ви пишіть менше коду, так, але код більш крихкий і менш зрозумілий.

Схожі статті