мая 6, 2012 | Published in Си и C++
Из серии:
- Введение в программирование на Си
- Переменные и типы данных в Си
- * Операторы, условия и циклы языка Си
Си включает в себя всего 3 цикла и 2 условных оператора. Набор арифметических операторов и операторов сравнения стандартен. В данной статье мы сначала бегло пробежимся по арифметическим операторам и операторам сравнения, а затем перейдем к изучению циклов и условий, в которых познакомимся с операторами еще более подробно. Операторы работы с бинарными данными мы рассмотрим в отдельной статье посвященной работе с битами и байтами.
Read the rest of this entry »
мая 2, 2012 | Published in Си и C++
Из серии:
- Введение в программирование на Си
- * Переменные и типы данных в Си
- Операторы, условия и циклы языка Си
Нужно быть полнейшим идиотом для того, чтобы не понять по заголовку о чем идет речь в статье. Очевидно, что читатели RubyDev в совершенстве адекватные люди с IQ не ниже среднего и достаточно широкими энциклопедическими знаниями и кругозором и потому с места мы сразу прыгаем в карьер минуя абсолютно бесполезное разлогое введение в тему статьи.
Переменные
Переменные — это именованные, понятные человеку ссылки на данные. Переменные в языке Си являются статическим и строготипизированными. На практике это проявляется в следующем:
- Переменная должна быть объявлена перед использованием.
- При объявлении переменной должен быть определен ее тип данных, а точнее тип данных, на который она ссылается.
- Тип данных переменной остается неизменным на протяжении всего выполнения программы.
- Переменная бронирует ячейку в памяти, которая соответствует указанному типу данных и не может эту ячейку как-либо расширить. По этой причине необходимо осторожно подбирать тип данных для того, чтобы быть уверенным, что памяти зарезервированной переменной хватит для сохранения данных.
Если сравнивать переменные Си и Ruby, то они весьма отличаются друг от друга. Например переменные в Ruby являются не статическими, но динамическими и не типизированными. Переменная в Ruby может ссылаться на любой тип данных и постоянно менять его. Это связано с тем, что в Ruby переменная не резервирует область памяти, а ссылается на объект в виртуальной таблице объектов. Визуально это можно представить себе как две таблицы, одна содержит два столбца, в одном хранятся все объекты (их данные), а в другом — идентификатор object_id. Во второй таблице у нас имеются также два столбца, в одном хранится object_id, а в другом имя переменной. Когда вы присваиваете переменной другое значение, то во второй таблице напротив имени переменной просто меняется object_id. В Си все совсем иначе. Переменная при объявлении захватывает область памяти, размер которой соответствует типу переменной, например 1 байт. Далее переменная ссылается на эту область данных, а вы можете помещать в нее любое значение.
Read the rest of this entry »
мая 2, 2012 | Published in Си и C++
Из серии:
- * Введение в программирование на Си
- Переменные и типы данных в Си
- Операторы, условия и циклы языка Си
Несмотря на название RubyDev старается охватить максимальное количество тем касающихся разработки. Одной из таких тем является программирование на языке Си. Си был выбран потому, что это достаточно популярный язык, который уже более 30 лет остается весьма актуальным. Кроме того, Си будет интересен программистам на Ruby тем, что на нем можно легко писать расширения ваших gem’ов или критические куски вашего приложения, где производительность крайне важна.
Мы не будем погружаться в исторический экскурс. Совершенно не важно знать кто и когда создал Си и почему. Это совершенно бесполезная информация для изучения Си и я зря потратил бы время пытаясь рассказать историю языка. С другой стороны важно знать, что Си является императивным (иначе говоря — процедурным) языком программирования. Как показала практика и исследования, процедурные языки совершили переворот в мире разработки, поскольку программы написанные на процедурных языках легче читать и поддерживать, чем программы написанные на функциональных языка.
Лично для меня Си — это такое увлечение, по факту я ничего серьезного на нем не писал — не было потребности, потому советую сильно не доверять всему, что здесь написано. В целях предотвращения священных кровопролитных войн касательно преимуществ императивной парадигмы над функциональной, замечу, что говоря об этом преимуществе я лишь цитировал классиков. Признаться честно, я также (в меньшей мере) увлекаюсь языками CommonLisp и Erlang, которые являются функциональными. Разумеется, в каждом языке имеются свои недостатки, преимущества и изюм — что-то, что делает его выделяющимся из подобных ему.
Read the rest of this entry »