2. F# — что это?
F# — функциональный язык
программирования из семейства
языков .NET Framework
3. Из истории
• 2002
• Microsoft Research, Cambridge
• Don Syme
• Microsoft Developer Division
• F# 2.0 — 12 апреля 2010
• F# 3.0 ?
4. F#. Основы
• “Hello, world”
• Инструменты (MS VS 2010, fsi.exe, …)
• Базовые понятия
– ключевое слово let
– неизменяемость
– вывод типов
– оператор (|>)
– единицы измерения
5. F#. Продвинутые темы
• Рекурсия
• Взаимодействие с .NET Framework
• Простая асинхронность
6. • F# Fundamentals
– http://msdn.microsoft.com/en-us/magazine/ff714588.aspx
• An Introduction to Functional Programming for .NET Developers
– http://msdn.microsoft.com/en-us/magazine/ee336127.aspx
• Use Functional Programming Techniques in the .NET Framework
– http://msdn.microsoft.com/en-us/magazine/cc164244.aspx
• Build Concurrent Apps From Simple F# Expressions
– http://msdn.microsoft.com/en-us/magazine/cc967279.aspx
• Don Syme's WebLog on F# and Related Topics
– http://blogs.msdn.com/b/dsyme/
Editor's Notes
Строго типизированный
Функциональный
Объектно-ориентированный
Open Source (Apache license)
.NET
Функциональное программирование
Чистые функции
Функции высшего порядка
Сопоставление с образцом (pattern matching)
OCaml
ключевое слово let связывает значение с именем. Оно может использоваться для связывания данных и значений функции, а также для связывания на локальном и глобальном уровнях.
оператор (|>) используется для большей читаемости кода, разрешая вам переупорядочивать аргументы в функции, чтобы последний аргумент первым попался вам на глаза.
let (|>) x f = f x
В F# единицы измерения введены непосредственно в систему типов языка, поэтому числовые количества можно обозначать своими единицами. Эти единицы учитываются при вычислениях, и, если они не совпадают, сообщается об ошибках.
Попытка сложить килограммы с секундами даёт ошибку, хотя поделить килограммы на секунды можно без проблем.
Однако единицы мер, хоть и являются частью системы типов F#, в период компиляции удаляются. То есть в конечной .NET-сборке никакой информации о единицах мер не будет, и CLR будет оперировать всеми значениями, исходя из их нижележащих типов, а значит, никаких издержек не создаётся.
Неизменяемость и функциональное программирование способствуют использованию в F# для вычислений рекурсии.
Чтобы избежать чрезмерного разрастания стека, рекурсивный код можно писать так, чтобы рекурсивный вызов всегда осуществлялся в хвостовой позиции, т. е. всегда был последним перед самым возвратом из функции. (В примере с факториалом после рекурсивного вызова выполняется операция сложения)
F# применяет библиотеки .NET Framework для многих задач; причём эти .NET-библиотеки могут быть задействованы из F# точно так же, как и в других .NET-языках.
Cоздаётся простейшая форма, заполняется часть свойств, заполняется обработчик событий, а затем приложению указывают работать, пока пользователь не нажмёт кнопку в верхнем правом углу и не закроет окно. Стандартные действия для приложений .NET; все различия сосредоточены в синтаксисе F#.