Введение

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

В рамках серии общих концепций программирования

Переменные

Переменные — Введение

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

Давайте разберем, что здесь происходит. Для тех из вас, кто посещал уроки математики или информатики, подумайте о ключевом слове let так же, как если бы ваш учитель говорил что-то вроде «рассмотрите следующую задачу, пусть…». Это ключевое слово, которое сообщает Rust, что мы собираемся объявить переменную.

После let мы объявляем переменную изменяемой. Если мы не используем это ключевое слово, объявленная переменная будет по умолчанию неизменяемой, и поэтому мы не сможем изменить ее во время выполнения нашей программы. Используя ключевое слово mut, мы даем себе возможность изменить это значение позже. Другими словами, как только мы присвоим значение имени переменной, мы не сможем позже присвоить другое значение тому же имени переменной. Естественно, изменяемые переменные очень скоро будут иметь для нас решающее значение, и стоит отметить, что сделать некоторые переменные изменяемыми просто необходимо.

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

Константы

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

Неизменяемая переменная и константа не могут быть изменены во время выполнения. Однако неизменяемой переменной может быть присвоено начальное значение до или во время выполнения, если у нее не было предыдущего значения. С константой дело обстоит иначе — константа должна быть определена ДО выполнения, ее нельзя ни изменить, ни создать во время выполнения.

Выше мы видим, как мы объявляем константу в Rust.

  1. Мы используем соответствующее ключевое слово.
  2. За ней следует переменная с именем, написанным заглавными буквами.
  3. Затем мы должны объявить его тип данных, в данном случае 32-битное целое число без знака.
  4. Наконец, мы приравниваем это к выбранному нами значению.

Затенение

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

На первый взгляд может показаться, что этот код пытается нарушить правила неизменности, но это не так! Первоначальное объявление переменной с присвоением 5 не является для нас чем-то новым. Однако во второй строке все становится интереснее — поскольку мы снова используем ключевое слово let вместе с тем же именем переменной, мы не пытаемся изменить значение x, а объявляем новая переменная, которая, как оказалось, имеет то же имя.

Типы данных

Давайте еще раз обсудим этот пример из объявления константы.

Этот u32 известен как тип данных. Когда мы объявляем тип данных, мы сообщаем Rust, какой характер и размер данных мы собираемся хранить. Это необходимо для всех языков со статической типизацией. Это контрастирует с такими языками, как Python, которые имеют динамическую типизацию — т. е. нам не нужно объявлять типы данных, Python сам это сделает.

Давайте обсудим некоторые из различных типов данных в Rust:

Скаляры: типы данных, содержащие одиночные значения. Целые числа, числа с плавающей запятой, логические значения и символы.

Целые числа

Целые числа — это не дробные числа — целые числа, и в зависимости от ваших требований к памяти вы можете объявить целое число как 8, 16, 32, 64 или 128 бит — со знаком или без знака. Знаковый или беззнаковый просто означает, будут ли значения только положительными или, возможно, отрицательными.

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

Символы с плавающей запятой

Символы с плавающей запятой контрастируют с целыми числами, допуская дробные значения — это числа, которые в основном включают десятичную точку и все, что может идти после нее.

В частности, мы можем объявить числа с плавающей запятой размером 64 или 32 бита. Как правило, значение по умолчанию — 64 бита — причина, по которой вычисление операций f64 выполняется сравнительно быстро с вычислением вычислений f32 на современном ЦП, однако f64 обеспечивает большую точность.

Булевы значения

Логический тип в Rust ничем не отличается от других языков программирования. Логические значения имеют размер в один байт и лучше всего объясняются на примере:

Типы персонажей

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

Символы имеют размер 4 байта и представляют собой скалярное значение Unicode — это означает, что они могут представлять символы ASCII, буквы с акцентом, китайские, японские буквы, смайлики и т. д.

Составные типы

Составные типы включают кортеж и массив. (Есть больше, но один шаг за раз).

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

Массив, напротив, является средством хранения набора значений одного и того же типа данных. Массивы в Rust, как и в C, имеют фиксированный размер.

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

Массив объявляется списком, разделенным запятыми, заключенным в квадратные скобки. Примечательно, что одно различие между кортежем и массивом заключается в том, что данные кортежа хранятся в куче, а данные массива хранятся в стеке.

Заключение

Это все для этой статьи, ребята! Мы обсудили переменные, типы данных и составные типы данных. Я надеюсь, что эта статья была информативной, и если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях!

В следующий раз мы рассмотрим объявление функций и управление потоком.

об авторе

Меня зовут Люк, и я получил степень бакалавра технических наук в области электротехники и электроники в Мальтийском университете, где я изучал встраиваемые системы. После этого я получил степень магистра наук в области искусственного интеллекта в Лондонском университете королевы Марии. С тех пор я работаю инженером по искусственному интеллекту и Интернету вещей.