Типізація

Є чотири основних категорії типізації в мовах програмування. Коротко про кожну з них.

Типізовані / нетипізовані - мова Assembler, наприклад, не має типів як таких, ви просто оперуєте регістрами, вона - нетипізована. Всі інші мови типізовані.

Статична / динамічна - в статичній типізації типи змінних і функцій встановлюються на момент компіляції програми, тобто на момент виконання програми достовірно відомо, яка змінна має який тип. В динамічній типізації тип змінної визначається в ході виконання програми.

Сильна / слабка (стога / нестрога) - якщо типізація слабка, то мова дозволяє в одному виразі змішувати змінні декількох типів, а перетворення будуть відбуватися атоматично і неявно приводитися з одного типу до іншого правилами, які визначає сама мова. Сильна типізація заборонить подібну операцію, наприклад, додавання числа до рядка символів.

Явна / неявна - явно типізовані мови вимагають вказанні типів для змінної під час її оголошення, в той час як неявні самі визначать тип на етапі компіляції чи інтерпретації.

Пайтон, наприклад, є типізованою мовою з динамічною, строгою, неявною типізацією.

Поняття з функціонального програмування

Почнемо з простого поняття змінної. Змінній може бути присвоєне деяке значення. І ми можемо викликати функцію, використовуючи змінну як аргумент. Тепер введемо поняття контексту. Це деяка додаткова інформація про те, яке значення міститься у змінній. Розглядаємо контекст, як деяку коробку, в яку можна помістити значення.

context

Тепер ми не можемо просто застосувати функцію, оскільки результат буде залежати від контексту.

Functors (функтори) - знають як застосовувати функцію до значення в контексті.

Тепер уявімо, що функція теж загорнута в деякий контекст. Незрозуміло, як її використати з нашою змінною.

Applicatives (аплікативи) - вміють застосовувати функції в контексті до змінних в контексті.

applicative

Аплікативи “дістають” функцію та значення з контекстів і повертають результат теж у контексті.

Monads (монади) - застосовують функцію, що повертає значення в контексті до деякого іншого значення в контексті.

monad

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

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

Імплікація - це логічна звʼязка виду “якщо деякий факт, то деякий інший факт“. Перший факт є посиланням, а другий факт - наслідком. Імплікація як булева функція хибна лише тоді, коли посилання істинне, а наслідок хибний. Якщо імплікація істинна в обидві сторони (A→B і B→A) - це називається логічною еквівалентністю (в логічних висловлюваннях означає тоді і тільки тоді).

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

Ресурси