Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
одного типа в контексте, где ожидается другой тип, ему придется определить явное
преобразование типа (иногда называемое явным приведением, casts).
Совместимость типов и неявное приведение.В конкретном контексте многие языки не требуют эквивалентности типов. Вместо
этого говорят, что значения типов должны быть совместимы с тем контекстом,
в котором они появляются.
Существует много случаев, в которых ожидаются величины определенных типов.
В операторе присваивания тип в правой части должен быть совместим с типом из
левой части. Типы операндов сложения должны быть совместимы или с целым,
или с вещественным типом.
В операторе вызова подпрограммы типы аргументов должны быть совместимы
с типами соответствующих формальных параметров.
Если язык позволяет использовать значение одного типа в контексте, где ожида-
ется другой тип, то реализация языка должна выполнять автоматическое, неявное
преобразование к ожидаемому типу. Такое преобразование называется неявным
приведением типа (coercion).
Статическая и динамическая проверка типов.Контроль типов может осуществляться в период выполнения программы (динамический контроль типов) или в период компиляции (статический контроль типов). Значительное преимущество применения универсальных языков программирования состоит в том, что в их реализациях предусмотрен контроль типов для операций. Отсюда
вывод — программист защищен от этих коварных ошибок. Большинство традиционных императивных и объектно-ориентированных языков программирования ориентировано на повсеместное применение статического контроля типов (в период компиляции).
Организация статического контроля типов:
Во-первых, для каждой операции определены количество и типы данных для
операндов и результата.
Во-вторых, тип каждого объекта данных (переменной или экземпляра типа)
известен и не меняется в ходе выполнения программы.
В-третьих, типы всех констант тоже понятны. Тип литерала легко определяется
из синтаксиса его записи в тексте программы, а тип именованной константы за-
фиксирован в ее определении.
Динамический контроль типов для операндов некоторой операции осуществляется в период вычислений, непосредственно перед исполнением операции. Реализация динамического контроля базируется на использовании сложного дескриптора, который хранится вместе с объектом данных и описывает его тип и другие атрибуты.
Организация и использование процедур.Объявление подпрограммы описывает ее содержание и включает следующие
элементы:
. имя;
. формальные параметры (обозначают места для подстановки фактических па-
раметров);
. тип результата (отсутствует в случае процедуры);
. тело (объявления локальных переменных и операторы).
Синтаксис языка C и С++ для тела подпрограммы достаточно прост:
float Fun (float А, int В) // спецификация подпрограммы
{float M(10); int С; // - объявления локальных объектов данных
... // последовательность операторов,
} // определяющая действия подпрограммы
Рекурсия. Преимущества процедур.Процедура (функция) рекурсивна, если она запускается из собственного тела (это
может быть косвенный или прямой вызов). Рекурсия может быть запущена много-
кратно.
К основным преимуществам процедур следует отнести следующее:
1. Уменьшение сложности программирования (за счет повышения уровня абстрак-
ции). Использование только имени подпрограммы (sort) позволяет абстра-
гироваться от деталей реализации, думать в терминах операций, относящихся
к решаемой проблеме.
2. Закрытость реализации — модификация алгоритма внутри подпрограммы не
воздействует на остальную часть программы.
3. Модульность программ — подпрограммы используют для разбиения программы
на небольшие куски, которые можно рассматривать отдельно. Поэтому подпро-
граммы позволяют нам управлять более крупными программами, чем те, которые
мы можем мысленно обозревать.
4. Расширение возможностей языков программирования — создание библиотек
(стандартных коллекций полезных подпрограмм). Операции типа + и ∗ встраи-
ваются в язык, но математические функции типа sin( ), log( ) обеспечиваются
библиотекой, как и процедуры ввода-вывода.
Методы передачи параметровФормальные параметры в объявлении подпрограммы — это места для подста-
новки фактических параметров. Фактические параметры используют в вызовах
подпрограмм. Например, в операторе вызова F(2) двойка является фактическим
параметром. Рассмотрим формальный параметр х в следующем объявлении
функции:
int square (int x)
{
return x ∗ x
};
Методы передачи параметров — это способы, которыми параметры передаются
в подпрограмму и/или возвращаются из нее.
Позиционное сопоставление. Соответствие между фактическими и формаль-
ными параметрами устанавливается на основе их позиций в списках фактических
и формальных параметров: два параметра, которые занимают одинаковые по-
зиции в списках, образуют пару. Таким образом, первый фактический и первый
формальный параметр составляют пару, затем — вторые параметры из обоих
списков и т. д.
Сопоставление по имени. В языке Ada и в некоторых других языках при вызове
подпрограммы можно явно указать, какой формальный параметр должен соответ-
ствовать данному фактическому параметру
Вызов по значению.При передаче по значению формальный параметр (placeholder) х подпрограммы Р(х)
получает значение фактического параметра. Иначе говоря, если параметр переда-
ется по значению, то r-значение фактического параметра передается формальному
параметру вызванной подпрограммы. Передача по значению используется чаще всего. В языках Pascal и С она рассматривается как основной метод передачи параметров.
Вызов по ссылкеПередача по ссылке является, вероятно, наиболее распространенным механизмом
передачи параметров. При передаче по ссылке формальный параметр превращается
в синоним места размещения фактического параметра. Иными словами, передача
объекта данных с помощью этого механизма означает, что подпрограмме становится
доступным указатель на местоположение этого объекта (то есть его l-значение). При
этом расположение объекта данных в памяти не изменяется. В начале выполнения
подпрограммы l-значения всех фактических параметров используются для ини-
циализации локальных областей памяти, отведенных под формальные параметры.
Вызов по значению-результату.Второе название этого способа передачи параметров — ≪copy-in / copy-out≫.
В этом способе вначале фактические параметры копируются в формальные
параметры, а в конце работы формальные параметры копируются обратно в фак-
тические параметры.
Фактические параметры-выражения (например, 2+3), не имеющие места раз-
мещения, передаются по значению. Фактические параметры, имеющие место раз-
мещения, обрабатываются так:
1. Этап copy-in. Вычисляются значения и места размещения фактических пара-
метров. Значения присваивают формальным параметрам. Места размещения
сохраняют до этапа copy-out.
2. Выполнение тела подпрограммы. Здесь обрабатываются формальные параметры.
3. Этап copy-out. После выполнения тела подпрограммы конечные значения фор-
мальных параметров копируются обратно в места размещения, вычисленные
на этапе copy-in.
Правила видимости для именВ тексте программы имя может обозначать все, что угодно (переменную, константу,
тип, процедуру,…). Чтобы что-нибудь сказать об имени, нужно посмотреть объяв-
ление (описание) имени:
var Z : T; -- Z является переменной, имеющей тип Т
Объявление имени задает его смысл.
Базовая идея состоит в следующем: из точки, где появилось интересующее нас
имя, должно быть видимо объявление, разъясняющее его смысл. Эту видимость
должно обеспечивать правило области видимости. Правило области видимости
очерчивает область, внутри которой объявление ≪обслуживает≫ любое вхождение
некоторого имени.
МакрорасширениеЕсли тело подпрограммы просто копируется или подставляется в точку вызова,
то мы получаем динамическую область видимости. Такая подстановка называется
макрорасширением. Ее выполняет макропроцессор.
Вызов по имени.Правила для передачи по имени устраняют конфликты именования за счет пере-
именования локальных переменных. Рассмотрим шаги устранения конфликтов.
Шаг 1. Вместо формальных параметров текстуально подставляются фактические
параметры. В теле подпрограммы возможны конфликты имен (между именами
в теле и именами фактических параметров). Конфликты устраняют переименова-
нием локальных переменных тела процедуры.
Шаг 2. Модифицированное тело процедуры подставляется в точку вызова.
Возможны конфликты между нелокальными переменными в теле подпрограммы
и локальными переменными в точке вызова. Их устраняют переименованием ло-
кальных переменных в точке вызова.
Область видимости объявления. Вложенные области видимости: Си и Паскаль.Будем различать связывающее и ограниченное вхождения имени.
Связывающее вхождение имени вводит новый смысл его использования. Осталь-
ные вхождения этого имени называют ограниченными.
Связывающее вхождение является объявлением имени.
Правила области видимости определяют: какое объявление применимо к огра-
ниченным вхождениям имени. Говорят, что каждое ограниченное вхождение имени
находится в области видимости его связывающего вхождения (объявления)

|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


