Scala入门,介绍常用类型,算术和操作符(thirty-two day)


      Scala是一门以Java虚拟机( JVM )为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。你可以使用Scala编写出更加精简的程序,同时充分利用并发的威力。由于Scala运行于JVM之上,因此它可以访问任何Java类库并且与Java框架进行互操作。

Scala:java语言的脚本化,底层是java ,面向对象和函数 (直奔主题),直接写程序,直接运行即可,scala脚本化语言是直接显示结果,所见即所得。它也需要编译(sql语言也可说是脚本语言)(函数式编程:处理数据时,scala用的还是java程序,生成java字节码,但整个过程被scala把java最重要的部分包装起来)

数据处理过程中,java效率会很低,不如脚本化方便

java是先编译再执行,预编译,不是脚本语言,*.java 通过javac编译生成--> *.class 通过java执行变成app

scala 编写的scala文件 *.scala通过scalac编译生成 --->*.class通过scala执行变成app

(pig是mr的高层抽象,直接写脚本就把mr程序写出来了)

安装scala

首先要安装jdk,然后安装scala,解压,配环境变量,在/scala/bin下输入scala即可进入scala的shell解释器进行编程

:help查看命令

java中没有Int 有int(小写i)scala中的Int相当于java中的int和Integer,scala是没有基本类型的。

val(value)相当于java中的final,修饰一个常量,或者加在方法上不能被重写,加在类上不能被继承

var是可以被修改的。

指定类型:val x: String = "12323"

Any(A大写)相当于java中的object

 

常用类型

在Scala中,我们不需要包装类型。在基本类型和包装类型之间的转换是Scala编译器的工作。举例来说,如果你创建一个Int的数组,最终在虚拟机中得到的是一个int[]数组。

      Scala用底层 的java.lang.String类来表示字符串。不过,它通过StringOps类给字符串追加了上百种操作。

      举例来说,intersect方法输 出两个字符串共通的一组字符:

      "Hello" . intersect ("World") //输出"lo"  

      在这个表达式中,java.lang.String对 象'Hello"被隐式地转换成了一个StringOps对象,接着StringOps类的intersect方法被应用。  因此,记得StringOps类。

      同样地,Scala还提供了RichInt、RichDouble、 RichChar等。 它们分别提供了一Int、 Double、 Char等--所不具 备的便捷方法。我们前面用到的to方法事实上就是RichInt类中的方法。在表达式  1.to(10)   中,Int值1 首先被转换成Rchimt,然后再应用to方法。 最后,还有BigInt和BigDecimal类,用于任意大小(但有穷)的数字。这些类背后分别对应的Lavamath,Bigtegeljava.math.BigDecimal,

在Scala中, 我们用方法,而不是强制类型转换,来做数值类型之间的转换。举例来说,99.44.toInt得到99,99.toChar得到C 当然,和Java- 样,toString将任意的对象转换成字符串。

要将包含了数字的字符串转换成数值,使用toInt或toDouble。例如,“99.44”.toDouble得到99.44。

 1.to(10)  这是方法

1 to 10 这是操作符

 

scala算术和操作符(和java/c++的预期效果是一样的) 

val answer=8*5+2
+-*/%等操作符完成的是它们通常的工作,位操作符&|^>><<也一样。只是有一点特别的:这些操作符实际上是方法。例如:
a+b
是如下方法调用的简写:
a.+ (b)
这里的+是方法名。Scala并不 会傻乎乎地对方法名中使用非字母或数字这种做法带有偏见。你可以使用几乎任何符号来为方法命名。比如,BigInt类就定义了一个名为/%的方法,该方法返回一一个对偶,而对偶的内容是除法操作得到的商和余数。
通常来说,你可以用
a方法b
作为以下代码的简写:
a.方法(b)
这里的方法是一个带有两个参数的方法(-个隐式的和-个显式的)。例如

 1.to(10)可以写成:

      1to 10

      采用哪种风格取决于对你来说哪种更可读。刚开始接触Scala的程序员倾向于使用Java语法风格,这完全没问题。当然了,即便是最坚定的Java程序员似乎也会选a+b而不是a.+(b)。

      和Java或C++相比,Scala有-一个显著的不同,Scala并没有提供++和--操作符,我们需要使用+=1或者一=1:

      counter += 1 //将counter递增    Scala没有++

      有人会问Sala到底是因为什么深层次的原因而拒绝提供++操作符。(注意, 你无法简单地实现一个 名为++的方法,因为Int类是不可变的,这样一个方法并不能改变某个整数类型的值。) Scala的设计者们认为不值得为少按一个键额外增加一个特例。

对于BigInt和BigDecimal对象,你可以以常规的方式使用那些数学操作符:

      val x: BigInt = 1234567890

      x*x*x /1将产出1881676371789154860897069000

      这比Java好多了,在Java中同样的操作需要写成x.multiply(x).multiply(x)。

      在Java中,你不能对操作符进行重载,Java的设计者们给出的解释是,

      这样做防止大家创造出类似!@$&* 这样的操作符,使程序变得没法读。这当然是个糟糕的决定;你完全可以用类似qxywz这样的方法名,让你的程序变得同样没法读。Scala允许你定义操作符,由你来决定是否要在必要时有分寸地使用这个特性。

写一篇学习scala函数及方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值