about summary refs log tree commit diff
path: root/docs/dev
diff options
context:
space:
mode:
authorAleksey Kladov <aleksey.kladov@gmail.com>2020-10-14 20:02:03 +0200
committerAleksey Kladov <aleksey.kladov@gmail.com>2020-10-14 20:02:03 +0200
commit9c285b0341fcf5ce9e15821da20727a313624497 (patch)
tree2e73cabbf233019601f8f19c8c38625f10305ca8 /docs/dev
parent84d6cdef86dfe1054ecafaedfddbf90a2b3a469d (diff)
downloadrust-9c285b0341fcf5ce9e15821da20727a313624497.tar.gz
rust-9c285b0341fcf5ce9e15821da20727a313624497.zip
Style: default over new
Diffstat (limited to 'docs/dev')
-rw-r--r--docs/dev/style.md25
1 files changed, 25 insertions, 0 deletions
diff --git a/docs/dev/style.md b/docs/dev/style.md
index 59067d23460..435de63e3bd 100644
--- a/docs/dev/style.md
+++ b/docs/dev/style.md
@@ -186,6 +186,31 @@ impl Person {
 }
 ```
 
+## Constructors
+
+Prefer `Default` to zero-argument `new` function
+
+```rust
+// Good
+#[derive(Default)]
+struct Foo {
+    bar: Option<Bar>
+}
+
+// Not as good
+struct Foo {
+    bar: Option<Bar>
+}
+
+impl Foo {
+    fn new() -> Foo {
+        Foo { bar: None }
+    }
+}
+```
+
+Prefer `Default` even it has to be implemented manually.
+
 ## Avoid Monomorphization
 
 Rust uses monomorphization to compile generic code, meaning that for each instantiation of a generic functions with concrete types, the function is compiled afresh, *per crate*.