2.1. Передача аргументов
Можно сделать так, чтобы процедурная функция (программа) веля себя подобно математической функции, в которой аргументы могут передаваться во время выполнения программы. Функция представлена в математике в форме f(x), где f является именем функции, а x - ее аргументом (вводом). Процедурная функция схожа с ней в том, что в ней тоже используется подобный синтаксис name(argument).
Мы модифицируем программу PROG1() таким образом, чтобы появилась возможность ввода информации во время выполнения программы. Предположим, нам нужно разрешить пользователю ввести PROG1("Name"), и теперь вместо "Hello world!" программа PROG1 отобразит "Hello Name!" ("Привет, имя!").
Модифицированный исходный код будет выглядеть так:
EXPORT PROG1(name)
BEGIN
MSGBOX("Hello " + name +"!");
END;
Теперь, если мы запустим эту программу из командной строки, мы можем вызвать ее, скажем, с помощью команды PROG1("Bob"), и программа выдаст окно с сообщением "Привет, Боб!" ("Hello Bob!"). Введенные данные в виде Bob временно сохранены во внутренней переменной name, которая является дополнительной, и чье содержимое будет стерто, как только программа PROG1 завершится. На калькуляторе HP Prime можно объединять две строки, и эта операция совмещается с операцией сложения.
Сейчас программы могут иметь до 16 аргументов. Согласно настройкам по умолчанию имена аргументов переменной разделены запятой. Переменные аргументы принадлежат классу внутренних переменных. Шаблон такой функции выглядит так:
EXPORT NameOfFunction(var1, var2, ..., var16)
BEGIN
// здесь прописан исходный код
END;
При вводе тип переменной не проверяется. Фактически мы могли написать PROG1({1, 2}), чтобы передать список из этих двух чисел, и программа бы выдала окно с сообщением "Hello {1,2}!". Это может быть одновременно и полезно, и не очень. Совмещенные операции вроде сложения можно использовать для объединения строк с нестроковыми объектами (помимо многих других комбинаций). Таким образом, программу PROG1 можно настроить в том смысле, что она может работать со многими типами вводимых данных с помощью одного переменного аргумента. Однако в результате проверить аргумент не получиться, если мы, например, захотим ограничить тип вводимых данных только строками и символами.
Использование списка - это тоже своеобразный способ избежать лимита в 16 аргументов. Так как списки могут содержать любые типы объектов, мы можем буквально поместить все свои аргументы в список и использовать только одно имя переменного аргумента. Содержимое списка можно извлечь с помощью синтаксиса listname(position). То есть, если list - это название переменной списка, то list(2) - это "имя" для второго объекта в списке.
Замечание: Когда программа с аргументами выполняется из пункта меню в Каталоге программ (Program Catalog), то переменные аргументы инициализируются в действительные числа и приобретают значение по умолчанию, равное 0. И если эта функция хороша тем, что она позволяет пользователям вводить свои аргументы в удобной форме, то сама форма ввода может принимать только вещественные вводимые данные, в противном случае произойдет ошибка ввода. И если программа PROG1 была создана для ввода строки символов в качестве вводимых данных, ее выполнение из пункта Run меню не позволит пользователю использовать строку как аргумент!