В Eiffel, в чем разница между сущностями, переменными, полями и аргументами?
Я видел термины " сущность", " переменная" и " аргумент", используемые для описания вещей об Эйфеле, которые выглядят очень похоже на меня, и я хотел понять, какова цель использования одного термина вместо другого.
Аргументы - некоторые подпрограммы требуют некоторых данных для запуска. Вообразите фиктивную особенность foo (x, y: INTEGER; z: BOOLEAN)
, Эта процедура принимает 3 аргумента: x
, y
, а также z
, Когда вы вызываете подпрограмму, вы должны дать ей три допустимых аргумента, например foo(6, 92, False)
, Эти значения, которые мы передали подпрограмме, называются фактическими аргументами, а заполнители, определенные в определении, называются формальными аргументами.
Я читал об объектных полях, которые указывают место внутри структуры объекта, где хранятся значения (ссылки или расширенные объекты).
Я думаю, что единственный раз, когда я увидел термин переменные, был для локальных переменных, внутри функций.
И сущность, кажется, является общим термином для обозначения контейнера данных с именем, поэтому локальные переменные, аргументы и запросы (функции, которые возвращают некоторые данные) являются примерами сущностей.
И в какой категории Current
а также Result
падать? Локальные переменные?
Может ли кто-нибудь помочь мне с терминологией?
2 ответа
Спецификация
Согласно ISO/IEC 25436:2006(E) и недавно добавленным языковым конструкциям:
Синтаксические термины
Локальной переменной является любое из следующего:
- идентификатор, объявленный в части Local_declarations (тела элемента, включая встроенные агенты)
- предопределенный объект
Result
Формальный аргумент:
- идентификатор для представления информации, передаваемой звонящими
Фактический аргумент:
- выражение в конкретном вызове рутины
Переменный атрибут - это объявление функции, удовлетворяющее всем следующим условиям:
- нет никаких формальных аргументов
- есть знак запроса (т.е. он имеет тип)
- нет явного значения (т. е. оно не является константой)
- если есть тело, оно имеет вид атрибута
Атрибут константы - это объявление функции, удовлетворяющее всем следующим условиям:
- нет никаких формальных аргументов
- есть знак запроса (т.е. он имеет тип)
- есть явное значение
Коллективные условия
Переменная - это одно из следующих:
- окончательное имя атрибута переменной
- локальная переменная (в том числе
Result
)
Доступным только для чтения объектом является любое из следующего:
- формальный аргумент
- локальный тест объекта
- курсор локальный (в Iteration_part цикла)
- отдельный локальный (в Separate_instruction)
- постоянный атрибут
Current
Сущность - это любое из следующего:
- переменная
- объект только для чтения
Запрос является одним из следующих:
- атрибут
- функция
Т.е. запрос - это функция, которая имеет тип и может использоваться для получения значения во время выполнения.
Семантические термины
Поле:
- значение в прямом экземпляре неосновного типа, соответствующее атрибуту
пример
class C feature
pi: REAL_32 = 3.14
double (x: LIST [INTEGER]): LIST [INTEGER]
local
r: ARRAYED_LIST [INTEGER]
do
create r.make (x.count)
across x as c loop
r.extend (c.item * 2)
end
Result := r
end
average_age: NATURAL
count: NATURAL
print_list (x: LIST [PERSON])
do
average_age := 0
count := 0
x.do_all (agent (p: PERSON)
do
if attached p.name as n then
io.put_string (n + ": " + p.age.out + "%N")
average_age := average_age + p.age
count := count + 1
end
end)
if count > 0 then
average_age := average_age // count
end
end
end
Синтаксические термины
Локальная переменная: r
, Result
,
Объект локального теста: n
,
Курсор локальный: c
,
Формальный аргумент: x
, p
,
Фактический аргумент: x.count
, 2
(это аргумент для умножения), c.item * 2
, ": "
(в конкатенации строк), p.age.out
, "%N"
, n + ": " + p.age.out + "%N"
, p.age
, 1
, 0
, count
(в подразделении).
Переменный атрибут: average_age
, count
,
Постоянный атрибут: pi
,
Коллективные условия
Переменная: r
, Result
, average_age
, count
,
Объект только для чтения: pi
, n
, c
, x
, p
,
Сущность: pi
, r
, Result
, average_age
, count
, n
, c
, x
, p
,
Запрос: pi
, double
, average_age
, count
,
Вы найдете четкие определения для этих терминов в спецификации ECMA Eiffel (Стандарт ECMA-367, раздел 8: Спецификация языка).
Подвести итоги:
Сущность может быть: аргумент, локальный, атрибут (включая постоянный атрибут), текущий или результат.
Переменная является локальной или атрибутом (не включая константный атрибут). Тем не менее, мы часто считаем Result псевдо-локальными, поэтому было бы неплохо называть его также переменной, но стандарт этого не делает.
Обратите внимание, что ни одно из вышеперечисленного не включает в себя подпрограммы (то есть процедуры или функции, также известные как термины Eiffel и команды и запросы).