ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

Введение в Objective-C

Как и в любом языке программирования — в Objective-C тоже используются переменные. Переменные являются удобной интерпретацией конкретных фрагментов данных (числа, строки…).

Ниже на языке Objective-C описано присваивание переменной определенного значения.

<code data-result="[object Object]">x= 4;</code>

Переменная x принимает значение 4. В конце процедуры присваивания ставится точка с запятой, она нужна в конце каждой команды. Таким образом, мы даем понять компилятору, где заканчивается команда. Если вы забудете поставить точку с запятой — компилятор не сможет скомпилировать код, при этом он укажет нам в какой строке мы ошиблись.

Теперь, когда мы знаем, как присваивать переменным значения, мы можем осуществлять расчеты. Следующий код осуществляет расчет площади поверхности картинки.

<code data-result="[object Object]">pictureWide=8;
pictureHeight=6;
pictureSurfaceArea=pictureWide*pictureHeight;</code>

Заметьте, что компилятор не обращает внимания на пробелы (за исключением имен переменных, команд и т.д.) Чтобы придать коду больше выразительности вы можете использовать пробелы.

<code data-result="[object Object]">pictureWide = 8;
pictureHeight = 6;
pictureSurfaceArea = pictureWide * pictureHeight;</code>

Числа можно разделить на целые и дробные в следующем выражении представлены оба вида.

<code data-result="[object Object]">pictureWide = 8;
pictureHeight = 4.5f;
pictureSurfaceArea = pictureWide * pictureHeight;</code>

Целые используются для подсчета, например когда вам нужно сделать несколько повторений одной и той же инструкции. Дробные или числа с плавающей точкой используются, например в вычислениях среднего числа попаданий в бейсболе. Но приведенный выше код не будет работать. Мы не «сказали» компилятору к какому типу относятся наши переменные. Чтобы исправить ситуация нам нужно «объявить переменные»

<code data-result="[object Object]">int pictureWide;
float pictureHeight, pictureSurfaceArea;
pictureWide = 8;
pictureHeight = 4.5f;
pictureSurfaceArea = pictureWide * pictureHeight;</code>

В первой строке мы объявляем переменную pictureWidth как целое число. В следующей строке, мы объявляем сразу две переменные типа float (могут хранить дробные числа), это можно сделать при помощи запятой. Следует заметить, что при умножении переменной типа int на переменную типа float результат расчетов будет float. Зачем нам определять тип переменной? Это нужно для того, чтобы компилятор мог зарезервировать место в памяти для каждой переменной в программе. Так как различные типы данных, в данном случае целые int и дробные float, требуют разные объемы памяти и имеют различные представления, компилятор должен зарезервировать правильный объем памяти и использовать верные представления о типе данных. Но здесь возникает закономерный вопрос, что если нам прийдется работать с очень большими числами? И они не будут помещаться в несколько байтов, которые выделит для них компилятор, что с ними станет? Есть два ответа на этот вопрос: во-первых, числа как целые так и с плавающей точкой, имеют аналоги, которые могут хранить большие числа (или числа более высокой точности). В большинстве систем это long и double, соответственно. Но даже они могут переполняться, что приводит нас ко второму ответу: это будет ваша (как программиста) работа — отслеживать ошибки. В любом случае, это не та проблема, которая будет обсуждаться в первой главе.
В Objective-C так же есть возможность объявлять и инициализировать переменную за один шаг

<code data-result="[object Object]">int x = 10;
float y = 3.5f, z = 42.0f;</code>

Это позволит создавать более компактный код.
Типы данных
Как мы уже знаем, данные, хранящиеся в переменной могут быть разных типов. В Objective-C, такие простые типы данных как эти, также известны как скалярные типы данных. Здесь приведен список общих скалярных типов данных доступных в Objective-C:

Математические операции
Простые математические расчеты выполняются с использованием следующих символов.
+ для сложения
— для вычитания
/ для деления
* для умножения
Для того чтобы сделать код более компактным вместо записи вида x = x + 1; следует использовать x++; или ++x;. В любом случае это означает: увеличение х на одну единицу. При этом следует учитывать ++ используется до или после имени переменной. Давайте рассмотрим пару примеров.

<code data-result="[object Object]">x = 10;
y = 2 * (x++);</code>

После выполнения этого кода y = 20, а x = 11.

x = 10;
y = 2 * (++x);

После выполнения этого кода y = 22, а x = 11. Этот пример эквивалентный следующему.

<code data-result="[object Object]">x = 10;
y = 2 * (++x);</code>

Таким образом мы объединяем два выражения в одно и делаем код более компактным. Для определения порядка выполнения операций следует использовать скобки. Обычно * и / имеют больший приоритет над + и –. Поэтому 2 * 3 + 4 = 10. А с помощью скобок, вы можете заставить это скромное сложение выполняться первым: 2 * (3 + 4) = 14.

Хочу отдельно уделить внимание оператору деления, потому что он выполняет совершенно разные действия в зависимости от того, работает ли он с целыми числами или вещественными. Давайте посмотрим на следующий пример.

<code data-result="[object Object]">int x = 5, y = 12, ratio;
ratio = y / x;</code>

Переменная ratio получит значение 2. Это произойдет потому, что она относиться к целочисленному типу и компилятор автоматически округляет дробное число, которое мы пытаемся присвоить этой переменной.
Логические операнды
Тип BOOL является простым логическим представлением значений true или false. 1 (YES) и 0 (NO) отождествляемые с true и falseзначениями часто используются как взаимозаменяемые, и их можно считать эквивалентными:

Их часто используют, когда нужно принять решение о выполнении некоторого действия в зависимости от логического значения переменной или результата работы функции.
Остаток от деления
Оператор, с которым большинство из вас знакомы % (остаток от деления). Он работает не так, как вы могли бы ожидать: оператор остатка от деления не используется для вычислений с процентами. Результатом оператора % будет остаток от целочисленного деления первого операнда на второй (если значение второго операнда равно нулю, то поведение оператора % неопределено).

<code data-result="[object Object]">int x = 13, y = 5, remainder;
remainder = x % y;</code>

Теперь значение remainder равно 3, потому что x равняется 2*y + 3. Иногда он действительно может очень пригодиться, но учтите что работает он только с целочисленными переменными. Но чаще всего вам прийдется применять этот оператор для выяснения является ли число четным:

<code data-result="[object Object]">int anInt; //Некий код, меняющий значение переменной anInt
if ((anInt % 2) == 0) {
     NSLog(@"Четное");
} else {
     NSLog(@"Нечетное");
}</code>

Comments are closed.