Кіріспе

Бір немесе бірнеше функцияны кіріс ретінде қабылдайтын немесе функцияны нәтиже ретінде қайтаратын функция. Математика мен компьютер ғылымында жоғары реттік функция (HOF) – төмендегілердің кемінде біреуін істейтін функция: бір немесе бірнеше функцияны аргумент ретінде қабылдайды (яғни процедуралық параметр, ол өзі процедураның параметрі болып табылады), немесе функцияны нәтижесі ретінде қайтарады. Қалған барлық функциялар бірінші реттік функциялар болып табылады. Математикада жоғары реттік функциялар операторлар немесе функционалдар деп те аталады. Есептеудегі дифференциалдық оператор осыған бір мысал, себебі ол функцияны оның туындысына, сонымен қатар функцияға бейімдейді. Жоғары реттік функцияларды математикадағы "функтор" сөзінің басқа қолданылуымен шатастырмау керек, толық мәлімет үшін Functor (аңдатпа) бетін қараңыз. Типтелмеген лямбда-есептеуде барлық функциялар жоғары реттік болып табылады; ал типтелген лямбда-есептеуде, одан көптеген функционалдық бағдарламалау тілдері туындайды, бір функцияны аргумент ретінде қабылдайтын жоғары реттік функциялар белгілі бір типтегі мәндер болып табылады.

Макролар

Макростар жоғары ретті функциялардың кейбір нәтижелерін қол жеткізу үшін де пайдаланылуы мүмкін. Дегенмен, макростар айнымалыны ұстау мәселесін оңай шеше алмайды; олар сондай-ақ үлкен көлемде кодтың дубликациялануына әкелуі мүмкін, бұл компиляторға оңтайландыруды қиындатуы мүмкін. Макростар әдетте күшті түрлендірілмеген, бірақ күшті түрлендірілген кодты жасауы мүмкін.

Динамикалық кодты бағалау

Басқа императивті бағдарламалау тілдерінде жоғары тәртіпті функциялар арқылы алынған кейбір алгоритмдік нәтижелерді бағалау аясында кодты (кейде Eval немесе Execute операциялары деп аталады) динамикалық түрде орындау арқылы қол жеткізуге болады. Бұл тәсілдің айтарлықтай кемшіліктері болуы мүмкін: орындалатын аргумент коды көбінесе статикалық түрде тексерілмейді; мұндай тілдер әдетте орындалатын кодтың дұрыстығы мен қауіпсіздігін анықтау үшін динамикалық типтеуге сенеді. Аргумент көбінесе мәні орындалу уақытына дейін белгілі болмайтын жол түрінде беріледі. Бұл жол бағдарлама орындалу кезінде компиляциялануы (уақытында компиляциялау арқылы) немесе интерпретациялануы керек, бұл орындалу кезінде қосымша жүктеме тудырады және көбінесе аз тиімді кодты жасайды.