Scala学习之"可伸展的语言"

让我开始学习Scala,了解Scala,本章大致内容:
1、我为什么学习Scala,她和Java的区别
2、Scala中的基本类型和操作
3、Scala中类和对象

我为什么学习Scala,她和Java的区别

Scala是一种函数式编程和面向对象思想结合起来的编程语言。她可以写出多种风格的语言包括指令式,但本质希望我们写函数式风格。本人很喜欢函数式的风格,这种风格给予了更大灵活、稳定。且Scala能和Java语言混用,拥有几乎等同于Java语言的生态系统,Scala的特性和性能让她更好地去实现Spark等大数据及算法方面的事情。这就是我选择Scala作为第二语言的原因。

推荐一篇Scala现状的文章:
https://yq.aliyun.com/articles/54799

Java中的面向对象思想:
http://blog.csdn.net/weixin_39471249/article/details/79325275

《Scala编程》中的思想:

  • Scala是面向对象的。她比Java的面向对象更加纯粹(),在Scala的世界里,任何事物都是对象,包括数值、运算符。比如在Scala中,描述1+2,实际上是等于调用了在Int类里的+方法。方法名和操作符一样的名字定义。再有组装对象,在Java中,是通过抽象类继承、类实例的组装、接口的实现来进行的,Scala的特质(trait)拥有更为强大的能力,可以实现”胖瘦接口”、堆叠改变等扩展。她看上来似Java中的接口、多重继承,但实际上特质就是特质,不要和接口、多重继承混为一谈,这样更有助于我们理解。
  • Scala是函数式的。我们要清楚的是,第一点,在函数式编程中,函数是头等值,即函数也是值,与整数和字符串是同等地位。它可以被当作参数传递给其他函数,也可以当作结果从函数中返回或保存在对象中。可以在函数中定义其他函数,就如同在函数中定义其他整数一样,也可以定义匿名函数,并随意插入到代码的任意地方,如同使用42这样的字面量一般。函数是头等值的概念,简化了操作符的抽象和控制结构的创建。第二点,函数式编程中程序的操作应该是把输入值映射为输出值而不是就地修改数据。对于第二点,我更喜欢另一种解释,即方法不应该具有副作用。简单的理解就是,不论同样的参数及调用,得到的结果始终不变。

Scala中的基本类型和操作

Byte\Short\Char\Int\Float\Long\Double\Boolean

除了首字母大写以外,其他的属性和Java中的8个基本类型一模一样。我们需要注意的一点就是Scala的运算实际是方法的调用。我们可以看到Int类里充斥了各种运算方法。

这里写图片描述
此处不再过多介绍。让我们将精力投入其他的地方,以获取更大的收获。

Scala中类和对象

我们先看一段基本的代码:

package two

/**
  * @author wangzha
  *
  */
class FirstScala(name: String, age: Int, sex: String) {
    //重写构造方法
    def this(name: String, age: Int) = {
        this(name, age, "man")
    }
    //成员变量
    val time = System.currentTimeMillis() / 1000

    def study(time: Long): Long = System.currentTimeMillis() / 1000 - time

    def getName(): String = this.name
    //重写toString方法
    override def toString: String = name + "'s age is" + age + "and sex is" + sex
}

在Scala中类的创建与Java基本类似,包括对象的声明。不同点在于构造器,默认构造器是在类名后面(称为主构造器),重写构造器最终也要经过主构造器。在Scala中不能定义静态成员,而是用单例对象来替代(singleton object)。

  • 单例对象以Object关键字替代了Class关键字
  • 单例对象不带参数,而类可以。因为单例对象不是用new关键字实例化的,所以也没机会出入参数。每个单例对象都被实现为虚构类的实例。并指向静态的变量,因此他们具有和Java
    静态类有着相同的初始化语义。
  • 单例对象在第一次被访问的时候才会被初始化。
  • 与类同名的单例对象称为伴生对象,那个类称为伴生类。伴生类和伴生对象必须定义在一个源文件中,类和伴生对象可以互相访问其私有成员。没有伴生类的单例对象称为独立对象,通常用作工具类,或者定义Scala应用的入口点(如下)。
object FirstScala {
    def main(args: Array[String]): Unit = {
        val f = new FirstScala("wangzha", 18)
        Thread.sleep(5000)
        println(f.getName() + "学习了很久:" + f.study(f.time))
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值