Download CS3710 Voca`onal Languages Scala Class Review Class

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Scala Class Review •  Every class has a primary constructor which is defined with the class defini,on. CS3710 Voca,onal Languages November 19, 2012 Class Inheritance •  Like Java, Scala use extends to create a sub-­‐class scala> class Employee (name: String, age: Int, var
salary: Double) extends Person (name, age){}
//super-class constructor is called before calling the
sub-class constructor
//Employee has 3 instance variables, 2 of them are
inherited from Person class.
defined class Employee
scala> val Tom=new Employee("Tom",18,0.0)
Tom: Employee = Employee@73a2335d
scala> Tom.name
res0: String = Tom
scala> Tom.age
res1: Int = 18
scala> Tom.salary
res2: Double = 0.0
scala> class Person(val name: String, var age: Int){}
//define a class, its primary constructor and two
instance variables.
defined class Person
scala> val John=new Person("John",20);
scala> John.name
res25: String = John
scala> John.age
res27: Int = 20
scala> John.age=30
John.age: Int = 30
scala> John.name="Jo"
<console>:10: error: reassignment to val
John.name="Jo"
Overriding Fields and Methods •  The top of the Scala class hierarchy is Scala.AnyRef, which all Scala classes inherit directly or indirectly. •  The keyword override is required to override an instance variable or a method: scala> class SecretAgent(val codename: String,
age: Int) extends Person(codename,age){override
val name="secret"; override val
toString="unknown"}
defined class SecretAgent
scala> val OO7=new SecretAgent("OO7",100)
OO7: SecretAgent = unknown
scala> OO7.name
res6: java.lang.String = secret
scala> OO7.codename
res7: String = OO7
1 Abstract Class •  Similar to Java, an abstract class can not be instan,ated, usually because one or more of its methods are not defined. abstract class Person (val name:
String, var age:Int){
def id: Int
//no method body, hence an
abstract method, the abstract
keyword is not needed
}
PaUern Matching •  Scala match is a beUer Java switch
//Java/C:
switch (ch) {
case ‘+’: sign=1;
break;
case ‘-’: sign=-1;
break;
default: sign=0;
}
//Scala:
ch match {
case ’+’ => sign=1
case ‘-’ => sign=-1
case _ => sign=0
}
//case _ is
equivalent to
default.
//no need to use
break
Extends Abstract Class •  A subclass that extends an abstract class needs to define all abstract methods in its class defini,on: scala> class Student(name: String, age:
Int) extends Person(name,age){def
id=name.hashCode //override keyword
is not required}
defined class Student
scala> val s1=new Student("Bob",18)
s1: Student = Student@29011f1f
scala> s1.id
res8: Int = 66965
Variables in Matching PaUern •  If the case keyword is followed by a variable name, the match expression is assigned to that variable: var str=…
for(i=0 to i.length)
str(i) match {
case ’+’ => sign=1
case ‘-’ => sign=-1
case ch => digit=Character.digit(ch,
10)//convert char digit to value
}// ch=‘3’, digit = 3
2 Case Classes •  Case classes are a special kind of classes that are defined to use in paUern matching. abstract class Expr //Expr is an abstract class
case class Number(n: Double) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
// Number and Sum are case classes.
val e =Expr()//?
//e1, e2, e3, e4 are case objects. val e1=Number(10) //e1 is 10
val e2=Sum(e1,Number(2)) //e2 is 10+2
val e3=Sum(e2,e2) //e3 is?
val e4=Sum(e1,e3) //e4 is?
PaUern Matching for Case Object def eval(e: Expr):Double= e match{
case Number(n) => n
case Sum(e1,e2) => eval(e1)+eval(e2)
}
eval(e1)//?
eval(e2)//?
eval(e3)//?
eval(e4)//?
Trace Recursive Calls def eval(e: Expr):Double= e match{
case Number(n) => {println(n); n}
case Sum(e1,e2) => {println(e1+", "+e2); eval
(e1)+eval(e2)}
}
Val e=Sum(Sum(Number(1),Number(2)),Number(3))
eval(e)//?
Assignment 8 •  Extend the Expr with the following case classes: • 
• 
• 
• 
• 
Subtract Mul,ply Divide Abs Mod •  Extend the eval func,on to interpret the extended Expr.
3