AuthorUrs Enzler

Myths about F#: Imperative code is simpler than functional code! No, not at all, but you are more used to it.

M

A myth about F# that I hear repeatedly is that imperative code (e.g. loops) is simpler than functional code (e.g. folds). On one hand, simplicity is very subjective. On the other hand, simplicity is mostly determined by familiarity.

A typically used example is something like the following:

Simple:

Difficult:

Let’s see what’s wrong with this myth.

Myths about F#: F# is for FP, C# for OOP! No, F# loves OO.

M

Sometimes when I talk to C# developers about F#, they say they don’t want to switch to a functional programming language. When I reply that F# is my favourite object-oriented programming language, they look a bit puzzled. They typically think that F# is for functional programming, while C# is for object-oriented programming. And this is wrong!

Myths about F#: F# is for math problems only! No, F# is a general-purpose programming language.

M

When I show F# code to non-F#ers, I often get a reaction that goes something like this: “This code looks kind of nice, but we don’t have math problems to solve, so F# is not for us.”

By the way, the code I show typically has nothing to do with math. We don’t solve math problems with F#. We write a business application with it.

So I wonder why I hear this almost every time when I present about F#. Some guesses:

Myths about F#: C# will become F# anyway, so we don’t need F#! Nope, not happening.

M

C# indeed gets more and more features known to F#, like pattern matching, switch expressions, records, a way to deal with nulls, and someday maybe even discriminate unions and deep equality on collections. Maybe even type inference could become as powerful as in F#. However, C# can’t eliminate the features it already has, like mutability by default and statements. Immutability by default and expressions-only are strengths of F# and make building error-free apps easier. Real pipes and...

Recent Posts