Conditional Expressions and Statements : 08/24/2023
Operations on Variables : 08/23/2023
Variables and Types : 08/22/2023
Welcome to CS 124 : 08/21/2023
Anonymous Classes
interfaceAdder{
funaddTo(value:Int):Int
}
valaddOne=object: Adder {
overridefunaddTo(value:Int)=value+1
}
valaddEight=object: Adder {
overridefunaddTo(value:Int)=value+8
}
println(addOne.addTo(1))
println(addEight.addTo(1))
println(addOne.addTo(8))
This lesson ventures into interesting uncharted territory.
Until now, our classes have needed to have names.
But Kotlin doesn’t actually require this!
Let’s explore anonymous classes and their uses…
Please note that the next two lessons are on fairly advanced topics.
You will see and need to understand code that uses these ideas, but testing on them will be limited.
Anonymous classes can capture the value of variables that are available when they are created.
This can be extremely useful, even if the results are a bit spooky.
Let’s look at an example:
We can create anonymous classes in Kotlin.
Cool!
But… so what!?
What problems can these classes solve?
Surprisingly, anonymous classes turn out to be common and quite powerful.
Let’s look at an example.
Imagine that we want to count the number of elements in an array of Ints that meet some condition.
The condition could be that the element was positive, or negative, or odd, or even, or divisible by three, or whatever.
One approach would be to write separate methods for each thing we would want to count:
funcountArrayPositive(values:Array<Int>):Int{
varcount=0
for(valueinvalues){
if(value>=0){
count++
}
}
returncount
}
funcountArrayNegative(values:Array<Int>):Int{
varcount=0
for(valueinvalues){
if(value<0){
count++
}
}
returncount
}
funcountArrayEven(values:Array<Int>):Int{
varcount=0
for(valueinvalues){
if(value%2==0){
count++
}
Wow, this is getting tedious—and we’ve only done three!
Imagine if we had a bunch of different conditions we needed to handle…
But they are all very similar.
There must be a better way.
Let’s see how to rewrite the code above using an anonymous class in a way that makes the counting logic completely flexible.
funcountArrayPositive(values:Array<Int>):Int{
varcount=0
for(valueinvalues){
if(value>=0){
count++
}
}
returncount
}
funcountArrayNegative(values:Array<Int>):Int{
varcount=0
for(valueinvalues){
if(value<0){
count++
}
}
returncount
}
valarray=arrayOf(1,2,5)
println(countArrayPositive(array))
Practice: Bracket an Anonymous Class
Created By: CS 124 Staff
/ Version: 2020.10.0
Declare a method create.
create takes a single Int parameter and returns an anonymous object that implements the Bracket interface:
The returned object should implement top so that it returns the passed Int and bottom so that it returns the
passed Int * -1.
So, for example:
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Practice: String Both Ways Anonymous Class
Created By: CS 124 Staff
/ Version: 2021.10.0
Declare a method create.
create takes a single String parameter and returns an anonymous object that implements the IBothWays interface:
So, for example:
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Homework: Which Hemisphere Anonymous Class
Created By: CS 124 Staff
/ Version: 2022.10.0
Create a method named create that accepts a Position object and returns an anonymous object that implements
the IWhichHemisphere interface:
The return values of isNorthern and isSouthern are determined by the latitude value on the passed Position
object, which you can retrieve as a Doublelatitude property.
Here's how your class should work:
However, note that the latitude values of the passed Position object can change after it is passed to your
method!
So you should not precompute the results of isNorthern and isSouthern, but rather calculate them in your
anonymous class when the corresponding methods are called.
We define any position with a positive latitude as being in the Northern Hemisphere, and with a negative latitude
as being in the Southern Hemisphere.
Meaning, for the purposes of this problem, points on the equator are in neither hemisphere.
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Shoshana Zuboff is an author and professor at the Harvard Business School, where she was the first tenured female professor.
She may be best known for coining the term “surveillance capitalism”, and for her book “The Age of Surveillance Capitalism”, which outlines a global system of behavioral modification based on the collection and mining of data about our private lives.
In the short video below Shoshana Zuboff defines surveillance capitalism and discusses how it mirrors and differs from previous eras of capitalism: