Урок по C# № 3: «Переменные и типы данных. Часть 1»
В прошлом уроке мы научились создавать проекты в VC # и рассмотрели структуру типичной консольной программы.
В этом уроке мы изучим, что такое переменная и основные арифметические операции на C#. К сожалению, хотя тема и очень простая, но в силу своего объема ее лучше разделить на две части. В этой части вы познакомитесь именно с переменными.
Одно из правил программирования- код должен быть максимально универсальным. Если вы помните, в предыдущем уроке мы запрашивали имя пользователя и выводили его на экран. Для этой цели мы объявили переменную name типа string (строка). Конечно, если вы единоличный пользователь компьютера, то можно было не мучиться с вводом имени и просто выводить уже готовое имя на экран:
Console.WriteLine (“Привет Вячеслав!”);
Можно даже воспользоваться статическим свойством UserName класса Environment и написать так:
Console.WriteLine("Привет " +Environment.UserName);
В этом случае на консоль выведется имя пользователя компьютера, что, в принципе, почти всегда совпадает с его реальным именем.
Однако такая программа теряет гибкость. Вывод на экран будет строго предопределен рамками кода. Использование переменных как раз и позволяют решить подобную проблему.
Честно говоря, я давал много уроков и тема переменных немного уже надоела мне. В уроке 2 по C++: «Укрощение переменных» я постарался максимально понятно описать что это такое и для чего они нужны. Не хочу повторяться, а читателям рекомендую ознакомиться с указанным уроком. Пусть вас не смущает, что он по C++. Как я уже говорил, C# это потомок C++.
Тем не менее, коснуться темы переменных можно и в этом уроке, но уже не так подробно. Итак, вернемся к нашему многострадальному выводу на экран имени пользователя.
Представьте, что нам нужно вывести имя в нескольких местах программы. Можно вводить его в том же духе, однако так или иначе у вас накопятся проблемы. Допустим, что у вас в программе имя пользователя упоминается тысячу раз. И что, вы все время будете его вводить? Кроме того, человек несовершенен — есть риск, что к своему имени вы случайно прибавите лишний пробел и здесь выскочит ошибка. Попробуйте запустить у себя на компьютере такой код:
If ("Пользователь " =="Пользователь") Console.WriteLine ("Аутентификация верна"); else Console.WriteLine ("Имя не совпадает");
Естественно, что этот код вам нужно вбить в разделе Main вашего класса программы (настоятельно рекомендую запустить его). Как думаете, что напишет компьютер? Правильно, «Имя не совпадает». А все потому, что я сравнивал (два знака = обозначает операцию сравнения) два разных значения — одно с пробелом, другое без. А представьте, что таких ошибок может быть в программе просто уйма и вы на глаз просто все их не рассмотрите.
Кроме того, представьте, что ваша программа приглянулась друзьям. Вы даете кому-то ее и говорите: » Вот тут в коде нужно поменять «Сережа» на «Андрей» и все будет нормально». А этот самый Андрей напишет с ошибками и вы будете виноваты.
Вот так на соврешенно бессмыленном примере мы подошли к тому, что в программе нужно использовать переменные. Вместо того, чтобы в коде несколько раз писать «Дима», «Слава», Маша» и т.д., нужно использовать некое хранилище, в которое мы и поместим это значени. Таким хранилищем как раз и являются переменные.
В нашем случае мы как раз создадим переменную name (или любое другое имя, неважно) и поместим в него значение путем оператора присваивания ( просто знак =, как в математике). Тогда у нас код будет такой:
string name=»Владимир»;
Теперь мы можем вместо слово «Владимир» в коде вызывать переменную name и не опасаться за неправильный ввод данных. Кроме того, вы получаете гибкость кода. В случае с тем же выдуманным другом Андреем, вам уже нужно будет присвоить переменной name значение «Андрей».
Но мы же программисты, не так ли? Зачем этого Андрея пускать в наш код. Давайте просто сделаем интерфейс, позволяющий ввести абсолютно любое имя, будь то Сергей или какой-нибудь Гильгамеш. В этом случае переменные будут как нельзя кстати. Дело в том, что переменная на то и переменная, что может принимать любое значение согласно своему типу. Имя «Владимир» в коде величина постоянная и мы изменить его не в силах. Однако переменной name, хранящей в себе «Владимир», мы вправе потом присвоить новое значение, например «Юлия». Удобно, не так ли?
Мы пока пишем консольные приложения. В них для ввода данных с клавиатуры используется метод ReadLine класса Console. Он возвращает строку на экране вашей консоли. В нашем случае, это будет выглядеть так:
string name=Console.ReadLine ();
Здесь мы считали в переменную name строку с клавиатуры. Как видите, все достаточно просто.
Переменные крайне полезная штука в программировании. Однако всегда нужно учитывать типизацию переменной. C# строго типизирированный язык. Это означает, что программисту самому нужно заботиться о типе данных переменной. Конечно, есть языки, в которых этого делать не нужно — тот же Perl, где мы вправе объявить переменную $name и предоставить механизм выделения памяти для нее уже самому языку. В C# подобного нельзя делать.
Для чего придумали эту типизацию? Все очень просто — каждый тип памяти занимает определенный объем памяти в вашем компьютере. Пусть он и небольшой, до когда переменных несколько миллионов или миллиардов, тут уже все становится критичным. Представьте себе, что у вас стоит задача перенести 10 литров воды и 10 булок хлеба. Естественно, что переноса вы выберите в качестве тары для воды ведро, а для хлеба -большую сумку. Конечно, можно запихать хлеб в ведро и перенести, но в сумке воду вы уже вряд ли перенесете. Так и в программировании — неправильно выбранный тип данных вам изрядно попортит нервы.
В общем случае, переменная на C# объявляется так:
тип _переменной имя_переменной;
Обратите внимание, что типом переменной может быть любой из встроенных типов, так и созданный программистом (классы и т.д.). C# поддерживает Unicode, а это означает, что вы можете вполне написать имя переменной русскими символами и компилятор даже не обратит внимание (что нельзя делать в том же C++ или Delphi). Правила именования переменной просты. Нельзя давать имя переменной, совпадающее с ключевым словом языка, имя не должно начинаться с цифр. Также обратите внимание, что C# обращает внимание на регистр ввода. Иными словами, переменные name и Name -это две совершенно разные переменные.
С именование переменных, думаю, что вы разобрались. Единственное, что хочу добавить — давайте переменным осмысленные имена и старайтесь предварять префиксами. Представьте, что у вас есть переменные a1m, b34m и т.п. Да через месяц вы даже не сможете вспомнить, что они обозначают. А ведь эти переменные вы могли назвать там height, age и т.д. Еще один момент — старайтесь называть свои переменные строчными буквами. Дело в том, что это в последствии сэкономит вам массу времени. В C# с прописной буквы начинаются имена классов и структур, а ваши переменные просто могут запутать вас же самих.
С типами данных уже не все так просто. В C# они разделяются на так называемые значимые типы и ссылочные. В чем между ними разница и как их правильно использовать мы рассмотрим в следующей части этого урока. А пока отдохните минут 15.