scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。你可以使用scala编写出更加精简的程序,同时充分利用并发的威力。由于scala运行于jvm之上,因此它可以访问任何java类库并且与java框架进行互操作。
scala是一门十分有趣又非常实用的语言,它以jvm为目标环境,将面向对象和函数式编程有机地结合在一起,带来独特的编程体验。
它既有动态语言那样的灵活简洁,同时又保留了静态类型检查带来的安全保障和执行效率,加上其强大的抽象能力,既能处理脚本化的临时任务,又能处理高并发场景下的分布式互联网大数据应用,可谓能缩能伸。
可伸缩的语言是一种多范式的编程语言,一种类似java的编程,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala是在JVM上运行。
Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。Scala当前版本还不能在.NET上运行(虽然上一版可以-_-b),但按照计划将来可以在.NET上运行。
Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说,
定义函数是用def
package cn.chinahadoop.scalaclass Basic {}object Basic { def helloScala(){ println("Hello scala "); } def main(args: Array[String]) { // println("Hello Scala chenshenglong"); helloScala; }}
从上面可以看出参数是先参数名再参数类型,两个之间是用冒号之间分隔的。
package cn.chinahadoop.scalaclass Basic {}object Basic { def helloScala(){ println("Hello scala chen"); } def hello (name:String):String={ return "hello:"+name } def main(args: Array[String]) { // println("Hello Scala"); // helloScala; println(hello("i am very happy!!")); }}
从上面可以看出函数返回值是在参数括号以后加个返回数值类型,且加了个等号。
package cn.chinahadoop.scalaclass Basic {}object Basic { def helloScala(){ println("Hello scala chen"); } def hello (name:String):String={ return "hello:"+name } val add =(x:Int,y:Int)=>x+y // def add2=(x:Int)(y:Int)=>x+y def main(args: Array[String]) { // println("Hello Scala"); // helloScala; // println(hello("i am very happy!!")); println(add(2,4)); }}
函数可以赋给一个参数,且可以调用,其实
(x:Int,y:Int)=>x+y
是一个匿名函数。 可以赋给一个常量,这个常量就是一个函数。
颗粒化,可以传进去一个参数,反回来的还是一个函数,
package cn.chinahadoop.scalaclass Basic {}object Basic { def helloScala() { println("Hello scala chen"); } def hello(name: String): String = { return "hello:" + name } val add = (x: Int, y: Int) => x + y def add2(x: Int)(y: Int) = x + y def main(args: Array[String]) { // println("Hello Scala"); // helloScala; // println(hello("i am very happy!!")); // println(add(2, 4)); println(add2(3)(5)); }}String*中的*号代码接受一系列以String为参数类型的参数
object Basic { def helloScala() { println("Hello scala chen"); } def hello(name: String): String = { return "hello:" + name } val add = (x: Int, y: Int) => x + y def add2(x: Int)(y: Int) = x + y def printEveryChar(c:String*)={ c.foreach(x=>println(x)) } def main(args: Array[String]) { // println("Hello Scala"); // helloScala; // println(hello("i am very happy!!")); // println(add(2, 4)); // println(add2(3)(5)); printEveryChar("a","b","c","d") }}
可以给参数赋给一个默认值
package cn.chinahadoop.scalaclass Basic {}object Basic { def helloScala() { println("Hello scala chen"); } def hello(name: String="i love world"): String = { return "hello:" + name } val add = (x: Int, y: Int) => x + y def add2(x: Int)(y: Int) = x + y def printEveryChar(c:String*)={ c.foreach(x=>println(x)) } def main(args: Array[String]) { // println("Hello Scala"); // helloScala; // println(hello("i am very happy!!")); // println(add(2, 4)); // println(add2(3)(5)); // printEveryChar("a","b","c","d") println(hello()) }}
这里的hello()括号不能省略,只能方法中无参时,调用可以省略。