Rust
녹 스타일 가이드
수색…
소개
공식 Rust 스타일 가이드는 없지만 다음 예제는 대부분 Rust 프로젝트에서 채택한 규칙을 보여줍니다. 이러한 규칙에 따라 프로젝트의 스타일을 표준 라이브러리의 스타일과 일치시켜 사람들이 코드에서보다 쉽게 논리를 볼 수있게합니다.
비고
공식적인 Rust 스타일 가이드 라인은 GitHub의 rust-lang/rust
저장소에서 사용할 수 있었지만 최근에는 rust-lang-nursery/fmt-rfcs
저장소로 마이그레이션 할 때까지 제거되었습니다. 새로운 가이드 라인이 게시 될 때까지 rust-lang
저장소의 가이드 라인을 따라야합니다.
rustfmt 및 clippy 를 사용하여 스타일 문제에 대한 코드를 자동 검토하고 올바르게 형식을 지정할 수 있습니다. 이러한 도구는 다음과 같이 Cargo를 사용하여 설치할 수 있습니다.
cargo install clippy
cargo install rustfmt
실행하려면 다음을 사용하십시오.
cargo clippy
cargo fmt
공백
선 길이
// 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!";
톱니 모양
// 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);
}
}
후행 공백
파일이나 줄 끝의 뒤 공백을 삭제해야합니다.
이진 연산자
// For clarity, always add a space when using binary operators, e.g.
// +, -, =, *
let bad=3+4;
let good = 3 + 4;
이것은 속성에도 적용됩니다 (예 :
// Good:
#[deprecated = "Don't use my class - use Bar instead!"]
// Bad:
#[deprecated="This is broken"]
세미콜론
// 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;
구조체 필드 정렬
// 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
}
함수 서명
// 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!
}
바지 멜빵
// 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 }
상자 만들기
전주곡 및 재수출
// 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;
때때로, 상자는 prelude
모듈을 사용하여 std::io::prelude
와 같이 중요한 구조체를 포함합니다. 일반적으로 use std::io::prelude::*;
수입품
다음과 같이 수입과 신고를 주문해야합니다.
-
extern crate
선언 - 수입품을
use
- 다른 상자에서 외부로 수입해야합니다
- 재수출 (
pub use
)
이름 지정
구조물
// 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 {
}
}
형질
// Traits use the same naming principles as
// structs (UpperCamelCase).
trait Read {
fn read_to_snafucator(&self) -> Result<(), Error>;
}
상자와 모듈
// 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 {
}
}
정적 변수 및 상수
// Statics and constants use SCREAMING_SNAKE_CASE.
const NAME: &'static str = "SCREAMING_SNAKE_CASE";
열거 형
// Enum types and their variants **both** use UpperCamelCase.
pub enum Option<T> {
Some(T),
None
}
함수 및 메소드
// Functions and methods use snake_case
fn snake_cased_function() {
}
변수 바인딩
// Regular variables also use snake_case
let foo_bar = "snafu";
일생
// 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
}
약어
TCP
와 같은 두문자어를 포함하는 변수 이름은 다음과 같이 스타일을 지정해야합니다.
-
UpperCamelCase
이름의 경우 첫 번째 문자 는 대문자이어야합니다 (예 :TcpClient
) -
snake_case
이름의 경우 대문자 사용이 없어야합니다 (예 :tcp_client
) -
SCREAMING_SNAKE_CASE
이름의 약어는 완전히 대문자이어야합니다 (예 :TCP_CLIENT
).
유형
주석 입력
// 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();
참고 문헌
// 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow