Типизация

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

В целом, почти все языки, о которых вы знаете, используют одну систему, так называемую “формальную систему типов”. Разнятся в языках только некоторые подходы и детали. Нельзя опускаться в священную войну и пытаться сравнивать это всё в формате “лучше или хуже”. Каждое решение ведёт к своим последствиям при разработке программы.

Если мы рассматриваем некоторые данные, например строку “Привет”, то эти данные связаны с каким-то типом. Для компьютера эта связь не имеет смысла, для него всё представляется нулями и единицами. Эта связь имеет смысл для нас и для некоторых инструментов, которыми мы пользуемся. В случае со строкой “Привет” мы можем оперировать типом “string”, он говорит что перед нами строка состоящая из символов и что символы в формате Unicode (2 байта на символ). Далее мы можем попробовать совершить такие действия:

“Привет” * 2;

О да, мы описали выражение, в котором пытаемся умножить строку на два. Какой результат у этой операции? На самом деле нельзя сказать. Нет никакой общепринятой аксиомы, как в случае с числами. Технически мы можем описать такую операцию и сказать, что произведение строки и числа даёт новую строку, в которой каждая буква исходной повторяется на основе множителя. А можно придумать другую операцию.

Если такая операция не описана в рамках нашей программы, то она считается ошибочной. О чём нас предупредит наша среда разработки. Каждое выражение также имеет определённый тип, при этом итоговый тип не всегда тот же, что и тип операндов. Главное запомнить, что каждое значение, которое мы рассматриваем, имеет некий тип, с которым мы должны считаться.

В C# есть набор примитивных типов, которые мы можем использовать. Также есть различные пользовательские типы, которые мы можем брать как со стандартной библиотеки, так и описывать самостоятельно.  При разговоре про примитивные типы нельзя опускать такой термин как литерал. Литерал – это прямое представление значения определённого типа. У каждого типа свой формат записи литералов.

Так для целочисленного типа мы записываем просто число. А значение строкового типа описываем в двойных кавычках.

ИндентификаторЛитералДетали
byte, short, ushort, int, uint, long, ulong Просто число. Пример: 1, 5, 25, -34, 0. Минус нуля в C# нет;Целочисленные типы различаются по размеру (8, 16, 32 и 64 бита на число) и доступности отрицательных значений.
booltrue или false;Логический тип который удобен при работе с логическими операциями. Ограничен двумя значениями но при этом ему нужно 8 бит для их представления.
charСимвол в одинарных кавычках. Пример: ‘a’, ‘b’, ‘1’ ;Занимает 16 бит, и представляет символ из таблицы Unicode. Стоит понимать что символ ‘1’ и число 1 – это разные вещи.
stringНекий набор символов (char) который образует строку. Символы все вместе находятся под двойным кавычками. Пример: “Hello”, “12”;
float, doubleДля double просто число с дробной частью через точку. Для float тоже самое, но с припиской f. Пример: 12.0, 12.4, 14.2f;Необходим для представления нецелых чисел.

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *