Когда используется значение параметра процедуры по умолчанию

Указание параметров

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

Хранимая процедура может иметь не более 2100 параметров, каждый из которых имеет имя, тип данных и направление. При необходимости параметрам можно задавать значения по умолчанию.

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

Передача значений в параметры

Значения параметра, переданные при вызове процедуры, должны быть константами или переменными. Имя функции не может быть значением параметра. Переменные могут быть пользовательскими или системными, например @@spid.

Указание имен параметров

При создании процедуры и объявлении имени параметра, последнее должно начинаться с единичного символа @ и быть уникальным для всей процедуры.

При указании одного значения параметра в формате @parameter = value необходимо точно так же предоставить все последующие параметры. Если значения параметра передаются не в формате @parameter = value, значения должны передаваться в том порядке (слева направо), в котором они перечислены в инструкции CREATE PROCEDURE.

Передача параметров в формате @parameter = value с ошибками приведет к возникновению ошибки SQL Server и невозможности выполнения процедуры.

Указание типов данных параметров

Параметры должны быть определены с типом данных в момент объявления в инструкции CREATE PROCEDURE. Тип данных параметра определяет тип и диапазон допустимых значений параметра при вызове процедуры. Например, параметр типа tinyint может принимать только численные значения в диапазоне от 0 до 255 в момент передачи этому параметру. При попытке выполнить процедуру со значением, не совместимым с типом данных, происходит ошибка.

Указание значений параметра по умолчанию

Параметр считается необязательным, если он имеет значение по умолчанию при объявлении. Нет необходимости указывать значение необязательного параметра при вызове процедуры.

Значение параметра по умолчанию используется, когда:

не указано значение для параметра при вызове процедуры.

в качестве значения при вызове процедуры указывается ключевое слово DEFAULT.

Если значением по умолчанию является символьная строка, включающая в себя знаки пробела или пунктуации, либо содержащая первым элементом число, например 6ххх, то ее следует заключить в одинарные прямые кавычки.

Параметры по умолчанию не поддерживаются для Azure Synapse Analytics и Parallel Data Warehouse.

Если значение по умолчанию указать нельзя, укажите NULL. Желательно, чтобы процедура возвращала сообщение, если она выполняется без значения для параметра.

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

Хотя разрешается опустить параметры, для которых предоставлены значения по умолчанию, можно лишь подвергнуть усечению список параметров. Например, если у процедуры пять параметров, можно опустить как четвертый, так и пятый параметр. При этом нельзя пропустить четвертый параметр, если включен пятый, если только параметры не передаются в формате @parameter = value.

Указание направления параметров

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

Для указания выходного параметра в определении процедуры необходимо указать ключевое слово OUTPUT в инструкции CREATE PROCEDURE. Процедура, завершая свою работу, возвращает текущее значение выходного параметра в вызывающую программу. При выполнении процедуры вызывающая программа также должна использовать ключевое слово OUTPUT для сохранения значения параметра в переменной, которое затем может быть использовано в вызывающей программе.

Переменная OUTPUT должна быть определена во время создания процедуры, а также в ходе использования переменной. Имена параметра и переменной не должны совпадать. При этом тип данных и положение параметра должны быть одинаковыми (если только не используется @listprice= переменная).

Источник

Создание хранимых процедур

На практике часто бывает нужно получить результаты запроса для определенного значения (параметра). Такие запросы называются параметризированными, а соответствующие процедуры создаются с параметрами. Например, для получения записи в таблице «Туристы» по заданной фамилии создаем следующую процедуру:

После знака @ указывается название параметра и его тип. Мы выбрали nvarchar c количеством символов 50, поскольку в самой таблице для поля «Фамилия» установлен этот тип. Попытаемся запустить процедуру:

Появляется диагностическое сообщение (рис. 5.5):

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Перевод этого сообщения: «Процедура ‘proc_p1’ ожидает параметр ‘@Фамилия’, который не указан».

Запустим процедуру так:

В результате выводится запись, соответствующая фамилии «Андреева» (рис. 5.6):

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Если мы укажем фамилию, которая не содержится в таблице, появится пустая запись (рис. 5.7):

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

В таблице 5.2 приводятся примеры хранимых процедур с параметрами.

Таблица 5.2. Хранимые процедуры с параметрами

SQL-конструкция для созданияКоманда для извлечения
1
Описание
Извлечение записи из таблицы «Туристы» с заданной фамилией
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
2
Описание
Вывод родительской и дочерней записей с заданной фамилией из таблиц «Туристы» и «Информацияотуристах»
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
4
Описание
Вывод родительской и дочерней записей с заданной названием тура из таблиц «Туры» и «Сезоны»
Результат запуска (изображение разрезано)
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
5

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Процедуры с выходными параметрами позволяют возвращать значения, получаемые в результате обработки SQL-конструкции при подаче определенного параметра. Представим, что нам нужно получать фамилию туриста по его коду (полю «Кодтуриста»). Создадим следующую процедуру:

Оператор declare нужен для объявления поля, в которое будет выводиться значение. Получаем фамилию туриста (рис. 5.8)

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Для задания названия столбца можно применить псевдоним:

Теперь столбец имеет заголовок (рис. 5.9):

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Таблица 5.3. Хранимые процедуры с входными и выходными параметрами

SQL-конструкция для созданияКоманда для извлечения
1
Описание
Извлечение фамилии туриста по заданному коду
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
2
Описание
Подсчет количества туристов из городов, имеющих в своем названии сочетание букв «рг». Следует ожидать число три (Екатеринбург, Оренбург, Санкт-Петербург)
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
3
Описание
Подсчет количества туров, которых посетил турист с заданным значением поля «Кодтуриста»
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
4
Описание
Подсчет общей суммы, которую заплатил данный турист за определенный период. Турист со значением «1» поля «Кодтуриста» внес оплату 4/13/2007
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию
SQL-конструкция для созданияКоманда для извлечения
5
Описание
Подсчет количества путевок, проданных по заданному туру
Результат запуска
Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Для удаления хранимой процедуры используется оператор drop :

Источник

Урок №103. Параметры по умолчанию

Обновл. 13 Сен 2021 |

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

Параметры по умолчанию

Параметр по умолчанию (или «необязательный параметр») — это параметр функции, который имеет определенное (по умолчанию) значение. Если пользователь не передает в функцию значение для параметра, то используется значение по умолчанию. Если же пользователь передает значение, то это значение используется вместо значения по умолчанию. Например:

Результат выполнение программы:

Параметр по умолчанию — это отличный вариант, когда функция нуждается в значении, которое пользователь может переопределить, а может и не переопределить. Например, вот несколько прототипов функций, для которых могут использоваться параметры по умолчанию:

Несколько параметров по умолчанию

Функция может иметь несколько параметров по умолчанию:

При следующих вызовах функции:

Values: 3 4 5
Values: 3 4 12
Values: 3 11 12
Values: 10 11 12

Правило №1: Все параметры по умолчанию в прототипе или в определении функции должны находиться справа. Следующее вызовет ошибку:

Правило №2: Если имеется более одного параметра по умолчанию, то самым левым параметром по умолчанию должен быть тот, который с наибольшей вероятностью (среди всех остальных параметров) будет явно переопределен пользователем.

Объявление параметров по умолчанию

Как только параметр по умолчанию объявлен, повторно объявить его уже нельзя. Это значит, что для функции с предварительным объявлением и определением, параметр по умолчанию объявить можно либо в предварительном объявлении, либо в определении функции, но не в обоих местах сразу. Например:

Источник

Введение в хранимые процедуры MySQL 5

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

Введение

Причина их создания ясна и подтверждается частым использованием. С другой стороны, если вы поговорите с теми, кто работает с ними нерегулярно, то мнения разделятся на два совершенно противоположных фланга. Не забывайте об этом.

Против

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

Шаг 1: Ставим ограничитель

Шаг 2: Как работать с хранимыми процедурами

Создание хранимой процедуры

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

4 характеристики хранимой процедуры:

Вызов хранимой процедуры

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

Изменение хранимой процедуры

В MySQL есть выражение ALTER PROCEDURE для изменения процедур, но оно подходит для изменения лишь некоторых характеристик. Если вам нужно изменить параметры или тело процедуры, вам следует удалить и создать ее заново.

Удаление хранимой процедуры

Это простая команда. Выражение IF EXISTS отлавливает ошибку в случае, если такой процедуры не существует.

Шаг 3: Параметры

Давайте посмотрим, как можно передавать в хранимую процедуру параметры.

Естественно, вы можете задавать несколько параметров разных типов.

Пример параметра IN

Пример параметра OUT

Пример параметра INOUT

Шаг 4: Переменные

Сейчас я научу вас создавать переменные и сохранять их внутри процедур. Вы должны объявлять их явно в начале блока BEGIN/END, вместе с их типами данных. Как только вы объявили переменную, вы можете использовать ее там же, где переменные сессии, литералы или имена колонок.

Синтаксис объявления переменной выглядит так:

Давайте объявим несколько переменных:

Работа с переменными

Как только вы объявили переменную, вы можете задать ей значение с помощью команд SET или SELECT:

Шаг 5: Структуры управления потоками

