ТИП СИСТЕМЫ

Большинство языков программирования отличаются несколькими характеристиками, которые могут включать некоторую систему типов, которая устанавливает категории объектов, с которыми нужно работать, и то, как они будут обрабатываться. Системы типов состоят из разных типов, которые можно рассматривать как набор возможных значений, которые могут включать разные типы данных, каждый из которых имеет определенный набор правил работы.

Проще говоря, система типов содержит набор правил, определяющих тип, назначаемый различным сущностям в компьютерной программе. Эти сущности могут быть переменными, функциями, выражениями или модулями. Основной целью этих систем было бы уменьшение количества ошибок, связанных с типами данных, это достигается за счет обеспечения правильного представления данных в программе.

Взяв в качестве примера Python, мы рассмотрим два предопределенных типа данных, строки и тип int. Для строк применяется набор правил, т. е. они могут быть объединены, разделены, итерабельны и т. д. С другой стороны, некоторые из этих операций невозможны для целых чисел, хотя их можно складывать и вычитать, пытаясь добавить int и строка вызовет ошибку типа, потому что это противоречит набору правил для типа данных «int».

В приведенном выше примере показана интерактивная оболочка Python, двум переменным A и B были назначены разные данные с разными типами данных, номер 1в виде целого числа и Richie в виде строки.

Передавая две переменные через функцию type, она извлекает ‹тип ‘int’› для A и ‹type ‘str’› для B, каждая из которых имеет разные наборы правил, следующих за их операциями.
Попытка математически сложить A и B привела к ошибке типа, поскольку эта операция не разрешена для строковых типов данных. Обратите внимание, что это не относится к некоторым языкам программирования, система типов может различаться в зависимости от языка.

Языки программирования можно дополнительно классифицировать в зависимости от используемого процесса проверки типов, который подразделяется на две группы, а именно:

— Проверка динамического типа
— Проверка статического типа

Проверка динамического типа

В динамически типизированных языках они дают больше свободы для изменения типа переменной на протяжении всего жизненного цикла. Примерами динамически типизированных языков являются Python, Ruby, PHP, Javascript и т. д. Для этих наборов языков тип переменной строго не применяется, когда определены, т. е. когда эти переменные определены, нам не нужно указывать тип. Для проверки динамического типа необходимо выполнить код, чтобы средства проверки типов обнаруживали ошибки. В случаях, когда вы не следуете правилам, относящимся к применяемому типу данных, ошибка не будет вызвана немедленно или до выполнения.

>>>  name = "Richie"
>>>  type(name)
>>>  <type 'str'>
>>>
>>>  name = 123
>>>  type(name)
>>>  <type 'int'>

Приведенный выше блок кода является примером кода Python, сначала переменной nameбыло присвоено значение Richieкоторый имеет строковый тип. Позже этой же переменной было присвоено другое значение другого типа данных int. Для этих переменных типы данных не были определены во время создания, вместо этого они были выведены, но это не относится к языкам программирования со статической типизацией.

Проверка статического типа

Для статически типизированных языков программирования у них практически нет свободы в отношении изменения типов переменных, поэтому фиксированный тип данных назначается каждому из них на протяжении всего их цикла, т. е. при определении переменной должен быть указан тип данных. Хорошими примерами являются Swift, C, C++, Fortran, Scala и Java.

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

var number: Int = 444
var text: String = "Tree"

Блок выше является примером в коде Swift. Вы заметите разницу между этим и python, здесь тип данных должен был быть указан первым при определении переменной, в случае с python это было не так. Теперь, если мы присвоим переменной int number не строковое значение, возникнет ошибка типа.

text = 444
error: cannot assign a value of type 'Int' to type 'String'

Дальнейшая классификация языков программирования может быть выполнена на основе уровня введенного ограничения безопасности типа, его можно разделить на две группы, а именно;

— Системы сильных типов

— Системы слабых типов.

Это распространенное заблуждение, что динамическая и статическая проверка типов — это то же самое, что системы типов Strong и Weak, язык программирования может быть динамически типизированным и иметь строгую систему типов. Для систем со строгой и слабой типизацией следует больше сосредоточиться на том, как язык обрабатывает значения, с которыми он работает, т. е. будет ли язык делать какие-то предположения или будет выдавать ошибку, если соответствующие значения не имеют совпадающих типов.

Надежные системы типов

В строго типизированном языке переменные привязаны к определенному типу данных, когда две или более переменных находятся в выражении, тип данных должен совпадать, чтобы он работал правильно, независимо от того, когда начинается проверка типа, т. е. ограничение безопасности типа выше. .

Пример выше — это код Python. Были созданы две переменные A и B типа int. Вы можете видеть, что попытка математически добавить их не удалась и вызвала TypeError, что вынудило разработчика исправить ошибку.

Слабые типизированные системы

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

const a = 10;
const b = "6";
console.log((a + b));

Две переменные A и B, одна из которых имеет тип integer, а другая строка, теперь их сложение вместе не вызовет ошибки, здесь Javascript пытается преобразовать одно из значений, чтобы оно было похоже на другое, тем самым заставляя целое число действовать как строка и объединяется они как струны. В этом случае результатом будет 106 строкового типа.

Заключение

В заключение можно сказать, что язык с динамической типизацией не обязательно указывает на слабый язык, а язык со статической типизацией не всегда будет иметь сильную систему типов.

Что касается сильных и слабых систем типов, мы больше ссылаемся на то, насколько строги ограничения безопасности типов, а для динамической и статической типизации мы ссылаемся на то, когда происходит проверка типов, которая может быть во время выполнения — динамическая типизация или во время компиляции — статическая типизация. .

С учетом сказанного, я надеюсь, что отдал должное Введению в системы типов. Если у вас есть дополнительные вопросы или исправления, не стесняйтесь оставлять их в разделе комментариев.