Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
In this video we'll learn about one of my favorite aspects of Kotlin!
Kotlin Links
Project Files
The music is from Kevin MacLeod. If you're ever looking for excellent freely available music check out his website; it's awesome!
Attribution:
Fanfare for Space Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 3.0 License http://creativecommons.org/licenses/by/3.0/
Changes were made.
We've finished up our foundation object,
but
0:00
rather than move right on to our tableau
object, let's see how we can stop
0:02
typing out the entire string every
time we want to refer to a suit.
0:06
To do this, we'll create a string
property for each suit and
0:10
then use this property in both
our deck and game model classes.
0:14
And since the suit is a property of the
card, let's declare these new properties,
0:18
and our card class.
0:23
In Java, we would do this
by using a static variable.
0:24
But in Collin there's no static anything.
0:28
Instead, Collin has companion objects.
0:31
Check it out.
0:35
Let's first add back in the brackets for
our class.
0:36
Then inside the brackets,
0:40
let's declare a companion object
by typing, companion object.
0:42
And then, adding brackets.
0:47
Each class can only have
one companion object and
0:50
the companion object is basically
just a place where we put
0:54
anything that would have
been static in Java so,
0:57
inside this companion object is where will
be creating the properties for our suits.
1:00
Let's start with the clubs property,
1:05
val clubs = Clubs then we'll
do the diamonds property.
1:08
= Diamonds.
1:14
And the hearts property.
1:17
And finally, the spades property.
1:22
Now that we have our properties,
1:27
we can use them to replace the string
literals in our game model and our deck.
1:29
Let's head over to our
game model class and
1:33
replace these string literals with
the properties we just created.
1:35
Card.clubs instead of diamonds.
1:43
It will be Card.diamonds.
1:48
Card.hearts and Card.spades.
1:55
And let's do the same thing for
a Deck class.
2:03
So instead of Clubs, We'll use Card.clubs.
2:06
And Card.diamonds.
2:15
Card.hearts.
2:21
And Card.spades.
2:23
Nice.
2:26
It's looking pretty good, right?
2:27
But there is one thing I
don't like about it, and
2:29
that's all these little card dot parts.
2:31
This project, and cards in general, are
only ever going to have one clubs object.
2:35
Wouldn't it be nice if we could
omit the class it belongs to?
2:42
Maybe, but
we can't do that to access a property and
2:45
a companion object you need to
start with the class it's in.
2:49
So instead let's head over
to the card class and
2:53
see one small step we can
take to make it better.
2:57
Let's start by cutting out all of our
properties from the companion object.
3:00
And then, deleting the companion object.
3:06
Next, I want you to take a deep breath and
3:09
prepare to go where no Java
developer has gone before.
3:12
Into a world outside of classes,
where functions and
3:17
properties can exist without
the shackles of a class.
3:21
Let us boldly go beyond
the bounds of our card class,
3:25
as we please back in our problem not
the citizens of the current class but
3:30
as citizens of our entire apps package.
3:36
Now, let's jump back to our deck class and
3:40
get rid of those card dots once and
for all.
3:42
And let's do the same thing for
our game model class.
3:49
And cotland whenever we
declare a property or
3:57
a function outside of the class,
it gets scoped to the entire package.
4:00
Meaning we can just use it from
anywhere within that package.
4:06
It also means that there's nothing
special about this card class,
4:09
we could declare these properties
in the App class instead.
4:13
And that would be just fine.
4:17
And look, the main function's
not part of a class either.
4:19
That said, it does make more sense to
store these properties in the Card File.
4:23
But before we add them back,
notice the icon next to our card class.
4:28
It's the class icon.
4:33
Now, let's cut, and paste our
properties back into our card class.
4:35
And look at that!
4:43
The icon changed to the file icon.
4:44
Since card.kt contains more
than just the card class
4:47
IntelliJ decides to show us the file icon,
instead of the class icon.
4:53
It's not a big deal, but
at least now you know why it's happening.
4:57
Being able to declare properties and
5:01
functions with package level scope
is a huge boon to our development.
5:03
It lets us write less code and
opens entirely new doors for
5:08
how we can structure our projects.
5:11
It might take a little getting used to but
trust me it's well worth it.
5:13
In the next video, we'll pick up where
we left off with creating an object
5:18
to represent a tableau pile.
5:21
You need to sign up for Treehouse in order to download course files.
Sign up