Scala快学笔记(一)
一,基本概念:
1,Scala是一种基于JVM的面向对象和函数式编程语言
2,基本类型:数值类型 -》:Byte,Short,Int,Long,Float,Double和布尔类型:Boolean和字符类型:Char
question:用BigInt计算2的2017次方(BigInt(2).pow(1024)),scalaApI使用
3,高级for :
for(i <- "abc";j <- 1 to 3 if j==2) yield (i+j).tochar /*result cde note:第一个for结束记得用分号;,yield最后获得的结果和第一个生成器类型一致,如“cde” 和“abc”*/
4,参数变长的函数声明:def Demo(args:Int*):Object={} 如果没有返回值的函数程为过程,形式如 def Demo(s:String){} 此时没有等号,也可以显示用Unit=来声明
4.1,默认参数 def Demo(name:String="a",age:Int="4")={} 可以用val b= new Demo() 默认可以无须设置参数 name默认val
4.2 ,函数,过程:过程没有返回值的函数,无需要=号,方法,相当于非静态方法,即对象方法??(不太确定),函数相当于Java中的静态方法(类方法),要加=号。
5,懒值和方法和val区别:
1,懒值 初始化被推迟,只有第一次调用时才会得到验证
2,val 申明时就得到验证
3,def 每次调用时,都需要进行一次验证
例子:
val file=scala.io.Source.fromFile("/usr/one.txt") /*result \usr\one.txt (系统找不到指定的路径。)*/ lazy file1 =scala.io.Source.fromFile("/usr/one.txt") /*result file: scala.io.BufferedSource = <lazy> */ def file2 =scala.io.Source.fromFile("/usr/one.txt") /*result //file:scala.io.BufferedSource file1 file2 //java.io.FileNotFoundException: \usr\one.txt (系统找不到指定的路径。)
6,异常:try{}catch{}finally{}
7,块以最后一个返回,空块返回Unit
8,注意点x=y=4这样不合法的,特例:x:Unit,y:Int,x=y=5
9,var t:Long=1 "String".foreach(t*=_.toLong)
10,练习 递归求字符串的Unicode乘积之和
def product(s:String):Long={ if(s.length==1) s.charAt(0).toLong else s.take(1).charAt(0).toLong*product(s.drop(1)) } //第10题 def mi(x:Double,n:Int):Double={ if (n==0) 1 else if(n<0) 1/mi(x,-n) else if(n>0 && n%2==0) mi(x,n/2)*mi(x,n/2) else mi(x,n-1)*x }
10,sorted(true):升序,sorted(false):为降序(从上往下)
11,多维数组:val arr=Array.ofDim[Double](3,4)
12,课后习题:
//交换数组相邻的元素 3.2 def changeArr(arr:Array[Int]):Array[Int]={ for (i <- 0 until arr.length if( i%2==0)) { val temp= arr(i) arr(i)=arr(i+1) arr(i+1)=temp } arr } /*异常,会出现数组越界,修改为 for (i <-0 until (arr.length-1,2)*/
val tmp=java.util.TimeZone.getAvailableIDs() val tmp2=for (i <- tmp if(i.startsWith("America"))) yield { i.drop("America".length)} scala.util.Sorting.quickSort(tmp2) /*字符串的操作*、
参考文献: