scala编程入门(理解)

来源:互联网 发布:美工职业描述 编辑:程序博客网 时间:2024/05/16 12:04

参考书籍

Scala编程

Martin Odersky, LexSpoon, Bill Venners

 

Scala 是高层级的

Scala 可以通过让你提升你设计和使用的接口的抽象级别来帮助你管理复杂性。例如,假设你有一个 String 变量name,你想弄清楚是否 String 包含一个大写字符。在 Java 里,你或许这么写:

// 在Java 里 boolean nameHasUpperCase = false;

for (int i = 0; i< name.length(); ++i) {

 if (Character.isUpperCase(name.charAt(i)))

{  

nameHasUpperCase= true; 

 break; 

}

}

在 Scala 里,你可以写成:

val nameHasUpperCase= name.exists(_.isUpperCase)

 

变量

Scala 有两种变量,val 和 var。val 类似于 Java 里的 final 变量。一旦初始化了,val 就不能再赋值了。与之对应的,var 如同Java 里面的非 final 变量。var 可以在它生命周期中被多次赋值。

 

注意 Java 的++i 和 i++在 Scala 里不起作用,要在 Scala 里自增,必须写成要么 i = i + 1,或者 i += 1。
注意 Scala 和 Java 一样,必须把 while 或 if 的布尔表达式放在括号里。

操作符

Scala 里所有的操作符都是方法调用。

从技术上讲,Scala 没有操作符重载,因为它根本没有传统意义上的操作符。取而代之的是,诸如+,-,*和/这样的字符可以用来做方法名。因此,当第一步里你在 Scala 解释器里输入 1 + 2,你实际上正在 Int 对象 1 上调用一个名为+的方法,并把 2 当作参数传给它

 

带类型的参数化数组


scala与java

Scala里的包与Java里的包很相似:它们把全局命名空间 分区并提供了信息隐藏的机制。

类Int的值对应着Java的int值。更广泛意义上来说,所有的Java原始类型在scala包里都有对应的类。

例如,scala.Boolean对应着Java的boolean。 scala.Float对应着Java的float。当你把你的Scala代码编译成Java字节码,Scala编译器将使用Java的原始类型以便获得其带来的性能益处。

 

Scala 和Java 之间有一点不同,Java 需要你在跟着类命名的文件里放上一个公共类—— 如文件 SpeedRacer.java 里要放上类SpeedRacer——Scala 里,你可以任意命名.scala文件,而不用考虑里面放了什么 Scala类或代码。然而通常情况下如果不是脚本,推荐的风格是像在 Java 里那样按照所包含的类名来命名文件,这样程序员就可以通过查看文件名的方式更容易地找到类。

 

指令式风格编程和函数式风格编程

指令式:imperative 风格编程。指令式风格,是你常常使用像 Java,C++和 C 这些语言里用的风格,一次性发出一个指令式的命令,用循环去枚举,并经常改变共享在不同函数之间的状态。Scala允许 你指令式地编程,但随着你对 Scala 的深入了解,你可能常会发现你自己在用一种更函数式:functional 的风格编程。

 

指令式:imperative 风格编程

vari = 0

while(i < args.length) {  

println(args(i)) 

 i += 1

}

函数式:functional 的风格编程

args.foreach(arg=> println(arg))

这行代码中,你在 args 上调用 foreach 方法,并把它传入函数。此例中,你传入了带有一个叫做 arg 参数的函数文本:function literal。函数体是 println(arg)。


实例

从文件中读行记录,并把行中字符个数前置到每一行,打印输出的脚本。


原创粉丝点击