home.social

#константи — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #константи, aggregated by home.social.

  1. CW: Константна змінна

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

    Змінна - це місце у памʼяті де ми можемо зберігати дані.

    Це визначення хоч і правильне, але не завершене. До нього потрібно додати те що ми можемо їх змінювати.

    Змінна - це місце у памʼяті де ми можемо зберігати дані з можливістю перезаписувати їх.

    #програмування #змінна #змінні #константа #константи #programming #variable #constant

  2. CW: Типи в :haskell:

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

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

    Щоб дізнатись тип функції чи оператора в інтерпретаторі ghci потрібно використати команду інтерпретатора type. Всі команди інтерпретатора починаються з символу двокрапки. Виглядає це так :type x.

    let x = 10
    :type x
    

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

    Ця команда поверне нам

    x :: Num p => p
    

    У цьому рядку оператор :: схожий на =, але працює з типами, а не значеннями. За допомогою нього ми зможемо самі вказувати типи. Зліва від нього знаходиться вираз, а з права його тип. Що означає права частина у цьому випадку ми розберемо згодом, а зараз подивимось на те як уточнювати тип самостійно.

    let x = 10 :: Int
    

    Тут ми явно вказуємо тип за допомоги оператора типізації. Тепер команда типу :t x поверне нам таке x :: Int.

    Є шість основних, фундаментальних типів.

    • Bool - Логічний (True, False)
    • Char - Символьний ('\0' - '\1114111')
    • Int - Знаковий цілочисельний (-9223372036854775808 - 9223372036854775807)
    • Integer - Знаковий цілочисельний без обмежень)
    • Float - Знаковий дробовий
    • Double - Знаковий дробовий з подвійною точністю

    Перейдімо від констант до функцій. Для прикладу візьмемо стандартну функцію not. Вона приймає bool і повертає інвертоване значення типу bool.

    not True  -- Поверне False
    not False -- Поверне True
    

    Тепер розберемо його тип

    :t not
    not :: Bool -> Bool
    

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

    Для прикладу візьмемо оператор &&. Щоб подивитись тип оператора потрібно взяти його у душки :t (&&).

    (&&) :: Bool -> Bool -> Bool
    

    Перші два Bool це вхідні аргументи, а останній тип повернення. Саме через такі типи працює часткове застосування функцій. Візьмем (&& True) і побачимо що тип його (&& True) :: Bool -> Bool. Розташування аргументу значення не має.

    #програмування #haskell #типи #типізація #статична #строга #фукції #оператори #інтерпретатор #ghci #команди #type #types #typing #static #константи

  3. CW: Типи в :haskell:

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

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

    Щоб дізнатись тип функції чи оператора в інтерпретаторі ghci потрібно використати команду інтерпретатора type. Всі команди інтерпретатора починаються з символу двокрапки. Виглядає це так :type x.

    let x = 10
    :type x
    

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

    Ця команда поверне нам

    x :: Num p => p
    

    У цьому рядку оператор :: схожий на =, але працює з типами, а не значеннями. За допомогою нього ми зможемо самі вказувати типи. Зліва від нього знаходиться вираз, а з права його тип. Що означає права частина у цьому випадку ми розберемо згодом, а зараз подивимось на те як уточнювати тип самостійно.

    let x = 10 :: Int
    

    Тут ми явно вказуємо тип за допомоги оператора типізації. Тепер команда типу :t x поверне нам таке x :: Int.

    Є шість основних, фундаментальних типів.

    • Bool - Логічний (True, False)
    • Char - Символьний ('\0' - '\1114111')
    • Int - Знаковий цілочисельний (-9223372036854775808 - 9223372036854775807)
    • Integer - Знаковий цілочисельний без обмежень)
    • Float - Знаковий дробовий
    • Double - Знаковий дробовий з подвійною точністю

    Перейдімо від констант до функцій. Для прикладу візьмемо стандартну функцію not. Вона приймає bool і повертає інвертоване значення типу bool.

    not True  -- Поверне False
    not False -- Поверне True
    

    Тепер розберемо його тип

    :t not
    not :: Bool -> Bool
    

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

    Для прикладу візьмемо оператор &&. Щоб подивитись тип оператора потрібно взяти його у душки :t (&&).

    (&&) :: Bool -> Bool -> Bool
    

    Перші два Bool це вхідні аргументи, а останній тип повернення. Саме через такі типи працює часткове застосування функцій. Візьмем (&& True) і побачимо що тип його (&& True) :: Bool -> Bool. Розташування аргументу значення не має.

    #програмування #haskell #типи #типізація #статична #строга #фукції #оператори #інтерпретатор #ghci #команди #type #types #typing #static #константи