Ngôn ngữ lập trình được gọi là first class function khi mà hàm (function) trong ngôn ngữ đó được dùng như first-class object. Lưu ý chữ object không phải là object trong OOP mà mang ý nghĩa chung chung. Trong trường hợp này, object chính là function (còn nhiều loại object khác nữa như array, số nguyên, struct, ...)
Nói thêm về first-class object. Các ba nhóm object được phân loại trong lập trình(Raphael Finkel): first-class, second class và third-class (một trong những cách phân nhóm) theo các tiêu chí
Còn một tiêu chí khác là được khởi tạo ngay khi chương trình đang được thực thi. (Trong trường hợp của hàm là dùng để nhắc tới anonymous function và closure)
Như vậy, first class function hiểu ngắn gọn là ngôn ngữ cho phép xài hàm như biến, và cho phép hàm trong hàm. Những ngôn ngữ như Lua, Javascript là những đại diện thuộc nhóm này
Ví dụ với Lua:
function f1()
print "f1"
end
function PassFunctionAsParams(f)
f()
local f2 = function () --closures
print("f2")
end
return f2 --return a function
end
PassFunctionAsParams(f1)()