Zoeken…


Invoering

Hoewel er geen officiële gids in Rust-stijl is, geven de volgende voorbeelden de conventies weer die door de meeste Rust-projecten zijn overgenomen. Door deze conventies te volgen, wordt de stijl van uw project in lijn gebracht met die van de standaardbibliotheek, waardoor het voor mensen gemakkelijker wordt om de logica in uw code te zien.

Opmerkingen

De officiële richtlijnen in Rust-stijl waren beschikbaar in de rust-lang/rust repository op GitHub, maar ze zijn recentelijk verwijderd in afwachting van migratie naar de rust-lang-nursery/fmt-rfcs repository. Totdat er nieuwe richtlijnen zijn gepubliceerd, moet u proberen de richtlijnen in de rust-lang repository te volgen.

U kunt rustfmt en clippy gebruiken om uw code automatisch te controleren op stijlproblemen en deze correct op te maken. Deze tools kunnen als volgt met Cargo worden geïnstalleerd:

cargo install clippy
cargo install rustfmt

Om ze uit te voeren, gebruikt u:

cargo clippy
cargo fmt

Witte ruimte

Lijn lengte

// Lines should never exceed 100 characters. 
// Instead, just wrap on to the next line.
let bad_example = "So this sort of code should never really happen, because it's really hard to fit on the screen!";

deuk

// You should always use 4 spaces for indentation. 
// Tabs are discouraged - if you can, set your editor to convert
// a tab into 4 spaces.
let x = vec![1, 3, 5, 6, 7, 9];
for item in x {
    if x / 2 == 3 {
        println!("{}", x);
    }
}

Witruimte achter

Aan het einde van bestanden of regels moet witruimte worden verwijderd.

Binaire operatoren

// For clarity, always add a space when using binary operators, e.g.
// +, -, =, *
let bad=3+4;
let good = 3 + 4;

Dit geldt ook voor attributen, bijvoorbeeld:

// Good:
#[deprecated = "Don't use my class - use Bar instead!"]

// Bad:
#[deprecated="This is broken"]

puntkomma

// There is no space between the end of a statement
// and a semicolon.

let bad = Some("don't do this!") ;
let good: Option<&str> = None;

Structuurvelden uitlijnen

// Struct fields should **not** be aligned using spaces, like this:
pub struct Wrong {
    pub x  : i32,
    pub foo: i64 
}

// Instead, just leave 1 space after the colon and write the type, like this:
pub struct Right {
    pub x: i32,
    pub foo: i64
}

Functie handtekeningen

// Long function signatures should be wrapped and aligned so that
// the starting parameter of each line is aligned
fn foo(example_item: Bar, another_long_example: Baz, 
       yet_another_parameter: Quux) 
       -> ReallyLongReturnItem {
    // Be careful to indent the inside block correctly!
}

Een beugel

// The starting brace should always be on the same line as its parent.
// The ending brace should be on its own line.
fn bad()
{
    println!("This is incorrect.");
}

struct Good {
    example: i32
}

struct AlsoBad {
    example: i32 }

Kratten maken

Preludes en wederuitvoer

// To reduce the amount of imports that users need, you should
// re-export important structs and traits.
pub use foo::Client;
pub use bar::Server;

Soms gebruiken kratten een prelude module om belangrijke structuren te bevatten, net als std::io::prelude . Gewoonlijk worden deze geïmporteerd met use std::io::prelude::*;

invoer

U dient uw invoer en aangiften als volgt te bestellen:

  • extern crate
  • use invoer
    • Externe invoer uit andere kratten moet eerst komen
  • Wederuitvoer ( pub use )

Naming

structs

// Structs use UpperCamelCase.
pub struct Snafucator {
    
}

mod snafucators {
    // Try to avoid 'stuttering' by repeating 
    // the module name in the struct name.

    // Bad:
    pub struct OrderedSnafucator {
    
    }
      
    // Good:
    pub struct Ordered {
        
    }
}

Eigenschappen

// Traits use the same naming principles as 
// structs (UpperCamelCase).
trait Read {
    fn read_to_snafucator(&self) -> Result<(), Error>;
}

Kratten en modules

// Modules and crates should both use snake_case.
// Crates should try to use single words if possible.
extern crate foo;
mod bar_baz {
    mod quux {

    }
}

Statische variabelen en constanten

// Statics and constants use SCREAMING_SNAKE_CASE.
const NAME: &'static str = "SCREAMING_SNAKE_CASE";

enums

// Enum types and their variants **both** use UpperCamelCase.
pub enum Option<T> {
   Some(T),
   None
}

Functies en methoden

// Functions and methods use snake_case
fn snake_cased_function() {

}

Variabele bindingen

// Regular variables also use snake_case
let foo_bar = "snafu";

levens

// Lifetimes should consist of a single lower case letter. By 
// convention, you should start at 'a, then 'b, etc.

// Good:
struct Foobar<'a> {
    x: &'a str
}

// Bad:
struct Bazquux<'stringlife> {
    my_str: &'stringlife str
}

Acroniemen

Variabelenamen die acroniemen bevatten, zoals TCP moeten als volgt worden opgemaakt:

  • Voor UpperCamelCase namen moet de eerste letter een hoofdletter zijn (bijv. TcpClient )
  • Voor snake_case namen mag er geen hoofdlettergebruik zijn (bijvoorbeeld tcp_client )
  • Voor SCREAMING_SNAKE_CASE namen moet het acroniem volledig in hoofdletters worden weergegeven (bijvoorbeeld TCP_CLIENT )

Types

Typ annotaties

// There should be one space after the colon of the type
// annotation. This rule applies in variable declarations,
// struct fields, functions and methods.

// GOOD:
let mut buffer: String = String::new();
// BAD:
let mut buffer:String = String::new();
let mut buffer : String = String::new();

Referenties

// The ampersand (&) of a reference should be 'touching'
// the type it refers to.

// GOOD:
let x: &str = "Hello, world.";
// BAD:
fn fooify(x: & str) {
    println!("{}", x);
}

// Mutable references should be formatted like so:
fn bar(buf: &mut String) {

}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow