Traits

4 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$69.99
List Price:  $99.99
You save:  $30
€66.45
List Price:  €94.93
You save:  €28.48
£55.32
List Price:  £79.03
You save:  £23.71
CA$98.04
List Price:  CA$140.06
You save:  CA$42.02
A$107.72
List Price:  A$153.89
You save:  A$46.17
S$94.09
List Price:  S$134.42
You save:  S$40.33
HK$544.68
List Price:  HK$778.15
You save:  HK$233.46
CHF 61.92
List Price:  CHF 88.46
You save:  CHF 26.54
NOK kr774.79
List Price:  NOK kr1,106.89
You save:  NOK kr332.10
DKK kr495.67
List Price:  DKK kr708.13
You save:  DKK kr212.46
NZ$118.82
List Price:  NZ$169.76
You save:  NZ$50.93
د.إ257.07
List Price:  د.إ367.26
You save:  د.إ110.19
৳8,339.40
List Price:  ৳11,913.94
You save:  ৳3,574.54
₹5,914.23
List Price:  ₹8,449.26
You save:  ₹2,535.03
RM311.24
List Price:  RM444.65
You save:  RM133.41
₦118,083.62
List Price:  ₦168,698.12
You save:  ₦50,614.50
₨19,391.36
List Price:  ₨27,703.14
You save:  ₨8,311.77
฿2,410.17
List Price:  ฿3,443.25
You save:  ฿1,033.08
₺2,423.71
List Price:  ₺3,462.60
You save:  ₺1,038.88
B$418.75
List Price:  B$598.25
You save:  B$179.49
R1,273.04
List Price:  R1,818.71
You save:  R545.66
Лв129.87
List Price:  Лв185.54
You save:  Лв55.66
₩97,732.12
List Price:  ₩139,623.30
You save:  ₩41,891.18
₪255.55
List Price:  ₪365.09
You save:  ₪109.53
₱4,110.61
List Price:  ₱5,872.56
You save:  ₱1,761.94
¥10,630.43
List Price:  ¥15,186.98
You save:  ¥4,556.55
MX$1,418.07
List Price:  MX$2,025.91
You save:  MX$607.83
QR254.36
List Price:  QR363.39
You save:  QR109.02
P953.37
List Price:  P1,362.02
You save:  P408.64
KSh9,063.70
List Price:  KSh12,948.70
You save:  KSh3,885
E£3,478.89
List Price:  E£4,970.06
You save:  E£1,491.16
ብር8,820.94
List Price:  ብር12,601.88
You save:  ብር3,780.94
Kz63,759.63
List Price:  Kz91,089.09
You save:  Kz27,329.46
CLP$68,404.72
List Price:  CLP$97,725.22
You save:  CLP$29,320.50
CN¥507.53
List Price:  CN¥725.08
You save:  CN¥217.54
RD$4,206.74
List Price:  RD$6,009.89
You save:  RD$1,803.14
DA9,351.13
List Price:  DA13,359.34
You save:  DA4,008.20
FJ$158.85
List Price:  FJ$226.94
You save:  FJ$68.09
Q538.41
List Price:  Q769.20
You save:  Q230.78
GY$14,600.65
List Price:  GY$20,858.96
You save:  GY$6,258.31
ISK kr9,615.92
List Price:  ISK kr13,737.62
You save:  ISK kr4,121.70
DH699.24
List Price:  DH998.96
You save:  DH299.72
L1,281.52
List Price:  L1,830.82
You save:  L549.30
ден4,084.06
List Price:  ден5,834.63
You save:  ден1,750.56
MOP$559.24
List Price:  MOP$798.95
You save:  MOP$239.71
N$1,266.15
List Price:  N$1,808.86
You save:  N$542.71
C$2,568.06
List Price:  C$3,668.81
You save:  C$1,100.75
रु9,427.87
List Price:  रु13,468.97
You save:  रु4,041.09
S/262.66
List Price:  S/375.25
You save:  S/112.58
K281.39
List Price:  K402.01
You save:  K120.61
SAR262.91
List Price:  SAR375.60
You save:  SAR112.69
ZK1,903.42
List Price:  ZK2,719.29
You save:  ZK815.86
L330.70
List Price:  L472.45
You save:  L141.75
Kč1,679.39
List Price:  Kč2,399.23
You save:  Kč719.84
Ft27,552.80
List Price:  Ft39,362.83
You save:  Ft11,810.03
SEK kr765.72
List Price:  SEK kr1,093.94
You save:  SEK kr328.21
ARS$70,549.59
List Price:  ARS$100,789.45
You save:  ARS$30,239.85
Bs482.26
List Price:  Bs688.98
You save:  Bs206.71
COP$307,907.55
List Price:  COP$439,886.78
You save:  COP$131,979.23
₡35,643.95
List Price:  ₡50,922.11
You save:  ₡15,278.16
L1,765.02
List Price:  L2,521.57
You save:  L756.54
₲545,488.80
List Price:  ₲779,303.12
You save:  ₲233,814.31
$U2,997.83
List Price:  $U4,282.79
You save:  $U1,284.96
zł286.31
List Price:  zł409.03
You save:  zł122.72
Already have an account? Log In

Transcript

Traits. traits are similar to interfaces and other languages and they're really cool rust takes the composition over inheritance approach. Remember our red fox struct? Let's make a trait called noisy traits define the required behavior. In other words, functions and methods that a struct must implement if it wants to have that trait. The noisy trade specifies that the struct must have a method named get noise that returns a borrowed string slice if the struct wants to be noisy.

So let's add an implementation of the noisy trait for red fox. Let's take a look at how this works. We implement the noisy trait for the red fox struct. And our implementation of the required get noise method is Meow, which is all great, but why bother? We could have just implemented that method for red fox directly with without involving a trade at all, the answer is that once we have a trait involved, we can start writing generic functions that accept any value that implements the trait. This function takes an item of type t, which is defined to be anything that implements the noisy trait, the function can use any behavior on an item that the noisy trade defines.

So now we have a generic function that can take any type, as long as it satisfies the noisy trade. That's pretty cool. As long as one of either the trait or the struct is defined in your project, you can implement any trade for any struct. That means you can implement your traits on any types from anywhere, including built ins or types you import from some other package. And on your struct, you can implement any trait whether built in or from some project. Here I've implemented the noisy trait for the built in type ua, which is a byte.

So our generic print noise function works just fine with it. Now, there's a special trait called copy. If your type implements copy, then it will be copied instead of moved in move situations. This makes sense for small values that fit entirely on the stack, which is why the simple primitive types like integers, floats, and Booleans implement copy. If a type uses the heap at all, then it cannot implement copy. You can opt into implementing copy with your own type if your type only uses other copy types.

Okay, let's go through an example of where traits really seem to shine. Let's say we have a game with a goose, a Pegasus and a horse. These have several attributes in common these two can fly, these two can be written and these two explode. You can see how it could get really tricky to use object inheritance to define the correct behavior that each final object needs to have. But it's pretty straightforward with traits. The goose implements the fly and explode traits the Pegasus implements Fly and ride traits and the horse implements the ride and explode traits.

And we're all happy. It's interesting to note that traits implement inheritance. So a trait can inherit from another trait that makes it possible to have a trait inheritance hierarchy like this, where movement is the root trait, Ron inherits from movement, and so on. Let's say we have a separate damage trait hierarchy with a damage parent trait and an explode child trait, then a horse struct, the implements ride and explode also has to implement the parent traits movement run and damage. Making your trait inherit from a parent trait really just means that anyone who implements your trait is going to have to implement the parent traits as well. traits can also have default behaviors.

So if you design structs and traits carefully enough, you might not have to implement some of the trade methods at all. If you want to implement default trade behavior inside your trade definition. Instead of ending your function or method definition with a semicolon, add a block with your default behavior. Then when you implement the trait for your struct just don't provide a new definition for the method whose default implementation you want to use. The presence of an implementation will override the default. This is a fully functional example, the robot struct in the middle implements the run trait, but it doesn't override the default run method.

So when robot run is called from main at the bottom, it executes the default run method defined on the trait at the top and prints I'm running. One gotcha I really ought to mention, you can't define fields as part of trades that may be added in the future if someone can figure out the right way to do it. In the meantime, the workaround is to define setter and getter methods in your trade. In the next video, we will go over some of the collections in the standard library

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.