Как использовать функции Eiffel?

Так что я только начинаю изучать Эйфелеву. Одно из первых упражнений в книге, которое я использую, говорит о создании функции, которая использует ^exp без использования ^. Я скопировал мой код ниже.

class
    APPLICATION

inherit
    ARGUMENTS

create
    make

feature {NONE} -- Initialization

    make
            -- Run application.
        do
            create power(2;3)
            printf("2 to the power of 3 is " + answer)
        end

    power(base : REAL; exp : INTEGER) : REAL
        -- computers base raised to the bower of exp without using ^
        local
            remain : INTEGER
        do
            remain := exp
            if remain = 0 then
                result := 1
            else
                from
                until
                    remain = 0
                loop
                    result := result * result
                    remain := remain -1
                end
            end
        end
end

Как мне это использовать? Нужно ли это на том же уровне, что и feature{NONE}"s make? Я знаю, как я называю это неправильно, и я не могу найти ничего в главе, которую я только что прочитал, или в Интернете о том, как передать параметры в него или как использовать его результаты.

1 ответ

Есть несколько проблем с оригинальным кодом:

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

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

  3. Лицо answer не инициализируется к результату функции power, Обычно это делается с помощью инструкции присваивания.

  4. Аргументы объекта разделяются запятой, а не точкой с запятой.

  5. Из исходного кода неясно, какой тип переменной answer, Предполагая, что это соответствует типу функции powerперед добавлением его в строку его необходимо преобразовать в строку. Это делается путем вызова функции out,

  6. Стандартная функция для печати строки на консоли printне printf,

Сочетая критические точки выше, мы получаем

make
        -- Run application.
    local
        answer: REAL
    do
        answer := power(2, 3)
        print ("2 to the power of 3 is " + answer.out)
    end

После этого код может быть скомпилирован. Теперь меньше критических моментов:

  1. Это хороший стиль для добавления функций в отдельные предложения, поэтому я бы добавил строку feature -- Basic operations перед функцией power,

  2. Реализация функции power есть как минимум две проблемы. Я не буду подробно их здесь описывать, но вместо этого дам два совета:

    • по умолчанию числовой Result инициализируется в 0это необходимо учитывать для операций, которые используют его без предварительного присвоения какого-либо другого значения

    • хотя аргумент base передается в функцию power он не используется в оригинальной версии кода

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