И снова привет хабру! Сегодня подправил 4 главу, исправил опять таки то, что режет слух. 4 глава уже лежит на гитхабе путь тот же. И вот как пример правленого перевода подраздел 4.2 Трейты:

4.2 Трейты

Трейты — это эквивалент интерфейсов из других языков (с некоторыми отличиями).

Так как определение термина через его синоним не очень полезно, посмотрим, что это означает в коде:

pub trait Dog {
    fn bark(&self) -> String;
}


pub struct Labrador{}


impl Dog for Labrador {
    fn bark(&self) -> String {
         "wouf".to_string()
    }
}


pub struct Husky{}

impl Dog for Husky {
    fn bark(&self) -> String {
         "Wuuuuuu".to_string()
    }
}


fn main() {
    let labrador = Labrador{};
    println!("{}", labrador.bark());


    let husky = Husky{};
    println!("{}", husky.bark());
}


// Output:


// wouf
// Wuuuuuu

Определив интерфейс Dog, все типы, реализующие этот трейт в нашей программе, будут считаться «собакой».

Именно поэтому говорят, что трейты (и интерфейсы) позволяют программистам определять разделяемое поведение: поведение, которое разделяется несколькими типами.

Остальные наработки и все остальное также можно найти у меня на гитхабе по ссылке https://github.com/smokeplay250-png/black-hat-ru