Урок по 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.

<<Предыдущий урок                                                                               Следующий урок>>

Рубрика: Уроки по C#

Комментарии

7 комментариев на “Урок по C# № 3: «Переменные и типы данных. Часть 1»”
  1. Юлій:

    вот тут я не совсем понял, какаято ошибка, не хочет запускатса

  2. Сергей:

    как объявить класс SystemInformation?
    Ошибка 1 Элемент «SystemInformation» не существует в текущем контексте.

  3. admin:

    Этот класс входит в пространство имен System.Windows.Forms
    Можно сделать просто в начале : using System.Windows.Forms, а можно (и лучше в нашем единичном случае) вызвать UserName так:
    System.Windows.Forms.SystemInformation.UserName

  4. Сергей:

    добавил в код строку:
    using System.Windows.Forms.SystemInformation.UserName;

    Ошибка 1 Имя типа или пространства имен «Forms» отсутствует в пространстве имен «System.Windows» (пропущена ссылка на сборку?)

    • admin:

      Компилятор и будет ругаться. Нужно вручную добавить ссылку. Ее нужно найти в пункте References проекта.
      На самом деле, тут я несколько грубанул в примере. Гораздо проще было использовать Environment.UserName. Эффект будет таким же.
      В общем, поправлю статью

  5. Andriy:

    string name=»Владимир»;
    Тут кавычки написаны кирилицей?

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: