В 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 и команды и запросы).

Другие вопросы по тегам