Что надо знать, что правильно использовать F#.
Хотелось немного рассказать об особенностях программирования на F#. Как вы, наверное, читали – это язык функционального семейства и произошел он семейства ML и OCaml. Когда я увидел F# в первый раз и решил им воспользоваться, то был достаточно смущен странным синтаксисом, по сравнению с обычными императивными языками, Visual Studio постоянно ругалась чуть ли не на каждую строку кода. Поэтому хотелось рассказать о том, как «правильно» пользоваться этим языком.
Далее я привожу некоторые свои изыскания, при использовании F#:
1. Пишите код с использование директивы #light — это позволит избежать ненужных синтаксических конструкций, котороые достались в наследство от OCaml.
2. Язык F# чувствителен к способу отступов в коде (чем-то это похоже на питон), если вы используете символы табуляции вместо пробелов, то необходимо поменять их на пробелы.
Пример:
//Все правильно
[]
let main(args) =
Console.ReadKey() |> ignore
(0)
//Ошибка компиляции - нет отступов
[]
let main(args)=
Console.ReadKey() |> ignore
(0)
3. В F# не классического понятия переменной, поэтому операция присваивания "=" отсутствует, а есть оператор связывания let, после которого измениние объекто по-умалчанию запрещено (read-only). Пример:
#light
open System
let a = 5
a = 5 //Это обыкновенное сравнение двух чисел на равенство,
//а не присвоение (как может показаться)
//let a = 5 //Была бы ошибка компиляции - a уже определена выше
Console.WriteLine a
Console.ReadKey true
В консли будет 5.
4. При необходимости не только read-only "переменных", можно воспользоваться модификатором mutable. Пример:
#light
open System
let mutable x: int = 0
let mutable y: int = 0
x <- int(Console.ReadLine())
y <- int(Console.ReadLine())
Console.WriteLine(x + y)
Console.ReadKey true
Запись let mutable x: int = 0 – объявление mutable переменной x (необходимо начальное значение x, в данном случае 0) .
Запись x <- int(Console.ReadLine()) – присвоение переменной целочисленного типа, вводимого с консоли.
5. Второй способ использовать не read-only "переменные" - использовать ссылочный тип ref. Пример использования ref типов:
#light
open System
let a = ref 0
a := 10
Console.WriteLine !a
Console.ReadKey true
На консоль выводится число 10.
Запись let a = ref 0 – объявление (связывание) переменной, которая ссылается на целочисленный тип. стоит отметить, что в F# всегда требуется инициализировать ссылочный(ref) тип каким-либо значение уже при объявлении.
Запись a := 10 – обозначает присвоение ссылочной переменной а значения 10.
Console.WriteLine !a – вывод на консоль содержимого перенной a. Оператор ! – оператор извлечения значения ссылочной переменной.
Использование ref типа в F# сильно похоже на использование указателей в C.
Заключение
Надеюсь, что бы полезен тем, кто решил познакомиться с новым языком F#. Удачного всем программирования.