Вход/Регистрация
Программирование на Objective-C 2.0
вернуться

Кочан Стивен

Шрифт:

Некоторые средства языка не совсем согласуются с материалом других глав, поэтому мы включили их в этот раздел. Составные литералы

Составной литерал (compound literal) представляет собой имя типа, заключенное в круглые скобки, после которого следует список инициализации. В результате создается неименованное значение указанного типа, область действия которого ограничена блоком, в котором оно создано, или глобальной областью действия, если оно определено вне блока. В последнем случае все инициализаторы должны включать только константные выражения.

Рассмотрим следующий пример. (struct date) {.month = 7, .day = 2, .year = 2004}

Это выражение создает структуру типа struct date с указанными начальными значениями. Ее можно присвоить другой структуре типа struct date, например, theDate = (struct date} {.month = 7, .day = 2, .year = 2004};

Ее можно передать функции или методу как аргумент типа struct date, напри-мер, setStartDate ((struct date) {.month = 7, .day = 2, .year = 2004});

Кроме того, можно определять типы, отличные от структур. Например, если intPtr имеет тип int *, оператор intPtr = (int (100]) {(0) = 1, [50] = 50, [99] = 99 };

который может появиться в любом месте программы, задает intptr, указывающий на массив из 100 целых элементов, первые 3 элемента которого инициализируются указанным образом.

Если размер массива не задан, он определяется списком инициализации. Оператор goto

Оператор goto вызывает непосредственный переход в указанную точку програм-мы. Чтобы указать это место, требуется метка. Метка (label) — это имя, форми-руемое по таким же правилам, как имена переменных; сразу после него ставится двоеточие. Метка ставится непосредственно перед оператором, на который выполняется переход, и должна присутствовать в той же функции или методе, где находится соответствующий goto.

Например, оператор goto out_of_data;

вызывает переход к оператору, перед которым стоит метка out_of_data;. Эта метка должна находиться где-либо в функции или методе (до или после goto) и может использоваться, например, как показано ниже. out_of_data: NSLog (@"Unexpected end of data.");

Ленивые профаммисты часто злоупотребляют оператором goto для перехода к другим частям своего кода. Оператор goto нарушает нормальную последователь-ность программы, что затрудняет отслеживание ее выполнения. В практике на-дежною профаммирования не рекомендуется использовать операторы goto. Пустой оператор

Objective-C позволяет помещать отдельный символ «точка с запятой» в любом месте, где можно ставить обычный программный оператор. Такой оператор (его называют пустым (null) оператором) ничего не выполняем Это может показаться бесполезным, но программисты часто используют его в операторах while, for и do. Например, следующий оператор используется для сохранения всех символов, прочитанных со стандартного устройства ввода (по умолчанию это терминал), в массив символов, на который указывает text. Ввод продолжается, пока не встретится символ новой строки (перевода строки). В этом операторе ис-пользуется библиотечная процедура getchar, которая читает и возвращает по од-ному символу со стандартного устройства ввода. while ((*text++ = getchar )!='') ;

Все операции выполняются в соответствии с условиями цикла оператора while. Здесь требуется пустой оператор, поскольку компилятор интерпретирует оператор, который следует за выражением цикла, как тело цикла. Без пустого оператора компилятор будет обрабатывать как тело цикла любой следующий программный оператор. Оператор «запятая»

На самом нижнем уровне приоритетов находится оператор «запятая». В главе 5 мы указывали, что внутри оператора for можно включать в любое из полей не-сколько выражений, отделяя их запятыми. Например, в операторе for (i = 0, j = 100; i != 10; ++i, j -= 10) ...

до начала цикла инициализируется значение i, равное 0, и j, равное 100. После выполнения тела цикла значение i увеличивается на 1 ,а из значения) вычитается 10.

Поскольку все операторы в Objective-C дают какое-то значение, значением оператора «запятая» является результат правого выражения. Оператор sizeof

В программах никогда не следует делать какие-либо предположения о размере определенного типа данных, но иногда нужно знать эту информацию — например, при выделении динамической памяти, использовании библиотечных процедур, при записи или архивации данных в файл. В Objective-C имеется оператор с именем sizeof, который можно использовать для определения размера типа данных или объекта. Оператор sizeof возвращает размер указанного элемента в байтах. Аргументом для оператора sizeof может быть переменная, имя массива, имя базового типа данных, объект, имя производного типа данных или выражение. Например, написав sizeof (int)

мы получим число байтов для сохранения целого значения. На моем Mac Book Air получается значение 4 (то есть 32 бита). Если объявить х как массив из 100 значений типа int, то выражение sizeof (х)

даст количество памяти, необходимой для сохранения 100 целых элементов массива х.

Если myFract является объектом класса Fraction, содержащим две переменных экземпляра типа int (numerator и denominator — числитель и знаменатель), то выражение sizeof (myFract)

даст значение 4 на любом компьютере, где для представления указателей ис-пользуются 4 байта. На самом деле sizeof дает это значение для любого объекта, потому что мы запрашиваем размер указателя на данные объекта. Чтобы получить размер реальной структуры данных для хранения экземпляра объекта класса Fraction, нужно написать sizeof (myFract)

  • Читать дальше
  • 1
  • ...
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: