SomonScriptDocsСистема типов
Глава 10 • Система типов

Система типов в SomonScript

Система типов (type system) помогает находить ошибки ещё до запуска программы и писать более надёжный код.

1. Типы-объединения (union types)

Иногда переменная может иметь несколько типов, например быть либо числом, либо строкой. Для этого используются типы-объединения.

Тип-объединение для результата

Переменная, которая может хранить либо число, либо строку.

example.som
навъ НатиҷаЁХато = рақам | сатр;

функсия ҳисоб(а: рақам, б: рақам): НатиҷаЁХато {
  агар (б === 0) {
    бозгашт "Хато: тақсим ба сифр";
  }
  бозгашт а / б;
}

тағ натиҷа: НатиҷаЁХато = ҳисоб(10, 2);
чоп.сабт("Натиҷа: " + натиҷа);
terminal
somon run types-union.som
Натиҷа: 5

2. Составные типы для объектов

Тип объекта можно описать отдельно, чтобы им пользовались сразу несколько переменных и функций.

Тип объекта для студента

Использование типа для описания структуры объекта.

example.som
навъ Донишҷӯ = {
  ном: сатр;
  синну_сол: рақам;
  фаъол_аст: мантиқӣ;
};

функсия нишон_додани_донишҷӯ(д: Донишҷӯ): беджавоб {
  чоп.сабт("Донишҷӯ: " + д.ном + ", синну сол: " + д.синну_сол);
}

тағ ахмад: Донишҷӯ = {
  ном: "Аҳмад",
  синну_сол: 20,
  фаъол_аст: дуруст,
};

нишон_додани_донишҷӯ(ахмад);
terminal
somon run types-student-type.som
Донишҷӯ: Аҳмад, синну сол: 20

3. Упражнения

Эти упражнения помогут закрепить тему системы типов.

  1. Создайте тип, при котором результат может быть либо числом, либо сообщением об ошибке, и напишите функцию, которая использует этот тип.
  2. Создайте тип Китоб со свойствами для названия, автора и числа страниц и опишите с его помощью список книг.
  3. Создайте тип для результата сетевого запроса (успех + данные или ошибка) и напишите пример функции.