对象是包括scala在内的众多现代编程语言的基础。在面向对象编程语言中
package com.test1
object Scala09_test3 {
def main(args: Array[String]): Unit = {
val r1 = Range(0,10)
//对于range来说,可用操作的数量非常惊人,对象是
//类和对象
//对象是包括
println(r1.toSeq.reverse)
//创建一个range对象并打印其Step值
println(r1.step)
val r2 = Range(0,10,3)
println(r2.step)
type r3=String
val fa:r3="fa fd as fa sd fa sf"
fa.split(" ").toSeq.foreach(print )
//创建一个string对象s1将其创建化sally。
var s1:r3 ="Sally"
var s2:r3 ="Sally"
if(s1==s2){
println("s1 and s2 are equals")
}else{
println("s1 and s2 are not equals")
}
//ScalaDoc scala提供了用于获取
}
}
创建类
除了使用range这样的预定义类型,我们还可以定义自已的对象类型。
实际上,
package com.test1
object Scala09_test3 {
def main(args: Array[String]): Unit = {
//create some classes
class Giraffe
class Bear
class Hippo
//create some objects
val g1 = new Giraffe
val g2 = new Giraffe
val b = new Bear
val h = new Hippo
//每个对象都是唯一的
println(g1)
println(g2)
println(b)
println(h)
class Hyena{
println("This is in the class body")
}
val hyena = new Hyena
println(hyena)
class Zebra{
println("I have strips")
}
val zebra = new Zebra
}
}
类中的方法
在类中可以定以属于这个类的方法,下面bark方法就属于dog类
package com.test1
object Scala09_test5{
def main(args: Array[String]): Unit = {
val cat = new Cat
val m2 = cat.meow()
assert("mew!"==m2,"Expeted new! got"+m2)
//方法对类中的其他元素有特殊的访问方式,例如,在类中无需使用圆点
//即可访问该类中的其他方法。
val hamster=new Hamster
val e1 = hamster.exercise()
import util.Random
//使用多个import导入
/* import util.Random
import util.Properties
val r = new Random
val r2 = Properties*/
//同一条语句导入多个项
/* import util.Random,util.Properties
val r = new Random
val p = Properties*/
//修改导入的名字
//甚至可以个重情重义导入的名字
import util.{Random=>Bob,Properties=>Jill}
val r = new Bob
val p = Jill
//也可以导入包里面的所有的事特,可以使用下划线
import util._
//也可以使用完全限定名
val r1 = new util.Random
val p2 = util.Properties
import pythagorean.RightTriangle
val rt = new RightTriangle
println(rt.Hypotenuse(3,4))
println(rt.area(3,4))
}
}
至此,示例中使用的都是简单的脚本,但是最终你肯定编写出能够多处使用的代码,随便创建一个对象
package pythagorean
class RightTriangle {
def Hypotenuse(a:Double,b:Double):Double={
Math.sqrt(a*a+b*b)
}
def area(a:Double,b:Double):Double={
a*b/2
}
}
测试
健壮的代码必须不断测试,即在每次修改后都需要测试。对代码中某个部分的可能会意外了影响基他代码,而通过测试,
自动tdd方法需要后面多看看。
域:域是构成对象一部分的var或val,每个对角都会为其域获取自已的存储
package com.test1
object Scala09_test6{
def main(args: Array[String]): Unit = {
//测试
//健装的代码必须不断的测试,即在每次修改后都需要测试,需要
//为了源代码易于测试,我们创建自已的微型测试系统,目标是提供具备下列特性的最小化方法
//紧挨表达式的右测写出其预期结果,使用代码更容易理解
import java.util.logging._
trait Logging{
val log = Logger.getLogger(".")
}
/* class Cup{
var percentFull = 50
}
val c1 = new Cup
c1.percentFull=100
println(c1.percentFull)
val c2 = new Cup
println(c2.percentFull)*/
class Cups{
var percentFull = 0
val max = 100
def add(Increase:Int):Int={
percentFull += Increase
if(percentFull > max){
percentFull = max
}
percentFull
}
}
}
}
for循环
for循环遍历一个值序列,使用其中的每个值执行某些操作。for循环以关键字for开头,
package com.test1
object Scala09_test6{
def main(args: Array[String]): Unit = {
//测试
//健装的代码必须不断的测试,即在每次修改后都需要测试,需要
//为了源代码易于测试,我们创建自已的微型测试系统,目标是提供具备下列特性的最小化方法
//紧挨表达式的右测写出其预期结果,使用代码更容易理解
import java.util.logging._
trait Logging{
val log = Logger.getLogger(".")
}
/* class Cup{
var percentFull = 50
}
val c1 = new Cup
c1.percentFull=100
println(c1.percentFull)
val c2 = new Cup
println(c2.percentFull)*/
class Cups{
var percentFull = 0
val max = 100
def add(Increase:Int):Int={
percentFull += Increase
if(percentFull > max){
percentFull = max
}
percentFull
}
}
var result=""
for(i<-0 to 10){
result += i+" "
}
println(result)
result = ""
for(i <- 0 until 10 ){
result+=i+" "
}
println(result)
result = ""
for(i <- Range(0,10) ){
result+=i+" "
}
println(result)
result = ""
for(i <- Range(0,10,2) ){
result+=i+" "
}
println(result)
//增加一列
println(Range(0,10).inclusive)
//如果在红
for(i<- 1 to 10;if(i%2 == 0 )){println(i)}
for(i<- 1 to 10;if(i%2 == 0 )){println(i)}
//Vector
//Vector 是一个容器,即保存其他对象的对象,容器也称为集合
//verctor是标准scala包的一部分,因此不需要任何人就可以使用
println("========================================")
val v1 = Vector(1,3,5,6,11,13)
println(v1(4))
println("========================================")
var result1 = ""
for(i <- v1){
result1 += i+ " "
}
println(result1)
val v3 = Vector(1.1,2.2,3.3,4.4)
println(v3.reverse)
val v4 = Vector("Twas","Brilling","And","Slithy","Toves")
println(v4.sorted)
println(v4.head)
println(v4.tail(2 ))
//这里有些不同寻常的地方,创建所有Vector对象时都没有使用new关键字,为了方便起见
//scala允许
var v5:Vector[String]=Vector("Twas","Brilling","And","Slithy","Toves")
var v6=Vector(1,"111",2,22.22,333)
for(i <- Range('a','z').inclusive.reverse){
print( i.toChar )
}
var interVector:Vector[Int] = Vector(1,2,3,4,5,6,7,8,9)
var doubleVector:Vector[Double] = Vector(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9)
println("interVector.sum: "+interVector.sum)
println("interVector.min: "+interVector.min)
println("interVector.max: "+interVector.max)
println("========================================")
println("doubleVector.sum: "+doubleVector.sum)
println("doubleVector.min: "+doubleVector.min)
println("doubleVector.max: "+doubleVector.max)
val stringVector:Vector[String]=Vector("iit1","iit2","iit3","iit4","iit5","iit6","iit7","iit8")
println("========================================")
//println("stringVector.sum: "+stringVector.sum)
println("stringVector.min: "+stringVector.min)
println("stringVector.max: "+stringVector.max)
println(Range(1,100).toVector.sum)
println(Range(1,100).sum)
var myVector1:Vector[Int]=Vector(1,1,2,3,4,565,7)
var myVector2:Vector[Int]=Vector(1,1,2,3,4,565,7)
println(myVector1 == myVector2)
println(Set(1,2,2,3,4,5,6,7,8,88))
println(List(1,1,1,1,2,2,3,4,5,6,7,8,88))
}
}
更多条件表达式
package com.test1
object Scala09_test7{
def main(args: Array[String]): Unit = {
//更多的条件表达式
//让我们来练习如何创建方法,编写一些接受布尔类型参数的方法
def trueOrFalse(exp:Boolean):String={
if(exp){
"It's true"
}else{
"It's false"
}
}
val b = 1
println(trueOrFalse(b<3))
println(trueOrFalse(b>0))
val v = Vector(1)
val v2 = Vector(3,4)
println(trueOrFalse(v == v.reverse))
println(trueOrFalse(v2 == v2.reverse))
def checkTruth(exp1:Boolean,exp2:Boolean):String={
if(exp1 && exp2){
"Both are true"
}else if(!exp1 && !exp2){
"Both are false"
}else if(exp1){
"First:True ,second:false"
}else{
"First:True ,second:true"
}
}
println(checkTruth(true||false,true))
println(checkTruth(false||false,true))
println(checkTruth(true ,false))
println(checkTruth(false,true))
}
}