В чем разница между этими двумя методами - PullRequest
0 голосов
/ 26 октября 2018

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

public Monom Der()
{
    double a = this.get_coef() * this.get_pow();
    int b = this.get_pow() - 1;
    return new Monom(a, b);
}

public void Der()
{
        this.set_coefficient(this._power * this._coefficient);
        this.set_power(this._power - 1);
}

Ответы [ 4 ]

0 голосов
/ 26 октября 2018

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

Давайте рассмотрим следующий класс:

public class Dinner {

    private Meal meal;

    public Dinner(Meal meal) {
        this.meal = meal;
    }

    public Meal getMeal(Meal meal) {
        return meal;
    }

    public setMeal(Meal meal) {
        this.meal = meal;
    }
}

Здесь setMeal изменило внутреннее состояние объекта, но оно не имеет возвращаемого значения. С другой стороны, getMeal возвращает текущее состояние объекта, но не изменяет его.

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

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

0 голосов
/ 26 октября 2018

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

0 голосов
/ 26 октября 2018

Этот

public Monom Der() {
    double a = this.get_coef() * this.get_pow();
    int b = this.get_pow() - 1;
    return new Monom(a, b);
}

не изменяет состояние экземпляра, это полезно, когда вы хотите иметь неизменяемые объекты. Может использоваться для работы как с исходным состоянием, так и с состоянием после процесса

Monom initialMonom = new Monom(2, 2);
Monom theNewMonom = initialMonom.Der();
// do something with both initialMonom and theNewMonom

Это

public void Der() {
    this.set_coefficient(this._power * this._coefficient);
    this.set_power(this._power - 1);
}

изменяет состояние текущего экземпляра, поэтому экземпляр НЕ является неизменным. Это может быть полезно, когда экземпляр нужно использовать повторно

Monom initialMonom = new Monom(2, 2);
// do something with initial monom
initialMonom.Der(); // mutate the initial monom
// do something with the new state 
0 голосов
/ 26 октября 2018

Вы можете Google немного для деталей.Здесь довольно много вещей в начале.

  1. Различия: один возвращается Моному объекта, один - "void"

  2. Почему: Этозависит от вашего бизнеса или цели кодов, которые вы хотели бы создать.Возвращенный объект используется на следующем шаге или просто показывает данные.«void» означает, что вы не хотите получать какие-либо данные, но выполнять некоторые действия в этом методе

  3. Что лучше: трудно сказать.Как и в предыдущем объяснении, оно должно зависеть от ваших потребностей

  4. Как вы должны вернуться: см. Это: https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

Продолжайте искать больше / практиковатьсяБольше.Тогда будет проще.

Надеюсь, это поможет.

...