From 6976494781f810193535eebc73e5bda73ba9eddf Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 7 Oct 2020 12:57:49 +0200 Subject: Add comparisons guideline to style --- docs/dev/style.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/dev/style.md b/docs/dev/style.md index 17626f3fd..cc06d4122 100644 --- a/docs/dev/style.md +++ b/docs/dev/style.md @@ -144,6 +144,20 @@ fn foo() { In the "Not as good" version, the precondition that `1` is a valid char boundary is checked in `is_string_literal` and used in `foo`. In the "Good" version, the precondition check and usage are checked in the same block, and then encoded in the types. +When checking a boolean precondition, prefer `if !invariant` to `if negated_invariant`: + +```rust +// Good +if !(idx < len) { + return None; +} + +// Not as good +if idx >= len { + return None; +} +``` + ## Getters & Setters If a field can have any value without breaking invariants, make the field public. @@ -382,6 +396,19 @@ fn foo() -> Option { } ``` +## Comparisons + +Use `<`/`<=`, avoid `>`/`>=`. +Less-then comparisons are more intuitive, they correspond spatially to [real line](https://en.wikipedia.org/wiki/Real_line) + +```rs +// Good +assert!(lo <= x && x <= hi); + +// Not as good +assert!(x >= lo && x <= hi>); +``` + ## Documentation For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines. -- cgit v1.2.3