Pull to refresh

F#: Hello, World

Reading time2 min
Views7.2K
Приблизительно через год нас ждет очередной релиз Microsoft Visual Studio и едва ли не самой вкусной новинкой обещает стать F# — функциональный язык глазами ребят из Кембриджской лаборатории Microsoft Research. Этот язык совсем новый и сейчас находится на стадии вылизывания в лабораториях Microsoft Research. Microsoft позиционирует F# как один из основных языков для .Net наряду с C# и VB.Net что скорее всего значит, что рано или поздно с ним придется столкнутся очень многим програмистам под .Net. Я, как и многие разработчики, никогда не сталкивался с чисто функциональными языками, но принцип «Готовь сани летом» еще не отменяли. Эта статья — мой личный маленький «Привет F#».

Итак, пощупать новинку можно уже сейчас. Для этого нам понадобится Visual Studio 2008 и Microsoft F#, September 2008 Community Technology Preview. После установки последнего в студии появится новая ветка проектов — Visual F#.
Создадим консольное приложение и после некоторого времени, затраченного на гугление, попробуем поздороватся с миром:
// подключаем лайт-синтаксис<br/>
#light<br/>

// C# : using System;<br/>
open System<br/>

// скажем миру привет<br/>
printfn "Hello, World! What is your name, user?"<br/>

// а как нас зовут? C# : var name = Console.ReadLine();<br/>
let name = Console.ReadLine()<br/>

// определим функцию, которая будет говорить "привет" аргументу who.<br/>
// приблизительный аналог на C#:<br/>
// public delegate void SaySomethingDelegate(string toWho); <br/>
// SaySomethingDelegate sayHello = who => Console.WriteLine("Hello, {0}!", who);<br/>
let sayHello who = printfn "Hello, %s!" who<br/>

// привет, Хабрахабр!<br/>
sayHello name<br/>

// а в функциях можно использовать и стандартные методы .Net Framework:<br/>
let sayHelloDotNet who = Console.WriteLine("Hello from F# via .Net, " + name + "!")<br/>

// и опять привет!<br/>
sayHelloDotNet name<br/>

// в качестве бонуса посчитаем числа Фибоначчи :)<br/>
let rec fib i =         // рекурсивная функция от одного аргумента<br/>
  match i with        // которая смотрит на что похож этот аргумент<br/>
  | 1 | 2 -> 1        // если он 1 или 2, то возвращаем 1<br/>
  | i -> fib(i-1) + fib(i-2) // если он похож только на себя - то рекурсивно вызываем эту же функцию<br/>
  
// смотрим, что у нас получилось<br/>
printfn "%i" (fib 20)<br/>

* This source code was highlighted with Source Code Highlighter
.

Output нашей программы:
Hello, World! What is your name, user?
Habrahabr
Hello, Habrahabr!
Hello from F# via .Net, Habrahabr!
6765

Вот так. Язык довольно приятен. Да, ФП — это принципиально другая область чем традиционные языки типа C#. Да, F# еще сыроват. Да, не хватает много фич. Да, есть Nemerle, но вряд ли MS будут кардинально менять F# на протяжении ближайшего года.
Если будет интерес к данной теме — попробую сочинить еще что-нибудь, по крайней мере мне эта область очень интересна.
Tags:
Hubs:
Total votes 56: ↑40 and ↓16+24
Comments77

Articles