The Libretto Programming Language

Libretto для веб-приложений

01 Начало работы
02 Как изучать примеры
03 Имена в Libretto
04 Типы данных
05 Операторы
06 Пути
07 Методы
08 Статическая утиная типизация

08 Статическая утиная типизация

В Libretto реализована статическая система типизации. Это означает, что типы данных проверяются в коде Libretto–программы во время ее компиляции.

Статическая типизация очень полезна, особенно при реализации сложных систем, поскольку позволяет выловить большинство ошибок на стадии компиляции (а не эксплуатации) кода.

Libretto является языком веб-программирования. Поэтому в нем реализована более легкая система типов, чем тяжеловесные объектно-ориентированные модели с наследованием, которые присущи Java и Scala. В Libretto работает утиная типизация (duck typing), которая ближе к таким веб-языкам как Python.

Но Python – динамический язык, в котором типы в момент трансляции не проверяются. Код Libretto существенно более быстрый (благодаря компиляции) и безопасный (благодаря статической типизации). Кроме того, код на Libretto более компактный, чем на Python.

Таким образом, Libretto как язык со статической утиной типизацией отличается и от таких языков как Java и Scala (поскольку базируется не на ООП, а на утиной типизации), и от таких языков как Python, Ruby и PHP, поскольку,

Посмотрим, как утиная типизация работает в Libretto.

В данном примере вызов say в методе main не может быть отнесен ни к одному конкретному типу, поскольку два элемента последовательности в контексте вызова имеют собственные (разные) определения. Для Libretto такая ситуация является нормальной. Важно только, чтобы для каждого элемента последовательности нашелся какой-нибудь метод с именем say.

Термин "утиная типизация" ведет начало от "утиного теста", сформулированного в 2000 в рамках дискуссии по языку Python:

  • Если это выглядит как утка, плавает как утка и крякает как утка, то это возможно и есть утка.
  • Таким образом, мы классифицируем объект не напрямую (через принадлежность к классу), а опосредованно – отслеживая то, что он может делать. Вот классический пример программы, реализующий утиный тест (см. этот пример на других языках программирования здесь):

    Метод inTheForest корректно срабатывает и на утке, и на человеке, поскольку последний научился передразнивать утку. Статический анализатор Libretto автоматически вычисляет тип переменной mallard как Duck | Person.

    Если же мы отберем у человека одно из качеств, например, "крякать", то получим ошибку (нажмите для проверки кнопку "Run"):

    Обратите внимание на то, что отсутствие у структуры Person метода quack обнаружено в момент компиляции.

    В заключение этой главки приведем еще одну аналогию: если вам нужен столяр, то при объектно-ориентированном подходе вы должны потребовать какой-нибудь документ (например, диплом), доказывающий, что данный человек является столяром (объект принадлежит классу столяров). В утином случае нас никакой диплом не интересует. Важно только, умеет ли человек строгать, пилить и забивать гвозди.

    07 Методы ///