# Rust - Apa Itu Trait ?

Traits adalah salah satu fitur dalam pemrogramman Rust, yang mana ketika ditranslate dalam bahasa Indonesia sendiri artinya sifat - sifat, tapi apa maksudnya?. Dengan adanya Traits ketika memprogram dalam Rust kita dapat mendefinisikan sifat/prilaku/behavior yang nantinya dapat dibagikan dan digunakan untuk berbagai tipe data.

> Jika dalam bahasa pemrograman Java traits ini mirip dengan interface

Pada Rust traits di deklaraikan dengan keyword `traits` yang berisi header nama traits dan kontrak fungsi atau methodnya contoh

```rust
trait NamaTrait {
    fn nama_fungsi(&self, params) -> return_type;
    ...
}
```

Traits biasanya di implentasikan pada *struct* atau tipe data lain menggunakan blok `impl`, contoh:

```rust
trait Description {
    fn info(&self) -> String;
}

struct Animal {
    name: String,
    age: u8,
}

impl Description for Animal {
    fn info(&self) -> String {
        format!("name {} and age {}", self.name, self.age)
    }
}

struct Human {
    name: String,
    pet: Animal,
}

impl Description for Human {
    fn info(&self) -> String {
        format!("Person name {} has pet {}", self.name, self.pet.info())
    }
}

fn main() {
    let dog = Animal {
        name: String::from("husk"),
        age: 1
    };

    let jane_doe = Human {
        name: String::from("Jane Doe"),
        pet: dog
    };

    println!("{}", jane_doe.info());
}

```
