<<
>>

Объявления

В ходе создания программы программист задает имя и тип каждого используемого объекта данных.

Явное объявление — это оператор программы, сообщающий компилятору сведения об именах и типах объектов данных, которые применяются в программе.

Место размещения объявления в программе определяет время жизни соответствующего объекта.

Например, если в начале функции, написанной на языке C, размещено объявление float х, у;, то оно указывает: во время выполнения функции потребуется два объекта данных типа float, которым назначаются имена х и у. Время жизни объекта х и объекта у ограничено периодом работы функции. После завершения выполнения функции эти объекты уничтожаются.

Во многих языках допускаются также неявные объявления, или объявления по умолчанию. Они применяются лишь тогда, когда отсутствуют явные объявления. Например, в программе на языке Fortran можно использовать простую переменную с именем NUMBER, не объявляя ее явным образом. Компилятор по умолчанию считает, что эта переменная имеет целый тип INTEGER, так как ее имя начинается с буквы, входящей в перечень I, J, K, L, M, N.

В противном случае переменной был бы приписан вещественный тип REAL.

Механизм неявных объявлений все еще далек от совершенства. Следует отметить, что неявные объявления могут быть пагубными для надежности программы, поскольку препятствуют выявлению на этапе компиляции различных опечаток или ошибок программиста. Скажем, в языке Fortran переменные, которые программистом были случайно оставлены необъявленными, получат типы по умолчанию и очень неожиданные атрибуты, что может привести к неявным и трудно распознаваемым ошибкам. Многие программисты, пишущие на языке Fortran, теперь не используют неявные объявления. В силу этого компилятор отказывается от неявного объявления переменных, что позволяет избежать потенциальных проблем со случайно необъявленными переменными.

Некоторые проблемы неявного объявления можно устранить, если использовать подход, разработанный в скриптовых языках. Здесь имена отдельных типов должны начинаться с конкретных специальных символов. Например, в языке Perl все переменные с именами, начинающимися с символа $, считаются скалярными величинами, которые могут быть строками или числами. Если имя начинается с символа @, то именуемая переменная является массивом; если имя начинается с символа %, то оно обозначает хешированную структуру. Подобный подход создает различные пространства имен для переменных с различными типами. В этом случае имена @music и %music абсолютно различны, поскольку принадлежат различным

Объявления

217

пространствам имен. Более того, читатель программы всегда знает тип переменной, когда читает ее имя. Данный подход существенно отличается от подхода в языке Fortran, так как там допускаются как явные, так и неявные объявления, поэтому тип переменной не всегда определяется написанием ее имени.

Другая разновидность неявного объявления основывается на контексте. Иногда это называют логическим выводом типа. В простейшем случае контекст задает тип начального значения, присваиваемого переменной в операторе объявления. Например, в языке C# объявление переменной var включает в себя начальное значение, тип которого должен стать типом переменной. Рассмотрим следующие объявления var sum = 0; var total = 0.0; var name = "Liza";

Здесь типами переменных sum, total и name становятся int, float и string соответственно. Имейте в виду, что это статически типизированные переменные, у них типы неизменны в течение всего периода жизни переменной.

В языке Visual Basic (начиная с девятой версии), а также в функциональных языках ML, Haskell, OCaml и F# применяется вывод типа.

В этих функциональных языках контекст, в котором появляется имя, является базисом для определения ее типа.

В общем случае при объявлении объекта данных можно также указать:

? неизменное значение объекта (если это константа) или начальное значение (если объект является переменной);

? размещение внутри другого объекта-контейнера;

? конкретное местоположение в памяти;

? конкретную форму представления.

При объявлении операции прописывают ее сигнатуру (типы операндов и результата). В языке C эта информация помещается в заголовок описания функции, ее прототип. Например, прототип float fun(int a, float a)

объявляет функцию fun со следующей сигнатурой: fun: int х float ^ float

Впрочем, для встроенных в язык элементарных операций такие сведения не нужны. Компилятору они известны по умолчанию.

Объявления поддерживают решение следующих важных задач:

? Размещение данных в памяти. Если объявление содержит сведения о типе и атрибутах объекта данных, то компилятор оптимизирует представление этого объекта данных в памяти.

? Оптимизация управления памятью. Содержащаяся в объявлении информация о времени жизни объектов данных повышает эффективность работы процедур управления памятью. Например, в языке C все объекты, объявленные в функции, имеют одинаковое время жизни и могут быть расположены в единой области памяти, которая удаляется при выходе из функции.

218

Глава 8. Типизация данных

? Выбор операции. В большинстве языков используются специальные символы для обозначения родственных операций. Например, символ «+» обозначает как целочисленное, так и вещественное сложение. Говорят, что такой символ является перегружаемым, поскольку может обозначать целое семейство операций сложения, каждая из которых реализует сложение объектов своего типа. Объявления позволяют компилятору определить во время компиляции, какая именно форма операции подразумевается в конкретном случае.

? Контроль типов. С точки зрения повышения надежности программ, объявления имеют очень ценное качество: они позволяют проводить статический контроль типов. Статический контроль выполняется в период компиляции, предваряющий период работы программ.

<< | >>

Еще по теме Объявления:

  1. 3. Объявление гражданина умершим
  2. 9. Безвестное отсутствие. Объявление гражданина умершим
  3. Статья 1250. Объявление нотариусом секретного завещания
  4. Статья 1150. Право на объявление конкурса
  5. Статья 47. Правовые последствия объявления физического лица умершим
  6. Параграф 1. Публичное обещание вознаграждения без объявления конкурса
  7. 4. Последствия явки гражданина, объявленного умершим
  8. § 5. Признание гражданина безвестное отсутствующим и объявление умершим
  9. Объявление о «Полярной звезде»
  10. Статья 46. Объявление физического лица умершим
  11. § 7. Правоотношения из объявления публичного конкурса (п. 2543-2552)