MySQL поддерживает конструкции IF, CASE, ITERATE, LEAVE LOOP, WHILE и REPEAT для управления потоками в пределах хранимой процедуры. Мы рассмотрим, как использовать IF, CASE и WHILE, так как они наиболее часто используются.

Конструкция IF

С помощью конструкции IF, мы можем выполнять задачи, содержащие условия:

Конструкция CASE

Конструкция WHILE

Технически, существует три вида циклов: цикл WHILE, цикл LOOP и цикл REPEAT. Вы также можете организовать цикл с помощью техники программирования “Дарта Вейдера”: выражения GOTO. Вот пример цикла:

Шаг 6: Курсоры

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

MySQL поддерживает курсоры в хранимых процедурах. Вот краткий синтаксис создания и использования курсора.

В этом примере мы проведем кое-какие простые операции с использованием курсора:

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

Заключение

В этом уроке я ознакомил вас с основами работы с хранимыми процедурами и с некоторыми специфическими свойствами, связанными с ней. Конечно, вам нужно будет углубить знания в таких областях, как безопасность, выражения SQL и оптимизация, прежде чем стать настоящим гуру MySQL процедур.

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/
Перевел: Станислав Протасевич
Урок создан: 7 Июля 2011
Просмотров: 238311
Правила перепечатки

5 последних уроков рубрики «Разное»

Как выбрать хороший хостинг для своего сайта?

Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.

Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Разработка веб-сайтов с помощью онлайн платформы Wrike

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

20 ресурсов для прототипирования

Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

Когда используется значение параметра процедуры по умолчанию. Смотреть фото Когда используется значение параметра процедуры по умолчанию. Смотреть картинку Когда используется значение параметра процедуры по умолчанию. Картинка про Когда используется значение параметра процедуры по умолчанию. Фото Когда используется значение параметра процедуры по умолчанию

Топ 10 бесплатных хостингов

Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.

Источник

Использование процедур и функций в Delphi

Скобки

Добавление скобок при вызове процедур и функций без параметров уже давно не является новинкой в Delphi, тем не менее, эта возможность мало известна. Эту возможность оценят по достоинству те программисты, которым приходится работать на двух языках (C++ и Delphi), так как им не нужно будет постоянно помнить о разнице в синтаксисе при вызове процедур и функций в разных языках. В Delphi оба варианта, приведенные ниже, считаются корректными.

Возможность перегрузки

Впервые концепция перегрузки процедур и функций была реализована в Delphi 4. Она позволяет иметь несколько различных процедур и функций с одинаковыми именами, но с разными списками параметров. Такие процедуры и функции должны быть описаны с применением директивы overload.

procedure Test (I: integer); overload;
procedure Test (S: string); overload;
procedure Test (D: double); overload;

При вызове процедуры Test, Delphi сама решит, какую из трех процедур необходимо выполнить, в зависимости от передаваемого ей параметра. Но нужно отметить, что это не самая безопасная возможность языка. Применение перегружаемых процедур и функций может стать неиссякаемым источником трудноуловимых ошибок в программе. Поэтому пользуйтесь этой возможностью осторожно.

Передача параметров

Pascal позволяет передавать параметры в функции и процедуры либо по значению, либо по ссылке. Передаваемый параметр может иметь любой встроенный или пользовательский тип либо являться открытым массивом. Параметр также может быть константой, если его значение в процедуре или функции не меняется.

Передача параметров по значению

Этот режим передачи параметров применяется по умолчанию. Если параметр передается по значению, создается локальная копия данной переменной, которая и предоставляется для обработки в процедуру или функцию. Посмотрите на следующий пример:

procedure Test(s: string);

При вызове указанной процедуры будет создана копия передаваемой ей в качестве параметра строки s, с которой и будет работать процедура Test. При этом все внесенные в строку изменения никак не отразятся на исходной переменной s.

Однако это не относится к объектам. Например, если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.

Передача параметров по ссылке

Pascal позволяет также передавать параметры в функции или процедуры по ссылке — такие параметры называются параметрами-переменными. Передача параметра по ссылке означает, что функция или процедура сможет изменить полученные значения параметров. Для передачи параметров по ссылке используется ключевое слово var, помещаемое в список параметров вызываемой процедуры или функции.

procedure ChangeMe(var x: longint);
begin
x := 2; // Параметр х изменен вызванной процедурой
end;

Вместо создания копии переменной x, ключевое слово var требует передачи адреса самой переменной x, что позволяет процедуре непосредственно изменять ее значение.

Передача параметров констант

Если нет необходимости изменять передаваемые функции или процедуре данные, можно описать параметр как константу. Ключевое слово const не только защищает параметр от изменения, но и позволяет компилятору сгенерировать более оптимальный код передачи строк и записей. Вот пример объявления параметра-константы:

