scala学习(一)认识scala

最近开始接触scala语言,据说是比java好一些,而且也有人说他将回事下一个java,很好奇,也就开始慢慢的了解,了解不多,先说说了解了什么。
都说scala即时面向对象的语言,也是面向函数的语言,一开始不懂什么叫面向函数,所以上网查了很多的资料,查了一些资料,这里就和大家说道一下我的看法。当然今天不讲scala语法,语法留在后边我们讲,先说一下为什么面向函数受欢迎吧。

函数是第一公民

函数是第一公民,可能这句话说起来不太准确,应该是纯函数是第一公民,为什么这么说。首先我们来看一个比较失败的js的例子。

var hi = function(name){
  return "Hi " + name;
};

var greeting = function(name) {
  return hi(name);
};

有没有觉得greeting简直就是脱了裤子放屁,明明可以简洁到

//正确的例子
hi("menghaibin") 
//or
var greeting = hi
greeting("menghaibin")

//错误的例子
var greeting = function(name) {
  return hi(name);
};
greeting(menghaibin);

好吧,上边的正确的例子也不是完全正确,最起码没有“;”,但是这不是重点,重点是多此一举,我们发现还有很多的例子是这样的,再举一个例子

// 错的
var getServerStuff = function(callback){
  return ajaxCall(function(json){
    return callback(json);
  });
};

// 对的
var getServerStuff = ajaxCall;

为什么钟爱一等公民

我们还是先看两个例子
一个get请求

httpGet('/post/2', function(json){
  return renderPost(json);
});

一个返回错误信息的get请求

httpGet('/post/2', function(json,err){
  return renderPost(json,err);
});

我们发现如果要实现返回错误信息的get请求,那么我们就需要把renderPost的这个函数也改了,这有点不太友好了,既然他是一定公民,我们就要做到一等公民的样子。

httpGet('/post/2',renderPost);

是不是这样就简介多了。而这些东西,在面向对象的java里边,除了lambda能带来一部分外,其他的java很难做到,而在scala中我们回发现,之后我也会尽量用函数的思想来写文章。

其他的优势

当然scala还有许多语言层面上的优势
在java中,你有想过你的类可以继承多个AbstractClass吗。
在Java中想要一个singleton,除了static中,和Enum的单例特性,还有其他方法吗。
在java中想要延迟一个类的加载除了依赖spring,想过其他办法吗。
在java中,对于集合的处理,除了一遍一遍的for循环,是不是实在找不到其他方式了
在java中,是不是发现多线程的运用到处是雷区。
说了这么多,你会不会理解成我要你放弃java,错,scala可以完美的,无缝结合java。
在比如我们经常听说的spark就是用scala写的,是不是就感觉他很高大上了呢。

小结

年后我们一起来学习scala吧,毕竟罗列了这么多有点,不把他搞明白了,咱们罗列什么。

发布了176 篇原创文章 · 获赞 84 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/lovemenghaibin/article/details/54744494
今日推荐