Tôi đang thiết kế một API trong Java cho một tập hợp các thuật toán số hoạt động trên mảng tăng gấp đôi (đối với số liệu thống kê tài chính theo thời gian thực khi nó xảy ra). Vì lý do hiệu suất, API phải làm việc với các mảng nguyên thủy, do đó, List<Double>
và các loại tương tự không phải là một tùy chọn.Thiết kế API cho các chức năng hoạt động trên mảng
Trường hợp sử dụng điển hình có thể là đối tượng thuật toán lấy hai mảng đầu vào và trả về một mảng đầu ra chứa kết quả tính từ hai đầu vào.
Tôi muốn thiết lập quy ước phù hợp cho cách các tham số mảng được sử dụng trong các API, cụ thể:
- Tôi có nên bao gồm một offsets với tất cả các chức năng để người dùng có thể hoạt động trên các bộ phận của một mảng lớn hơn ví dụ:
someFunction(double[] input, int inputOffset, int length)
- Nếu một hàm cần cả tham số đầu vào và đầu ra, đầu vào hoặc đầu ra có phải là đầu tiên trong danh sách tham số không?
- Nếu người gọi phân bổ mảng đầu ra và chuyển nó thành tham số (có khả năng được sử dụng lại), hoặc chức năng tạo và trả về một mảng đầu ra mỗi khi nó được gọi?
Mục tiêu là đạt được sự cân bằng về hiệu quả, đơn giản cho người dùng API và tính nhất quán cả trong API và với các quy ước được thiết lập.
Rõ ràng có rất nhiều tùy chọn, vì vậy thiết kế API tổng thể tốt nhất là gì?
Tôi nghĩ anh ấy đang viết bằng Java, vì vậy nhận xét "trên ngăn xếp" không có ý nghĩa gì trong ngữ cảnh đó. – user949300
Không, HotSpot phân bổ các đối tượng nhỏ không thoát trên ngăn xếp. –
Nhưng vì các mảng này được trả về dưới dạng kết quả, chúng chắc chắn sẽ thoát. – user949300