Соглашения API Fluent MathJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Соглашения API Fluent Math

Сообщение Anonymous »

Сейчас я создаю небольшой математический API для кватернионов и матриц. При разработке методов у меня возник вопрос: как правильно спроектировать их для свободного использования?
На этом примере...

Код: Выделить всё

public class Quaternion {
private double q0,q1,q2,q3;

public Quaternion slerp(Quaternion other, float amt){
// Some calculations

// First option return this and update the object
return this;

// Second option - Create a new Instance
return new Quaternion(res.getQ0(), res.getQ1(), res.getQ2(), res.getQ3());
}
}
... есть две возможности вернуть результат. Сначала с обновленным экземпляром или совершенно новым.
Существует ли какое-либо соглашение о том, как разработать такой метод, который предназначен для свободного использования с другими функциями (умножение, поворот, сопряжение)? Например, классы BigDecimal и BigInteger предназначены для возврата нового объекта вместо возврата текущего экземпляра. С другой стороны, некоторые библиотеки используют подход return this.
Со своей стороны я считаю...

Код: Выделить всё

Quaternion result = start.slerp(other, 0.25f); // return new object
... более разумно, чем это

Код: Выделить всё

start.slerp(other, 0.25f); // return this
Представьте, что при втором подходе вы хотите выполнить еще одно вычисление ниже с исходным начальным объектом. тогда вам нужно будет создать временную переменную перед методом slerp.
Есть ли у вас какой-либо опыт в этом отношении? Является ли один из этих подходов (например, new для неизменяемого, return this для изменяемого) более широко используемым, или это просто вопрос выбора одного подхода, а не его использования во всем API?

Подробнее здесь: https://stackoverflow.com/questions/395 ... onventions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»