Функції як значення першого класу (f #)
Визначальною характеристикою функціональних мов програмування є підвищення функцій до стану першого класу. З функцією можна здійснювати ті ж дії, що і зі значеннями інших вбудованих типів, з таким самим об'ємом зусиль.
Нижче представлені типові питання для оцінки стану першого класу.
Чи можна прив'язати ідентифікатор до значення? Якщо так, чи можна присвоїти йому ім'я?
Чи можна зберігати значення в структурі даних, такий як список?
Чи можна передати значення як аргумент в виклик функції?
Чи можна повернути значення як значення виклику функції?
Останні два питання оцінки визначають те, що відомо як операції вищого порядку або функції вищого порядку. Функції вищого порядку приймають функції як аргументи і повертають функції в якості значення виклику функції. Ці операції підтримують такі основи функціонального програмування як функції зіставлення і об'єднання функцій.
Якщо функція є значенням першого класу, повинна бути можливість присвоїти їй ім'я так само, як і цілочисельним, строковим і іншим вбудованим типам. У літературі про функціональне програмуванні це називається прив'язкою ідентифікатора до значення. F # використовує вирази let для прив'язки імен до значень: let
Значення першого класу може зберігатися в структурі даних. У наступному коді наведені приклади, що демонструють зберігання значень в списках і кортежі.
Щоб переконатися, що ім'я функції, що зберігається в кортежі, фактично виконує обчислення функції, в наступному прикладі оператори fst і snd використовуються для вилучення першого і другого елементу з кортежу funAndArgTuple. Перший елемент в кортежі називається squareIt. другий - num. Ідентифікатор num в попередньому прикладі прив'язаний до цілого числа 10, яке є допустимим аргументом для функції squareIt. У другому вираженні перший елемент кортежу застосовується до другого: squareIt num.