procedure Test(const s: string );

Передача открытых массивов

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

function AddEmUp(A: array of integer): integer;

В открытом массиве можно передавать переменные, константы или выражения из констант.

Для получения информации о фактически передаваемом массиве параметров в функции или процедуре могут использоваться функции High, Low и SizeOf.

Object Pascal также поддерживает тип array of const, который позволяет передавать в одном массиве данные различных типов. Синтаксис объявления функций или процедур, использующих такой массив для получения параметров, следующий:

procedure WhatHaveIGot( A: array of const );

Вызвать объявленную выше функцию можно, например, с помощью такого оператора:

procedure WhatHaveIGot( [‘Text’, 10, 5.5, @WhatHaveIGot, 3.14, true, ‘c’] );

При передаче функции или процедуре массива констант все передаваемые параметры компилятор неявно конвертирует в тип TVarRec. Тип данных TVarRec объявлен в модуле System следующим образом:

PVarRec = ^TVarRec;
TVarRec = record
case Byte of
vtInteger: (VInteger: Integer; VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;

Поле VType определяет тип содержащихся в данном экземпляре записи TVarRec данных и может принимать одно приведенных значений.

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

procedure WhatHaveIGot( A: array of const );
var
i: integer;
TypeStr: string;
begin
for i := Low(A) to High(A) do
begin
case A[i].VType of
vtInteger : TypeStr := ‘Integer’;
vtBoolean : TypeStr := ‘Boolean’;
vtChar : TypeStr := ‘Char’;
vtExtended : TypeStr := ‘Extended’;
vtString : TypeStr := ‘String’;
vtPointer : TypeStr := ‘Pointer’;
vtPChar : TypeStr := ‘PChar’;
vtObject : TypeStr := ‘Object’;
vtClass : TypeStr := ‘Class’;
vtWideChar : TypeStr := ‘WideChar’;
vtPWideChar : TypeStr := ‘PWideChar’;
vtAnsiString : TypeStr := ‘AnsiString’;
vtCurrency : TypeStr := ‘Currency’;
vtVariant : TypeStr := ‘Variant’;
vtInterface : TypeStr := ‘Interface’;
vtWideString : TypeStr := ‘WideString’;
vtInt64 : TypeStr := ‘Int64’;
end;
ShowMessage( Format( ‘Array item %d is a %s’, [i, TypeStr] ) );
end;
end;

Значения параметров по умолчанию

В Delphi есть одна очень полезная возможность — использование значений параметров по умолчанию. Она позволяет установить принимаемое по умолчанию значение параметра процедуры или функции. Это значение будет использоваться в тех случаях, когда вызов процедуры или функции производится без указания значения данного параметра. В объявлении процедуры или функции принимаемое по умолчанию значение параметра указывается после знака равенства, следующего после его имени. Поясним это на следующем примере:

procedure HasDefVal( s: string; i: integer = 0 );

Подобное объявление означает, что процедура HasDefVal может быть вызвана двумя путями. В первом случае — как обычно, с указанием обоих параметров:

procedure HasDefVal( ‘Hello’, 26 );

Во втором случае можно задать только значение параметра s, а для параметра i использовать значение, установленное по умолчанию:

procedure HasDefVal( ‘Hello’ );

function Add( I1, I2: integer ): integer;
begin
Result := I1 + I2;
end;

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

function Add( I1, I2: integer; I3: integer = 0 ): integer;
begin
Result := I1 + I2 + I3;
end;

Директива

Директива <$X->запрещает вызов функций как процедур (с игнорированием возвращаемого результата). По умолчанию этот режим включен (<$X+>). Так вот, запомните, использование переменной Result недопустимо при сброшенном флажке опции Extended Syntax, расположенном во вкладке Compiler диалогового окна Project Options, или при указании директивы компилятора <$X->.

В каждой функции языка Objecl Pascal существует локальная переменная с именем Result, предназначенная для размещения возвращаемого значения. Кроме того, вернуть значение из функции можно также путем присвоения значения переменной, имеющей то же имя, что и данная функция. Это стандартный синтаксис языка Pascal, сохранившийся от его предыдущих версий. При использовании в теле функции переменной с ее именем не забывайте, что существуют большие отличия в обработке этого имени — все зависит от того, где она расположена — в левой части оператора присвоения или же в любом другом месте текста функции. Если имя функции указано в левой части оператора присвоения, то предполагается, что назначается возвращаемое функцией значение. Во всех других случаях предполагается, что осуществляется рекурсивный вызов этой функции.

Процедура и функция — это ключевые понятия в любом языке программирования, без которых не обходится ни одна серьезная программа. И поэтому очень важно иметь полное понимание о механизме их работы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *