• f# essential - part 14 - object oriented without class

    JavaScript is duck type language, if you expect a object has a method, you just call object.method. It supports Polymorphism very well, but you don't need implementation inheritance, and you don't need prototype, constructor at all. F#'s record type has similar concept. It is not a class, but it is strongly type, and it is super easy to create, it is like javascript object in strongly type. I think it is the one of best features in F#. Its syntax is as following

    type YourRecordType = 
        { member1: type1;
          member2: type2 }
    
    
  • f# essential - part 13 - pattern matching over .net type

    f# use unique syntax to match type like the following,

    let divide1 x y =
       try
          Some (x / y)
       with
          | :? System.DivideByZeroException -> printfn "Division by zero!"; None
    
    
  • f# essential - part 12 - function is not method, is not delegate, what is it anyway

    As previous post discussed, f# function is not a method, because it support closure, it curry and so on, and .net method does not support these. It looks very much like a delegate (aka lambda, anonymous method) in .net. For example, the following looks like it is a delegate.

    open System
    open System.Linq
    
    
  • f# essential - part 11 - ignore function

    If you call a function which does not return unit type, you can not call it like the following.

    let f1() = 
        //do some side effect stuff
        "f1"
    f1()
    

    You have to do the following

    f1() |> ignore
    //or 
    let _ = f1()
    
  • f# essential - part 10 - why and when f# does not need null value,

    I am surprise when I don't see a need to use null in f#. It use a generic record type "option", which is a very elegant solution to express nullness. In c#, we have reference type and value type, in .net 1/1.1, we express nullness for reference type using "null", in .net 2 above, we can use Nullable type of value type. However, f# unify this using option.

    The null keyword is a valid keyword in the F# language, and you have to use it when you are working with .NET Framework APIs or other APIs that are written in another .NET language. The two situations in which you might need a null value are when you call a .NET API and pass a null value as an argument, and when you interpret the return value or an output parameter from a .NET method call. For more please refer to MSDN