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 }
with
member x.function1() =
/...
Why it is so interested to me. So first, the definition of record type is similar a interface. So it is strongly type. However, the implementation is not defined. More importantly, it is very easy to create an object, which is the implementation. For example
let yourObject = {
member1: m1;
member2: m2;
}
Woo, that is so simple, if you make a member mutable, you can even switch implementation on the fly.