Изучаем C++. Часть 2. Переменные, константы и операции с ними
Разбираемся, как работать с данными в программе на C++. Будет много теории и примеров, чтобы вы углубились в язык ещё больше.
Это вторая часть из серии «Глубокое погружение в C++». В прошлый раз мы разобрались, что такое программа и из чего она состоит, а сейчас узнаем азы работы с данными.
Что такое данные и как они хранятся в программах
Все программы работают с данными. Данные — это любые значения, которые используются в работе программы: строки, числа, ссылки и символы. Например: имя, возраст, количество денег на счету, здоровье персонажа в игре и так далее. Даже отсутствие данных — это данные.
Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Все эти и другие значения хранятся в оперативной памяти. Для каждого значения выделяется отдельная ячейка, и одновременно в ней может находиться только что-то одно.
Давайте рассмотрим это на примере коробок:
Мы говорим компьютеру, что нам нужна коробка x, которая будет хранить целые числа, но пока не помещаем в неё никакого значения. Компьютер создаёт такую коробку, подписывает её и помещает в неё null.
Далее мы пишем команду x = 5;, и компьютер меняет значение внутри коробки. Размер коробки при этом не меняется. Так получается, потому что для хранения каждого примитивного типа данных выделяется определённое количество памяти. Например, для целых чисел это четыре байта, что позволяет хранить значения в диапазоне от −2 147 483 648 до 2 147 483 647.
Коробки, описанные выше, в программировании называются переменными (англ. variable). Их значение можно менять во время работы программы. Также существуют коробки, которые менять нельзя, — их называют константами.
То, какие данные сейчас хранятся в памяти, называется состоянием. Состояние может быть у программы, системы, компьютера и так далее. В C++ очень важно иметь доступ к состоянию, чтобы писать полезные программы.
Переменные в C++
Теперь попробуем создать свои переменные.
Для начала объявим переменную, то есть скажем компьютеру, что нам нужно занять место в памяти. Для этого укажем тип данных, а потом название переменной.
| Код | Как читается |
|---|---|
| int x; | Объявить целочисленную переменную x без значения. |
Так создаётся переменная без значения. Если вы хотите, чтобы в ней сразу было какое-то число, то нужно использовать знак присваивания (=):
| Код | Как читается |
|---|---|
| int y = 5; | Объявить целочисленную переменную y со значением 5. |
Теперь в любое время можно менять значения переменных:
| Код | Как читается |
|---|---|
| x = 6; | Присвоить переменной x значение 6. |
Математический знак равенства ( =) в программировании называется знаком присваивания.
Важно! Указывать тип данных нужно только при объявлении переменной.
Давайте попробуем вывести значение какой-нибудь переменной на экран. Для этого напишем следующий код:
Внимательно прочтите этот код, а потом скомпилируйте и запустите программу:
Попробуйте изменить значение переменной age на любое другое число и посмотрите, как изменится вывод.
Допустимые имена для переменных
Идентификаторы переменных могут содержать в себе:
При этом название не может начинаться с цифр. Примеры названий:
Все идентификаторы регистрозависимы. Это значит, что name и Name — разные переменные.
Рекомендуется давать именам простые названия на английском языке, чтобы код был понятен и вам, и другим людям. Например:
Если название должно состоять из нескольких слов, то рекомендуется использовать camelCase (с англ. «верблюжий регистр»): первое слово пишется со строчной буквы, а каждое последующее — с заглавной.
Типы данных в программировании
Чаще всего используются следующие типы данных:
Также существуют ссылочные типы — такие переменные хранят в себе не само значение, а ссылку на него в оперативной памяти. К ссылочным типам относятся массивы, объекты, строки (так называют любой текст) и многое другое. Для строк используется тип std: string.
Вот несколько примеров переменных разных типов:
Комментарии в C++
В коде выше русский текст после двойных слэшей (//) — это комментарии. Они позволяют разработчикам делать заметки, объяснять код так, чтобы все могли в нём ориентироваться. Компилятор игнорирует комментарии, поэтому они никак не влияют на работу программы.
Есть два типа комментариев:
Попробуйте написать в коде и те, и другие комментарии, чтобы понять, как они работают.
Константы в C++
Чтобы создать константу, используйте ключевое слово const:
Константы обычно нужны, чтобы хранить какие-то постоянные величины из физики, математики или геометрии: число пи, ускорение свободного падения, скорость света и так далее. Однако вы можете хранить в них и другие значения, которые должны оставаться постоянными:
Математические операции в C++
В С++ есть пять базовых математических операций:
Используются они следующим образом:
Важно! Сначала выполняется правая часть выражения после знака =, а потом левая. То есть переменной не будет присвоено значения, пока не выполнены все вычисления. Поэтому можно записать в переменную результат вычислений, в которых использовалась эта же переменная:
Если вам нужно провести какую-то операцию с переменной, а потом записать значение в неё же, используйте следующие операторы:
Во время работы с С++ вы будете часто прибавлять или отнимать единицу от какой-нибудь переменной. Для этого тоже есть сокращённая запись:
Инкремент и декремент могут быть префиксными (++x) и постфиксными (x++). Префиксный инкремент сначала прибавляет к переменной единицу, а потом использует эту переменную, а постфиксный — наоборот.
Что хранит в себе переменная
Давайте теперь разберемся с переменными, а именно что они из себя представляют и для чего служат. Разбираться мы будем на практике: для этого мы напишем вторую программу, которая будет запрашивать у пользователя поочередно два целых числа, затем складывать их и результат выводить на экран. Затем уже на этом примере разберемся с сущностью переменных в программировании. Хотя, я думаю, что вы все и сами поймете, изучив пример, в котором используются переменные.
Этот же текст с использованием однострочного комментария выглядел бы так:
Вот мы и разобрались с комментариями. Запомните и используйте в своих программах для ясности!
Прежде, чем использовать какую-либо переменную в программе, ее нужно объявить.
Объявить переменную можно в любом месте программы, до ее первого использования. Хотя желательно в своих программах придерживаться какого-либо одного стиля: например, объявлять в начале функции main(), как в этой программе.
Переменные могут хранить не только числовые значения, но и символьные, логические. Пока что мы рассматриваем только числовые. В данном случае мы объявили три переменные целого типа.
Можно также объявить эти переменные и в одну строку, т.к. их типы совпадают. Получится так:
Сейчас хочу немного сказать о синтаксисе языка. Как и в любом языке, понятном человеку, в компьютерном языке программирования тоже есть свой синтаксис. С его помощью определяют правила построения инструкций компьютеру. Рассмотрим синтаксис объявления переменных.
Следующая строка кода выводит значение этой переменной на экран:
Теперь начинаем кодить. Набирайте программу в среде CodeBlocks, компилируйте, запускайте на выполнение и экспериментируйте с ней. Вот теперь хоть какая-то, а польза уже есть с нашей программы, она складывает два числа как-никак)))
Для закрепления материала на операторы ввода/вывода и работу с переменными давайте наберем еще одну программу. Предлагаю разобраться с ней вам самим. Нового в ней будет то, что операции сложения, вычитания, деления и умножения можно производить непосредственно в потоке вывода, т.е. не нужно будет объявлять еще дополнительно переменную для хранения результата произведенных операций. Это еще одно удобство языка С++.
Не забывайте делать отступы для лучшей читабельности и ясности кода. Это очень важное замечание!
Напишите программу, которая запрашивает у пользователя три числа, записывает их в ранее объявленные переменные, а затем с помощью первого оператора вывода выводит их сумму, а во втором операторе вывода выводит их произведение. Сравните ваш код с кодом на следующей странице.
Вы также можете сами себе выдумать подобное задание и реализовать. Больше работайте в редакторе с программой, экспериментируйте с кодом и у вас все получится!
Java Core для самых маленьких. Часть 3. Переменные
В предыдущей статье мы говорили о типах данных, а теперь поговорим о вытекающей из этого теме, о переменных.
На скриншоте выше продемонстрирован пример создания переменных.
Давайте сразу научимся давать имена переменным правильно. Существует документ Java Code Conventions. В нем указаны правила к написанию кода на Java. Нужно это для того, что бы Java код в разных проектах был написан в едином стиле. Таким образом, новоприбывший на проект программист не будет отвлекаться на новый стиль кода, ведь он будет оформлен так же, как и на других проектах. Эти правила работают и при нейминге переменных.
Итак, переменные принято называть в lowerCamelCase стиле. Сейчас покажу как хорошо, а как плохо:
Вот было значение 1998, а на следующей строке стало 2000. А вот с константой так не получится. Константа гарантирует, что ее значение не изменится на протяжении всего времени выполнения программы. Как создать константу? Очень просто:
Нужно всего лишь дописать ключевое слово final перед типом данных переменной. Для простоты понимания, мы как бы «финализируем» значение переменной и говорим, что это значение конечное.
Обратим внимание на имя константы. Когда мы даем имя константе, то должны делать это в стиле SCREAMING_SNAKE_CASE. Давайте исправим мой код:
В целом, вас никогда не погладят по головке за правильный нейминг в коде. Подразумевается, что это нечто естественное при написании кода. Как правила этикета у людей. А вот если вы будете называть ваши переменные и константы абы как, получите незамедлительного леща.
Инициализация переменных
У всех переменных из моих примеров уже было присвоено начальное значение. Процесс присвоения начального значения называется инициализацией переменной. И не обязательно инициализировать переменную во время ее объявления. Java позволяет сделать это и позже.
Во-первых, можно объявлять переменные через запятую (если они одинакового типа):
При этом, смотрите, мы можем некоторые из них инициализировать прямо во время объявления. А теперь инициализируем оставшиеся:
Для инициализации переменных типа char я использовал цепочку присваиваний. Да, и так тоже можно. Хотя используется очень редко.
Если мы попытаемся провести какую-то операция с переменной, у которой нет значения, то получим ошибку.
Оператор присваивания
Литералы
В Java постоянные значения задаются литеральным представлением. Простым языком, при помощи определенных символов мы можем указывать тип данных. Вот например, при работе с целочисленными литералами нам не нужны никакие литералы. Мы просто пишем число 1998; и Java понимает, что это целочисленное значение.
Так, что еще за символы подчеркивания в значении переменной? Это всего-навсего декор. С JDK 7 допустимо указывать знаки подчеркивания, для разбиения больших чисел на разряды, для удобства чтения.
В вышеописанных примерах были литералы для целочисленных десятичных значений. А еще мы можем присвоить целому числу литерал в виде восьмеричного значения. Для этого вам нужно добавить в самом начале значения 0. Но в таком случае, логично, что это значение не сможет содержать цифры 8 и 9, поскольку они выходят за пределы восьмеричной системы счисления.
Мало того, еще мы можем использовать литерал шестнадцатеричных значений. Такие значения обозначают с начальным 0x или 0X, а цифры в пределах от 10 до 15 заменяются символами ABCDEF английского алфавита.
С JDK 7 есть возможность указывать целочисленные литералы в двоичном виде. Для этого вначале значения нужно указать 0b или 0B и соответственно в значениях можно использовать только цифры 0 и 1. В реальности, вам навряд ли понадобятся литералы шестнадцатеричных, восьмеричного или двоичных значений. Однако, знать о них нужно.
Литералы дробных чисел
Но существует и экспоненциальная форма записи этих чисел в виде 2.34e12;
Где число после символа ‘e’ обозначает степень 10-ти. Простыми словами, мы записали 2 целых и 34 сотых умноженное на 10 в 12 степени.
Как и в случае с целочисленными значениями, литералы с плавающей точкой поддерживают нижнее подчеркивание начиная с JDK 7.
Логические литералы
Символьные литералы
Для символьных литералов, которые присутствуют на вашей клавиатуре вы можете использовать одинарные кавычки, обернув ими необходимый вам символ введенный с клавиатуры.
Я не просто так обратил ваше внимание на символы с клавиатуры. Ведь существуют и такие символы, которых на клавиатуре нет, да и на символы они не похожи. Сейчас разберемся.
А вот если символ нельзя ввести непосредственно с клавиатуры, то для ввода таких символов используют ряд управляющих последовательностей. Например, символ переноса строки ‘\n’. Существуют последовательности, которые существуют для ввода значений в восьмеричной и шестнадцатеричной форме. Например, мы захотели ввести букву tu катаканы смайлик: ツ. Берем и пишем:
В данной таблице вы можете посмотреть наиболее используемые последовательности символов:
Когда-то давно, я писал статью про экранирование символом. Настоятельно рекомендую прочитать, как дополнительный материал. Узнаете много интересного.
Строковый литерал
Можно заключить последовательность символов в двойные кавычки и получить так называемую строку.
Динамическая инициализация
Пару слов о таком термине как динамическая инициализация. Ничего сложного, только звучит страшно.
Переменную можно инициализировать другой переменной. Также, допускается инициализация переменной результатом какого-то выражения.
Главное, чтобы тип данных выражения / инициализирующей переменной совпадал с типом данных целевой переменной.
Преобразование и приведение типов
Знаю, вы уже подустали, сделали массу перерывов и подходов. Обещаю, это последняя тема в этой статье.
Часто программисты сталкиваются с ситуацией, когда переменной одного типа приходится присваивать значение другого типа. Если оба типа данных совместимы, их преобразование будет выполнено автоматически. Для автоматического преобразования должно выполняться 2 условия:
Чтобы выполнить преобразование двух несовместимых типов данных, нужно воспользоваться приведением типов. Это явное преобразование одного типа в другой. И выглядит это вот так:
Нужно понимать, что преобразование вы проводите на свой страх и риск. Вы должны быть уверенным в том, что преобразуемое значение помещается в диапазон целевого типа. В противном случае вы получите некорректные данные.
Подводим итоги
В этой статье мы поговорили о многих важных вещах. Узнали, как создавать переменные и константы в Java, и чем они отличаются. Узнали о способах инициализации переменных. Разобрались с тем, что такое литералы и какие они бывают. А так же выполнили преобразование и приведение типов данных.
Скажем спасибо Егору за предоставленный материал.
Переменные C# | Типы и виды переменных
Любой, даже начинающий программист сталкивается с переменными ежедневно. Но за кажущейся простотой скрыт мощный механизм работы с памятью. Давайте разбираться, что такое переменные подробнее.
Что такое переменная?
Определение переменной звучит примерно следующим образом:
Переменная – это именованная область памяти.
Но что это означает для нас. Давайте разбираться на примере.
Я думаю, что каждый из вас уже знаком с понятием переменной в алгебре. Это тот самый X, который приходиться искать в уравнении. В программировании переменная имеет схожие функции. Это своеобразный псевдоним, что-то неопределенное, неизвестное, под которым может скрываться кто угодно
Представь себе коробочку. На этой коробочке написано «Подарок» и это делает эту коробочку уникальной. Ты всегда сможешь найти именно эту коробку по этому имени (при условии, что не может существовать ни одной другой коробочки с таким именем).
А вот положить в эту коробочку ты можешь все что угодно. Это может быть и новенький IPhone, и миленький котеночек, и что-нибудь куда менее приятное (как в фильме «Семь»). Кстати, если не смотрел этот фильм, очень рекомендую, но только если у тебя крепкая психика и тебе больше 18 лет.
И в дальнейшем ты можешь как угодно работать с этой коробочкой. В любой момент ты можешь положить туда что-нибудь (предварительно выкинув оттуда то, что там лежало раньше), посмотреть, что там лежит, или вообще взять и выкинуть эту коробочку со всем содержимым.
При этом важно понимать, что концепция переменных это очень сложный механизм работы с памятью, который просто скрыт от программиста современными операционными системами и высокоуровневыми языками программирования.
Типизация переменных
Именно так работали бы переменные, если бы в не существовало типизации. Типизация – это возможность разделить коробочки по возможному содержимому. То есть, когда мы создаем коробочку, мы кроме имени указываем, что в ней может располагаться. И тогда, в коробочку для IPhone котеночка ты уже не засунешь.
Это позволяет дополнительно защититься от ошибок, потому что ты будешь заранее знать, что будет в коробочке, и будешь готов к тому, как тебе нужно будет себя вести с содержимым.
Языки программирования условно можно разделить на два больших типа:
Сильнотипизированные – те, где вся ответственность за указание типа переменных ложится на программиста
Слаботипизированные – те, где компьютер сам решает, какой тип используется в конкретном случае.
Язык C# относится к первым. Возможно, это лишает его такой гибкости как тот же самый JavaScript (который относится ко вторым), но при этом дает большую защищенность от ошибок.
Виды переменных в языке C#
Перед тем, как мы приступим к знакомству с основными типами данных в языке C# необходимо узнать изучить еще один вопрос – виды переменных. На самом деле их всего два:
Ссылочные – хранятся в куче (сложные типы и классы)
Значимые – хранятся в стеке (базовые примитивные типы)
Мы не будем подробно останавливаться на этой теме, но общая идея следующая:
Условно в компьютере существует два вида памяти для работы приложения:
Стек (Stack) – быстрая память, но сильно ограниченная по размеру
Куча (Heap) – память, ограниченная только размером оперативки, но при этом значительно более медленная, чем стек.
Таким образом несложно понять, что стек хранит небольшие по размеру данные, к которым обеспечивается доступ с наибольшей скоростью, а в куче хранятся сложные сущности, содержащие большой объем данных.
Типы переменных в языке C#
Начнем со знакомства с наиболее часто используемыми типами данных (большинство их них значимые):
Это самые распространенные и часто используемые типы данных, но это далеко не все типы. В таблице ниже приведены типы данных, которые используют в тех случаях, когда необходимо заботиться о быстродействии и потреблении системных ресурсов.
| Имя | Класс | Описание | Пример |
| sbyte | SByte | Маленькое целое число со знаком Надеюсь, ты заметил, что для типов float и decimal при дробном числе добавляется специальная литера (F и M соответственно). Это связано с тем, что по умолчанию в C# дробные числа хранятся в типе double, а это необходимо для того, чтобы компилятор правильно воспринимал эти числа. Для целых значений это не обязательно. Объявление переменной в языке C#Для того, чтобы объявить переменные следует указать ее тип и имя, и желательно сразу же инициализировать значением (но не обязательно). Соответственно, объявление целочисленной переменной будет выглядеть следующим образом: Где int – тип, i – имя переменной, = — символ присваивания значения, 42 – значение, ; — символ окончания команды. Данная форма является наиболее правильной, но в некоторых случаях возможно разделение данной операции на две команды Аналогичным образом происходит объявление переменных и других типов. Переменные типа var в языке C#Тип var по своей сути является просто синтаксическим сахаром. Он позволяет не дублировать указание типа в объявлении переменных, получая данные о типе из контекста. Проще всего это понять на примере. В данном случае компилятор и так может однозначно понять, что тип переменной должен быть целым числом, так как справа от = стоит целое число. Чтобы сэкономить силы программиста можно использовать тип var, который будет автоматически определять тип переменной из контекста, при этом она все также будет оставаться сильнотипизированой. То есть, если ты сначала объявишь переменную как целое число, а потом попробуешь добавить к ней строку, то получишь синтаксическую ошибку. Переменные типа dynamic в C#В данном случае, компилятор на этапе написания не будет вообще контролировать типы, но естественно на этапе выполнения приложения вы получите сообщение об ошибке. Я еще раз настоятельно рекомендую трижды подумать, перед тем как использовать этот тип, потом посоветоваться с опытными коллегами, а потом еще раз подумать, и только если не остается никакого другого варианта использовать этот тип. Задание по теме переменныеНеобходимо поэкспериментировать и объявить переменные всех типов данных. Вывести их на консоль. Изучить методы и свойства доступные для каждой переменной в помощнике intellisense. Подписывайтесь на мой YouTube-канал, чтобы не пропускать живые уроки по программированию на языке C#, а также вступайте в мою группу Вконтакте и Telegram-канал. Там много обучающих материалов по всем языкам, а также отличный IT-юмор. А также рекомендую прочитать статью Монитор для программиста: как выбрать? |






