5 ms·
Can you recommend any resources to learn about F#? I'm currently working on a big C# codebase and it would be interesting to see if F# would make some of it cl
by murphm8 12y ago
Can you recommend any resources to learn about F#?
I'm currently working on a big C# codebase and it would be interesting to see if F# would make some of it cleaner.
- edgyswingset 12y agoAbsolutely. One of the best starting places would be the Why Use F# series: http://fsharpforfunandprofit.com/series/why-use-fsharp.html http://fsharpforfunandprofit.com/series/why-use-fsharp.html It compares and contrasts C# and equivalent F# code for relatively simple, but common-in-the-real-world examples, while introducing some functional constructs. I'd also recommending reading the "Thinking Functionally" series. After that I'd recommend skimming some of the topics on the F# wikibook: http://en.wikibooks.org/wiki/F_Sharp_Programming http://en.wikibooks.org/wiki/F_Sharp_Programming And then I'd begin with rewriting some components in your existing project while continuing reading through that book and other online resources. Me and a coworker also rewrote ~600 line C# module into a working module in F#, along with some interop POC here: https://github.com/cartermp/CSharpToFSharp https://github.com/cartermp/CSharpToFSharp It's the product of a little over 20 hours of development across two people new to the language (and thus has some warts...), so take it as a grain of sand. Uses MS Unit Testing framework for F# (available via NuGet).
- deleted 12y ago[deleted]
- slambam 12y agoI've got a safaribooks online account, and found "Real World Functional Programming with examples in F# and C#" the most useful of the f# books I've read. The author has a blog, http://tomasp.net/ http://tomasp.net/ But I got something out of all of the books.
- pjmlp 12y agoThe book is available for free from Microsoft. http://msdn.microsoft.com/en-us/library/vstudio/hh314518%28v=vs.100%29.aspx http://msdn.microsoft.com/en-us/library/vstudio/hh314518%28v...
- MichaelGG 12y agoF# will almost definitively help any C# code. Even if you use F# as a "better C#" you'll see improvements. Just removing excessive type annotations is a nice step up in clarity. F#'s benefit will come as a bunch of tiny improvements, "programming in the small" as they call it. For instance: let xs = [ while r.Read() do yield r.GetInt 0 ] In C#, it's: var xs = new List<int>(); while (r.Read()) { xs.Add(r.GetInt(0)); } Or: let f x = let x = try int s with _ -> -1 x * 3 In C#, it's uglier. First because try... isn't an expression. Second, because you cannot shadow variables by rebinding them, so you always have to keep "old" vars around and in scope, and cannot reuse handy variable names: int f(string x) { int x1; try { x1 = int.Parse(s); } catch { x1 = -1; } return x1 * 3; } Or: let x = use db = new DB() db.GetX() In C#, you've got to declare x outside a block: SomeType x; using(var db = new DB()) { x = db.GetX() } Which is more annoying than it might seem. How much nicer is it to be able to create a new scope at any point in a function, and return a value out of it cleanly? These are by no means a complete or even important showcase of C#'s lacking. Just a few quick thoughts off the top of my head. In general, every time I'm writing C# code, I keep realising how things would be much more concise if I was in F#.
- CmonDev 12y agoF# is a nice language, but not a very necessary one (especially given the lack of tooling). 1) Simply write a quick extension method (not ideal but not a reason to switch languages): var xs = r.YourExtensionMethod<int>(rr => rr.GetInt(0)).ToList(); 2) Simply use the appropriate built-in method: int f(string x) { int number; /*Will be not necessary in C#6.*/ return Int32.TryParse(value, out number) ? numeber * 3 : -1; } 3) It's a matter of taste. Not a bad feature, but not a killer one either.
- MichaelGG 12y agoNone of them are killer features. Nor is pattern matching, assorted comprehensions, array slicing, binary literals, bytestrings, tuples, active patterns, records, type inference, immutability, shadowing, nested functions, custom operators, typechecked printf, type providers, workflows[1], sum types, agents, etc. etc. But it sure all adds up. Switching for a codebase might not be a wise move for many reasons. But writing new code doesn't have those excuses. Actually workflows are the closest to a "killer" feature but C# took the most popular, async, and hard-coded it in.
- CmonDev 12y agoDon't do it if you are used to good tools like ReSharper. Wait for Roslyn and it's syntax sugar instead.