F♯

F♯
Этим сочетанием символов также часто обозначают аккорд или тональность Фа-диез мажор

F — это функциональный язык программирования общего назначения. Разработан Доном Саймом (англ. Don Syme) в Microsoft Research в Кембридже. Структура F♯ во многом схожа со структурой библиотек и среды исполнения .NET.

Некоторые задачи решаются значительно проще и яснее с использованием F♯ (по сравнению с решениями на господствующих ОО-языках), особенно те, что используют математический стиль программирования. Например, написание компилятора требует работы со структурами данных и преобразованиями над ними.

F♯ в Visual Studio. [1]Microsoft планирует активно внедрять данный язык в разработку программных систем, которые сами с течением временем смогут масштабироваться, например в зависимости от количества пользователей, данное достоинство нельзя просто реализовать в императивных языках программирования.

Содержание

Особенности

Код на языке F♯ является безопасным в отношении типов, часто бывает более компактным, чем аналогичный код C♯, за счёт выведения типов. Такие возможности, как обобщенное программирование и функции позволяют писать абстрактные обобщенные алгоритмы, которые управляют параметризованными структурами данных (например, массивами, списками, графами, деревьями).

Одна из основных идей F♯ заключается в том, чтобы удостовериться, что имеющийся код и типы в функциональном языке программирования могут быть легко доступны из других .NET-языков.

Примеры

Синтаксис F♯ построен на математической нотации, а программирование чем-то похоже на алгебру. Например, когда вы определяете новый тип, то можете указать, что переменными этого типа будут «целые или строки». Вот как это выглядит:

type myType = IntVal of int | StringVal of string

Код также представляет собой математическую нотацию.

let f x = x + 1

F♯ работает следующим образом: тип «f» представляет собой «int -> int», то есть функция получает на вход целое и выдаёт на выход целое. F♯ позволяет получить доступ абсолютно ко всему, что есть в FCL. Синтаксис для работы с библиотеками .NET в этом смысле максимально близок к синтаксису C♯. Особенности языка заметны при использовании всего спектра возможностей F♯. К примеру, следующий код проецирует функцию на список:

let rec map func lst =
    match lst with
       | [] -> []
       | head :: tail -> func head :: map func tail
 
let myList = [1;3;5]
let newList = map (fun x -> x + 1) myList

В «newList» теперь находится «[2;4;6]».

Разбор списка в этой функции ведётся с помощью ещё одной мощной возможности сопоставления с образцом. Она позволяет задавать образцы при совпадении с которыми вычисляются соответствующие вхождения оператора match. Первый образец "[]" означает пустой список. Второй - список состоящий из первого элемента и хвоста (который может быть произвольным списком, в том числе и пустым). Во втором образце значение головы связывается с переменной head, а хвоста с tail (имена могут быть произвольные). Таким образом кроме основной задачи образец ещё позволяет производить декомпозицию сложных структур данных.

Примечания

См. также

  • Nemerle
  • Scala
  • Сравнение языков программирования

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное



Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»