Добавлен: 31.03.2023
Просмотров: 194
Скачиваний: 1
Определение переменной
Вспомним элементарную алгебру и решим простую задачу.
Задача. Вычислить функцию
Y=ax2+bx+c
при значениях коэффициентов и аргумента:
а = 3; b= - 4;c= 5; х = 2.
Без всякого программирования мы подставим значения а. b, c, x в формулу Y= 3٠22– 4٠2 + 5, произведем соответствующие арифметические действия и получим в результате Y= 9.
При программировании этой задачи фрагмент программы будет выглядеть так: a = 3, b = - 4, c = 5, x = 2
Y = a*x^2 + b*x + c
Print “Y = “; Y
Здесь все вычисления закодированы в соответствие с правилами языка VisualBasic. Чтобы было понятней, вспомним, что кодирование –это выражение одного типа данных через другой тип данных. [Новичков, В.С. Начала программирования на языке QBASIC. Учебное пособие / В.С. Новичков, А.Н. Пылькин. — М.: ГЛТ, 2007. — с.34]
Эти же вычисления можно запрограммировать, закодировать и так:
k1 = 3
k2 = - 4
k3 = 5
x = 2
Y = k1*x^2 + k2*x + k3
Print “Y = “; Y
Результат вычисления Y не изменится.
Оба варианта программы практически повторяют постановку задачи. Однако это только по внешнему виду. Так, знаки равенства в программе – это не знаки «равно», а операторы присваивания. С помощью них коэффициентам присваиваются численные значения, записанные справа от знака присваивания. Умножение, возведение в степень закодированы с помощью специальных символов* и ^.
Оператор Print выводит информацию на формы (или в графические поля). Все, что после оператора Print записано в двойных кавычках, это текст. Он выводится без изменений, что записано, то и выводится. Если далее пишется переменная, то выводится ее значение. Поэтому на форме появится: Y= 9. В операторе Print после текста стоит символ «точка с запятой» (;). Это разделитель. В этом случае значение переменной выводится сразу за текстом. Если же после текста поставить разделитель – запятую, то вывод значения переменной произойдет через 14 символов, считая от края формы. [Новичков, В.С. Начала программирования на языке QBASIC. Учебное пособие / В.С. Новичков, А.Н. Пылькин. — М.: ГЛТ, 2007. — с.46]
Однако при вычислении Y одни слова, буквы перемножаются на другие (почти как в алгебраическом выражении), слова, буквы возводятся в квадрат и складываются тоже слова, буквы. Но если результат получается правильным, следовательно, на каком-то этапе выполнения программы происходит передача численных значений коэффициентов и аргумента Х в формулу. Происходит это в момент выполнения программы после ее перевода (трансляции) в машинные коды.
При программировании в машинных кодах выполнение простейшей арифметической операции над двумя числами требуется указать код операции, адреса ячеек оперативной памяти, где хранятся эти числа, и указать адрес ячеек памяти, где будет храниться результат операции. При выполнении такой программы по команде процессора данные передаются из этих ячеек на регистры процессора (так называются ячейки памяти процессора), где над ними и производится определенная операция. Иногда, согласно алгоритму задачи, результат может помещаться, записываться в ту же ячейку памяти, в которой хранилось одно из чисел, над которым выполнялась операция. В этом случае прежнее значение данных будет заменено новым. [Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — с.21]
В языках программирования высокого уровня аналогом этих ячеек памяти является переменная. Отсюда следующее определение. [Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — с.25]
Переменная – это именованная область памяти, где хранятся данные, с которыми производятся в программе определенные операции, действия и которые могут изменяться при выполнении программы. [Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — с.25]
Само название «переменная» предполагает ее изменчивость.
Важнейшее положение языков программирования:
После присвоения переменной некоторого значения вместо этого значения можно использовать переменную. Это равносильно использованию самих значений.
Именно в этом состоит основный смысл введения переменных в языках программирования.
В приведенном примере в первом варианте программы переменными являются: а, b, c, х, Y. Во втором варианте программы название некоторых переменных изменены и имеют имена:k1,k2,k3,x,Y. Только от программиста зависит, какие имена будут у переменных.
В расчетных задачах можно выделить переменные, являющиеся начальными данными, переменные для хранения промежуточных результатов и результирующие переменные, для вычисления которых и формулируется задача.
Именно использование переменных в программе позволяет выполнять одну и ту же программу с различными начальными значениями переменных без изменения кода программы.
После трансляции программы в машинные коды каждой переменной в компьютере выделяется определенная область оперативной памяти со своим адресом. Делают это трансляторы при переводе кодов программы, написанной программистом, в машинные коды и операционная система. [Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — с.32]
Но при разработке программы программиста совершенно не волнует, какой будет адрес выделяемой память и величина этой памяти для хранения значений переменных. Главное, если программист каким-либо способом задал, присвоил переменным какие-то значения, то в любых выражениях программы, где будут встречаться эти переменные, их значения будут подставляться вместо переменных. [Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — с.33]
2.2. Анализ работы с переменными
Переменные используются в любом языке программирования. Чтобы использовать переменную в программе, ее необходимо объявить. Хотя все данные на компьютере, в сущности, имеют одинаковый вид (наборы нулей и единиц), переменные бывают разных видов, называемых в их случае типами. Если снова провести аналогию с полочками, то они могут быть разными по высоте, из-за чего некоторые предметы могут умещаться только на определенных полочках. Например, длинные пакеты с молоком на нижней полке, а колбаска на верхней. Это очень важный момент, который нужно запомнить, так как типы играют важную роль в программировании. [Григорьев, А.Б. О чем не пишут в книгах по Delphi; БХВ-Петербург - Москва, 2013. – с.21]
Чтобы использовать переменные, их нужно объявлять. Это означает, что им необходимо назначать имя и указать тип. После объявления их можно начинать использовать в качестве единиц хранения для данных. Переменные объявляются с помощью оператора, имеющим следующий синтаксис:
type varName;
Вместо type вы указываете тип переменной, а в varName - название переменной. Тип переменной определяет ее поведение (об этом чуть позже), а имя переменной позволит вам не запутаться среди придуманных вами переменных. Предположим, нам поручили подсчитать число всех попугаев и котов, живущих в Москве: [Григорьев, А.Б. О чем не пишут в книгах по Delphi; БХВ-Петербург - Москва, 2013. – с.34]
int parrots; // мы объявили переменную parrots типа int
int cats; // мы объявили переменную cats тоже типа int
Используя понятные имена, мы не ошибемся в выборе переменных после подсчета всех попугаев и котов.
При попытке использовать переменную, которая не была объявлена, код не будет компилироваться, о чем вас предупредит компилятор. Поэтому пугаться не нужно, а вернитесь в редактор кода и объявите переменную.
Правила объявления переменных
Следует запомнить несколько несложных правил.
- Переменная должна быть объявлена до ее использования
- Переменную можно объявлять только внутри класса, как часть определения функции или внутри тела функции. (Переменные, объявленные внутри класса, называются полями. Переменные, используемые для определения функции, называются параметрами. Переменные, объявленные внутри функции, называются локальными переменными).
- Переменные должны начинаться с буквы или символа подчеркивания.
- Имена переменных могут содержать в себе буквы цифры и значки подчеркивания.
- Нельзя использовать в качестве имен переменных ключевые слова.
Вот несколько примеров:
// Правильные переменные
_cat = "кот";
Kitten3 = "Котенку 3 года";
Cat_Name = "Кота зовут Рыжик";
// Неправильные переменные
3Kitten = "кошка"; //начинается с цифры
Cat,Me = "Meow"; //нельзя использовать запятую
Можно объявлять более одной переменной в одном операторе присваивания. В этом случае все переменные отделяются запятыми и принадлежат к одному типу
int Cats, Kittens, Dogs;
Кроме того, можно сразу инициализировать объявляемую переменную
int Cats = 7;
Можно также инициализировать переменную динамически, используя любое действительное выражение. Например, мы хотим вычислить периметр квадрата:
int widthSquare = 5; // ширина квадрата
// динамически инициализируем переменную perimeter
int perimeter = widthSqare * 4;
Еще раз напомню, что язык С# чувствителен регистру (я действительно это говорил?), поэтому будьте аккуратны при создании переменных. Если вы ошибетесь в одной буковке, то программа может работать, но выдавать совсем неправильные результаты. Например, все перечисленные ниже имена переменных будут являться совершенно разными именами:
cat
Cat
CAT
cAt
Присваивания
Компьютеры создавались для вычислений, поэтому в программировании много заимствований из математики. Например, в школе вам приходилось видеть подобные выражения:
A = 3
B = 5
C = 6
D = A + B + C
Если перевести это простое упражнение на язык C#, то выглядеть это будет так:
int A, B, C, D;
A = 3;
B = 5;
C = 6;
D = A + B + C;
Иными словами, нам понадобилось просто объявить переменные и проставить точки с запятой в конце каждой строки. Но тем не менее, программирование - это не решение математических задач. Например, в математике допустимо следующее:
A = 3
C = A + B
B = 2
В C# менять порядок выражений нельзя. Операторы в C# выполняются последовательно, одно за другим! Во второй строчке примера переменной C присваивается значение суммы переменных A и B, но переменной B мы еще не присвоили никакого значения. Это недопустимо и программа просто не запустится. Также можно использовать круглые скобки для повышения приоритета (аналогично как в математике). [Ламот, А. Программирование трехмерных игр для Windows; Вильямс - Москва, 2011. – с.101]
x = y/2 - 3 * z + 127;
m = (n/2 - 3* k) - 220;
В C# знак равенства называется оператором присваивания и обозначается знаком =. Оператор - это символ или короткое слово, которые выполняют операцию. У операторов имеются операнды. Например, оператор присваивания имеет два операнда: переменную слева от знака равенства и выражение справа от знака равенства. В данном случае, оператор присваивания заставляет переменную слева от знака равенства быть присвоенной значению, вычисляемому выражением справа. [Ламот, А. Программирование трехмерных игр для Windows; Вильямс - Москва, 2011. – с.114]
Кстати, в C# допустимо и такое выражение с оператором присваивания, которое будет неправильным в математике:
C = 2;
C = C + 3;
В этом примере во второй строчке переменной C присваивается сумма текущего значения переменной C (т.е. 2) и числа 3.
Теперь рассмотрим еще один пример:
X + 3 = 8;
На самом деле вы не сможете написать такую строчку кода в C#, так программа откажется выполнять эту инструкцию. Слева от оператора разрешен только один тип операнда - переменная. Хотя с точки зрения математики здесь все верно.
С помощью оператора присваивания также можно выстраивать цепочку присваиваний:
int x, y, z;
x = y = z = 26; // всем переменным присваивается значение 26
Еще вам придется использовать в своих программах блок кода. Блок кода - это объединение нескольких операторов, заключенное в фигурные скобки. Блок кода позволяет создавать логический элемент, который будет использоваться как одиночный оператор. Обычно блок используется в операторах if и for, который мы будем изучать позже. [Ерофеев, В.И.; Меркушов, Ю.П. и др. Средства отладки программ в ОС ЕС; Статистика - Москва, 2012. – с.88]
Пока просто просмотрите на пример:
if(a > t)
{
v = w * m;
l = d - r;
}
В этом примере, если переменная a будет больше переменной t, то будут выполняться сразу два оператора умножения и вычитания. По отдельности эти операторы выполняться не будут. Использование блоков кода позволяет создавать специальные алгоритмы для решения различных задач.
Область видимости и время жизни переменных
Итак, блок кода окружается фигурными скобками. Но он также определяет область видимости, которая задает время жизни объявляемых переменных. Объявленная внутри области видимости переменная является недоступной для кода, который расположен за этой областью. Следовательно, при объявлении переменной в пределах ее области видимости, вы локализуете эту переменную и защищаете ее от неразрешенного доступа и модификации. Область видимости может быть вложенной. Каждый раз, создавая новый блок кода, вы создаете новую вложенную область видимости и при этом внешняя область становится видимой для вложенной области. Но при этом объекты, объявленные во внутренней области видимости будут невидимы для кода во внешней области. Рассмотрим пример:
// Пример использования вложенных областей
using System;
class ScopeDemo
{
public static void Main()
{
int x; // это переменная видна всему коду в пределах метода Main
x = 10;
if(x == 10)
{ // создается новая область видимости