说起来,Haskell真是相当冷门而小众的一门语言。在我工作第一年的时候,我平时从网络的一些学习资料上时不时看到有人提到这门语言。那时候的认识就是除了我们平时用的“面向对象语言 (OOP: Object-Oriented Programming)”外,还存在“函数式语言(FP: Functional Programming)”。碰巧,发现Java 8说引入了对函数式编程的支持,可我尝试去学习时确觉得很难理解。比如说lambda函数吧,说是“可以简洁化代码”,举个例子:
public static void test(){ ExecutorService executorService = Executors.newFixedThreadPool(3); // Java 8之前:传入一个函数需要通过匿名类 executorService.submit(new Runnable() { @Override public void run() { System.out.println("task1 is running..."); } }); // Java 8: 可以通过lambda executorService.submit(()->System.out.println("task2 is running...")); }
我确实觉得不一样,可是不太明白这些到底意味着什么、该怎么用。更不要说闭包(closure),流(stream)这些概念了,只觉得有些神奇、云里雾里。
所以,以后有机会要学学函数式编程的想法就这么埋下了。
不过真正决定好好学学Haskell,还是受编程大神“轮子哥”(@vczh)的影响,他分享过的言论包括:
还有,在博文 <如何设计一门语言 (九)—— 类型> 中提到:
了解编程语言的基本原理并不意味着你一定要成为一名编译器的前端,正如同学习Haskell可以让你的C++写得更好一样,如果你知道怎么设计一门语言,那遇到语言里面的坑,你十有八九可以当场看到,不会跳进去。当然了,了解编程语言的前提是你是一个优秀的程序员,至少要写程序,对吧。于是我这里推荐几门语言是在此之前要熟悉的。编程语言有好多种,每一种都有其代表作,为了开开眼界,知道编程语言可以设计成什么样子,你至少应该学会:
- C++
- C#
- F#
- Haskell
- Ruby
- Prolog
其实这一点也不多,因为只是学会而已,知道那些概念就好了,并不需要你成为一个精通xx语言的人。
遂决定入坑。
原文地址:https://www.cnblogs.com/nanlan2017/p/10428804.html
时间: 2024-10-09 09:41:53