一、Scala开发环境搭建Scala开发环境,一是在IntelliJIDEA上安装Scala插件和ScalaSDK,二是通过ScalaRELP交互(阅读-Eval-PrintLoop)交互环境适合简单的代码调试,不适合应用开发。2.变量和函数定义变量时不指定变量类型。这是否意味着Scala是一种类似于Python或Ruby的动态类型语言?相反,Scala是一种严格意义上的静态类型语言。由于其先进的类型推断(TypeInference)技术,程序员无需在编写程序时显式指定类型,编译器就会从上下文中推断出类型信息。比如给变量x赋值0,0是整数,所以推断x的类型是整数。当然,Scala语言也允许显示指定的类型,比如变量x1和y1的定义。一般来说,我们应该尽量使用Scala提供的类型推断系统,让代码看起来更简洁。还有一个发现就是程序语句的末尾没有分号,这也是Scala中约定俗成的编程习惯。大多数情况下分号是可选的,如果需要在同一行写两条语句,需要用分号隔开。函数的定义也很简单,使用关键字def,后面是函数名和参数列表,如果不是递归函数,可以选择省略函数返回类型。Scala还支持匿名函数的定义,匿名函数由参数列表、箭头连接符和函数体组成。函数是Scala中的一流对象,可以作为参数传递给其他函数、由另一个函数返回或分配给变量。在下面的示例代码中,将定义的匿名函数赋值给变量cube。匿名函数使用起来非常方便。比如List对象中的一些方法需要传入一个简单的函数作为参数。当然,我们可以定义一个函数,然后将其传递给List对象中的方法。但是使用匿名函数,程序看起来更简洁。//定义函数defsquare(x:Int):Int=x*x//如果不是递归函数,函数的返回类型可以省略defsum_of_square(x:Int,y:Int)=square(x)+square(y)sum_of_square(2,3)//定义匿名函数valcube=(x:Int)=>x*x*xcube(3)//使用匿名函数返回列表中的正数List(-2,-1,0,1,2,3).filter(x=>x>0)让我们将其与Java中相应的函数定义语法进行比较。首先,函数体不像Java那样包含在{}中。Scala中的语句实际上是一个表达式。函数的执行过程就是函数体中表达式的求值过程,最后一个表达式的值就是函数的返回值。如果函数体只包含一个表达式,则可以省略{}。其次,在没有显示return语句的情况下,最后一个表达式的值会自动返回给函数的调用者。与Java不同,在Scala中,可以在函数内部定义其他函数。例如,在上面的程序中,如果用户只对sum_of_square函数感兴趣,我们可以将square函数定义为一个内部函数来隐藏细节。定义内部函数:3.流控语句越复杂的程序都离不开流控语句。Scala提供了ifelse条件判断和whilefor循环。与Java中对应的条件判断语句不同,Scala中的ifelse是根据不同的条件返回对应分支上的值的表达式。比如下面例子中计算绝对值的程序,由于Scala中的ifelse是一个表达式,所以不需要像Java那样显式的使用return来返回对应的值。使用ifelse表达式:defabs(n:Int):Int=if(n>0)nelse-n与Java一样,Scala提供了一个while循环语句。在下面的示例中,我们将使用while循环对整数列表求和。使用while对列表求和:defsum(xs:List[Int])={vartotal=0varindex=0while(index
