Function object là gì?

Noun Programming
functor

Trong lập trình, đối tượng hàm (function object) là một cấu trúc (construct) cho phép một đối tượng (object) được gọi hoặc gọi như thể nó là một hàm (function) thông thường, thường có cùng cú pháp (một tham số (parameter) của hàm cũng có thể là một hàm). Các đối tượng hàm (function object) thường được gọi là các functor.

Một cách sử dụng điển hình của một đối tượng hàm (function object) là viết các hàm callback (callback function). Một callback trong các ngôn ngữ thủ tục (procedural language), chẳng hạn như C, có thể được thực hiện bằng cách sử dụng con trỏ hàm (function pointer).

Nhiều ngôn ngữ hiện đại (và một số ngôn ngữ cũ hơn), ví dụ: C++, Eiffel, Groovy, Lisp, Smalltalk, Perl, PHP, Python, Ruby, Scala và nhiều ngôn ngữ khác hỗ trợ các đối tượng first-class function. Các ngôn ngữ lập trình hàm cũng hỗ trợ các closure. Trong quá trình biên dịch, một phép biến đổi được gọi là lambda lifting chuyển đổi các closure thành các đối tượng hàm (function object).

Hãy xem xét ví dụ về quy trình sắp xếp sử dụng hàm callback để xác định mối quan hệ sắp xếp giữa một cặp mục (item). Chương trình C sau sử dụng con trỏ hàm:


#include 

/* qsort() callback function, returns  0 if a > b, 0 if a == b */
int compareInts(const void* a, const void* b)
{
    return ( *(int *)a - *(int *)b );
}
...
// prototype of qsort is
// void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
...
int main(void)
{
    int items[] = { 4, 3, 1, 2 };
    qsort(items, sizeof(items) / sizeof(items[0]), sizeof(items[0]), compareInts);
    return 0;
}

Learning English Everyday