Tôi mới sử dụng Scala và chỉ đọc Scala By Example. Trong chương 2, tác giả có 2 phiên bản Quicksort khác nhau.Hiệu suất Scala: bắt buộc so với kiểu chức năng
Một là bắt buộc phong cách:
def sort(xs: Array[Int]) {
def swap(i: Int, j: Int) {
val t = xs(i); xs(i) = xs(j); xs(j) = t
}
def sort1(l: Int, r: Int) {
val pivot = xs((l + r)/2)
var i = l; var j = r
while (i <= j) {
while (xs(i) < pivot) i += 1
while (xs(j) > pivot) j -= 1
if (i <= j) {
swap(i, j)
i += 1
j -= 1
}
}
if (l < j) sort1(l, j)
if (j < r) sort1(i, r)
}
sort1(0, xs.length - 1)
}
Một là chức năng phong cách:
def sort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length/2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
}
Lợi thế rõ ràng là phong cách chức năng có hơn phong cách bắt buộc là conciseness. Nhưng những gì về hiệu suất? Kể từ khi nó sử dụng đệ quy, chúng ta phải trả tiền cho các hình phạt hiệu suất giống như chúng tôi làm trong các ngôn ngữ mệnh lệnh khác như C? Hoặc, Scala là một ngôn ngữ lai, "cách Scala" (chức năng) được ưa thích, do đó hiệu quả hơn.
Lưu ý: Tác giả đã đề cập đến kiểu chức năng sử dụng nhiều bộ nhớ hơn.
có thể trùng lặp của [Lập trình chức năng scala có chậm hơn mã hóa truyền thống không?] (Http://stackoverflow.com/questions/2794823/is-scala-functional-programming-slower-than-traditional-coding) – missingfaktor
"Ngắn gọn" không giống như "có thể đọc được". Bằng chứng: [ngôn ngữ lập trình J] (http://en.wikipedia.org/wiki/J_ (programming_language)) –
Tôi nghĩ bây giờ tôi đã hiểu rằng tác giả của Scala By Example đang cố gắng thể hiện một cách khác để giải quyết vấn đề ngắn gọn hơn rất nhiều. Tóm lại: bạn lập trình ngắn gọn nhất có thể trong tất cả các phần của mã của bạn, để bạn có được sự đồng nhất tối đa, năng suất. Sau đó chạy ứng dụng của bạn và nếu quá chậm, hãy lập hồ sơ và tối ưu hóa các phần nút cổ chai. – sivabudh