第2章? scala的第一步
第一步、学习使用scala解释器
第二步、定义一些变量
val 同java的final ,不能再被赋值
第三步、定义一些函数
第四步、编写一些scala脚本
第五步、用while循环;用if判断
函数文本语法:括号里的命名参数列表,右箭头,函数体,如:(x :Int, y: Int) => x+y
第6步、用foreach和for枚举
?
第3章 scala的下一步
第七步、带类型的参数化数组
?? ? *可用new实例化对象或类实例
?? ? *参数化得意思是在创建实例的时候“设置”它。
第八步、使用List
? ? *scala数组是一个所有对象都共享相同类型得可变序列
? ? *scala的List类是所有对象都共享相同类型得不可变对象序列。
? ? *? list有个叫“:::”的方法实现叠加功能
?? *list有个"::"方法,是把一个新元素组合到已有List的最前端,然后返回结果List.
? ? * list的一些方法和作用:
? ? ? ? List()或Nil,? List("Cool", "tools", "rule"),? val thrill = "Will" :: "fill" "until" :: Nil, ? List("a", "b") ::: List("c", "d"),? ?
? ? ? ? thrill(2),? thrill.count(s => s.length ==4),? thrill.drop(2),? thrill.dropRight(2),? thrill.exists(s => s=="until"), ?
? ? ? ? thrill.filter(s => s.length == 4),? thrill.forall(s => s.endsWith("1")), ? thrill.foreach(s => print(s)), ?
? ? ? ? thrill.foreach(print),? thrill.head,? thrill.init,? thrill.isEmpty,? thrill.last,? thrill.length, thrill.map(s => s+"y"), ?
? ? ? ? thrill.mkString(", "),? thrill.remove(s=>s.length ==4),? thrill.reverse,? thrill.sort(s,t) => s.charAt(0).toLowerCase < t.charAt(0).toLowerCase), thrill.tail
?
第九步、使用Tuple
? ? ? 另一种有用得容器对象是元组:tuple。与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元素。
?
第10步、使用Set和Map
? ? ? Scala的集合类型库区分了集合的可变和不可变。数组始终是可变的,列表始终不可变。对于集合映射,Scala同样提供了可变和不可变得替代品,对于集合映射,Scala把可变性建模在类继承中。
?? ? Scala的api包含了集合的一个基本特质:trait;? 两个子特质,一个是可变的集合,一个是不可变的集合。这三个特质都共享同样的简化名:Set。
?? ? 要向集合加入新的变量,可以在集合上调用+,传入新的元素。可变的和不可变得集合都提供了+方法,但他们的行为不同。可变集合将元素加入自身,不可变集合将创建并返回一个包含了添加元素的新集。
? ? ? Map是scala里的另一种有用得集合类,和集合一样,scala采用了类继承机制提供了可变的和不可变得两个版本的Map.
?
第11步、学习识别函数式风格
如果代码包含了任何var变量,大概就是指令式的风格;如果仅仅包含val,大概就是函数式风格。
?
第12步、从文件里读取信息行
?
第四章? 类和对象
4.1 、类,字段和方法
?? ? 类定义里,可以放置字段和方法,这些被称为“成员”:member字段。
?? ? 带有大括号但没有等号得,在本质上当作是显示定义结果类型为Unit的方法。如果想返回一个非Unit的值,需要插入等号。如:def h() = {"this String gets returned!"}
?? ? 当去掉方法体前面的等号时,它的结果类型将注定是Unit.
? ? ? 要想让对象具有鲁棒性的一个重要的方法就是保证对象的状态,实例变量的值,在对象整个生命周期中持续有效。第一步就是通过把字段变为私有的(private),去阻止外界直接对它的访问。因为私有字段只能被定义在同一个类的方法访问。对于私有方法,只能通过类的方法去访问。
? ? ? 传递给方法得任何参数都可以在方法内部使用。scala里方法参数的一个重要特征是它们都是val,不是var.
4.2 分号推断
4.3 Singleton对象
?? ? Scala比Java更面向对象得一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。除了用object关键字替换了class关键字以外,单例对象得定义看上去就像是类定义。
?? ? 当单例对象与某个类共享同一个名称时,他被称作是这个类得伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。
?? ? 单例对象扩展了超类并可以混入特质,由于每个单例对象都是超类得实例并混入了特质,可以通过这些类型调用它的方法,用这些类型得变量指代它,并把它传递给需要这些类型的方法。
?? ? 类和单例对象的一个差别是:单例对象不带参数,而类可以。因为你不能用new关键字实例化一个单例对象,你没有机会传递给它参数。每个单例对象都被作为由一个静态变量指向得虚构类的一个实例来实现。单例对象会在第一次访问时候初始化。
? ? 不与伴生类共享名称得单例对象被称为孤立对象。
4.4 scala程序
? ? 要执行scala程序,一定要提供一个有main方法(仅带一个参数,Array[String],且结果类型为Unit)的孤立单例对象名。)任何拥有合适签名的main方法的单例对象都可以用来作为程序的入口点。
?
4.5 Application特质
? ? 使用Application特质的方法是:首先在单例对象名后面写上"extends Application", 然后代之以main方法,你可以把想要放在main方法里的代码直接放在单例对象的大括号之间。
?
4.6 小结
?
第5章、基本类型和操作
?
5.1、一些基本类型
整数类型:
? ? Byte - 8位有符号补码整数
? ? Short - 16位有符号整数
? ? Int - 32位有符号整数
? ? Long - 64位有符号整数
? ? Char - 16位无符号Unicode字符?
String - 字符序列
Float - 32位IEEE754单精度浮点数
Double - 64位IEEE754单精度浮点数
Boolean - true或false
数类型:整数类型+Float和Double
?
5.2 、文本
整数文本
浮点数文本
字符文本
字串文本
? ? scala为原始字串引入了一种特殊的语法:以同一行里的3个引号(""")开始和结束一条原始字串。内部的原始字串可以包含无论何种任意字符,包括新行,引号和特殊字符。当然同一行得三个引号除外。请注意"""中管道符号和stripMargin的调用。
?
符号文本
?? ? 符号文本被写成'<标志符> 这里<标志符>可以是任何字母或数字得标志符。这种文本被映射成预定义类的实例。符号文本典型的应用场景是你在动态类型语言中使用得一个标志符。
? ? ? 符号被拘禁,如果把同一个符号文本写2次,那么两个表达式将指向同一个Symbol对象。
?
布尔型文本
?
5.3 操作符和方法
?
?? ? Int类包含了叫做+的方法,它带一个Int参数并返回一个Int结果。这个+方法在两个Int相加时被调用。另外,Int包含了许多带不同参数类型得重载,例如,Int还有另一个业叫+的方法参数和返回类型为Long.
?
? ? scala还有前缀操作符和后缀操作符。前缀标注中,方法名在调用得对象之前,如"-7",后缀标注中,方法在对象之后,如"7 to Long".中缀操作符带后两个操作数,一个在左一个在右。前缀和后缀操作符都是一元的,它们仅带一个操作数。前缀和中缀操作符都是在值类型对象上调用方法得简写方式。
?
?? ? 可以当作前缀操作符用得标识符只有+、-、!和~。如果定义了名为unary_!的方法,就可以像!p这样在合适的类型值或变量上用前缀操作符方式调用这个方法。但是如果你定义了名为unary_*的方法,就没办法用成前缀操作符了。
?
5.4、数学运算
?? ? 你可以通过中缀操作符,加号、减号、乘号、除号、余数,在任何数类型上调用数学方法。
?? ? 当左右两个操作数都是整数类型时(Int, Long, Byte, Short, Char),/操作符将返回给你商的整数部分,去掉余数部分,%操作符指明它的余数。
? ? ? IEEE754在计算余数时使用四舍五入除法,而不是截尾除法,因此余数得计算与整数的余数操作会有很大的不同。如果你的确想要ieee754的余数,可以调用scala.Math里得IEEEremainder。
?
? ? ? 数类型还提供了一元前缀+和-操作符(方法unary_+和unary_-),允许你指示文本数是正的,还是负的。
?
5.5 关系和逻辑操作
?
?? ? ? 你可以用关系方法:大于,小于,大于等于,小于等于比较数类型,像等号操作符那样,产生一个boolean结果。另外,你可以使用一元操作符!(unary_!方法)改变boolean值。
?? ? ? 逻辑方法,逻辑与(&&)和逻辑或(||),以中缀方式带Boolean操作数并产生Boolean结果。
?
5.6 位操作符
?
?? ? ? scala让你能够使用若干位方法对整数类型的单个位执行操作。有:按位与运算&,按位或运算|,按位异或运算, 一元按位取补操作符(~ ,方法unary_~),反转它的操作数的每一位。
?
?? ? ? scala整数类型还提供额三个位移方法:左移<<, 右移>> 和无符号右移动>>> 。使用在中缀操作符方式时,位移方法会按照右侧指定的整数值次数逐位移动左侧的整数。
? ? ? 左移和无符号右移在移动的时候填入零。右移则在移动时填入左侧整数的最高位(符号位)。
?
5.7 对象相等性
? ? ? 如果要比较一下看看两个对象是否相等,可以使用或者==,或它的反义!=
?
? ? ? ==的规则:首先检查左侧是否为null,如果不是,调用equals方法。这种类型的比较对于不同的对象也会产生true,只要他们的内容是相同的,并且它们的equals方法是基于内容编写的。
?
5.8 操作符的优先级别和关联性
? ? ? */%,? +? -,? : ? , =? !? , <? >? ,&? , ^ ? ,|
?
5.9? 富包装器
?
5.10 小结
?
?
?