从零开始学函数式语言

170 阅读2分钟

注:由于不常用中文, 可能有些语法错误, 请指出。

公司最近做的项目中有个需要用到OCaml的项目, 上司让我去学,然而期限就在明天, 我决定归纳一下函数式语言到底和平常用的命令式、面向对象式有什么不同。

1纯粹

既然是函数式而不是命令式, 那就所有的式子都必须返回值, 这是我在学习这函数式语言时理解到的,

那什么是【所有的式子都必须返回值】?

那就是不存在或不使用void (当然向变量赋值的代码行还是必须有的)

例子:

let is_bigger_than_zero n = if n > 0 then true else false

在OCaml中的if是有且必须包含else的因为它怕你不包含else从而导致不返回值。

2更加聪明的类型系统

其实近些年的面向对象编程也是有偏这个方向发展, 各个语言都逐渐加入let或者val等以用于自动类型推测, 但OCaml可以做的更好!

OCaml可以实现从你的一堆代码中自动推导出你希望返回的类型

例子:

let get_sum x y = x +. y

在这里get_sum函数将会自动推测类型为x:float, y:float, return:float, 妙就妙在小数的计算符号和整数的计算符号是不同的,在使用整数时使用+-*/但到了小数时就必须在后面加个.对, 上面的例子里的+.就暗示了编译器处理的对象是小数, 而当你传入整数时编译器将在编译时报错, 以尽可能地防止在运行时报错。

这就是我要说的内容, 如有雷同不胜荣幸。

技术交流可以加微信: normidar