用于作用于数组的函数的API设计

mik*_*era 7 java api-design

我正在设计一个Java中的API,用于一组数字算法,这些算法作用于双精度数组(用于实时金融统计).出于性能原因,API必须使用原始数组,因此List<Double>不是一种选择.

典型的用例可能是一个算法对象,它接受两个输入数组,并返回一个输出数组,其中包含从两个输入计算的结果.

我想就如何在API中使用数组参数建立一致的约定,特别是:

  • 我是否应该包含具有所有功能的偏移,以便用户可以对更大阵列的部分进行操作,例如 someFunction(double[] input, int inputOffset, int length)
  • 如果函数需要输入和输出参数,输入或输出应该在参数列表中排在第一位吗?
  • 调用者应该分配一个输出数组并将其作为参数传递(可能会被重用),还是该函数每次调用时都应该创建并返回一个输出数组?

目标是实现API用户的效率,简单性以及API内部和已建立的约定之间的一致性.

显然有很多选择,那么最佳的整体API设计是什么?

deb*_*cey 3

这听起来确实像是三个问题,所以这是我的观点。

当然,这是非常主观的 - 所以 - 你的里程可能会有所不同:

  1. 是的。始终包括偏移量和长度。如果特定函数的大多数用例不需要这些参数,请重载该函数,以便不需要输入和长度。

  2. 为此,我将遵循以下标准arraycopy

    arraycopy(对象 src,int srcPos,对象 dest,int destPos,int 长度)

  3. 除非调用者重复调用您的实用程序函数,否则此处的性能差异可以忽略不计。如果它们只是一件事情,那么应该没有什么区别。如果它们被重复调用,那么您应该让调用者向您发送一个分配的数组。