this post was submitted on 23 Sep 2024
15 points (85.7% liked)

Rust Programming

8134 readers
1 users here now

founded 5 years ago
MODERATORS
 

Which of these code styles do you find preferable?

First option using mut with constructor in the beginning:

  let mut post_form = PostInsertForm::new(
    data.name.trim().to_string(),
    local_user_view.person.id,
    data.community_id,
  );
  post_form.url = url.map(Into::into);
  post_form.body = body;
  post_form.alt_text = data.alt_text.clone();
  post_form.nsfw = data.nsfw;
  post_form.language_id = language_id;

Second option without mut and constructor at the end:

  let post_form = PostInsertForm {
    url: url.map(Into::into),
    body,
    alt_text: data.alt_text.clone(),
    nsfw: data.nsfw,
    language_id,
    ..PostInsertForm::new(
      data.name.trim().to_string(),
      local_user_view.person.id,
      data.community_id,
    )
  };

You can see the full PR here: https://github.com/LemmyNet/lemmy/pull/5037/files

you are viewing a single comment's thread
view the rest of the comments
[–] nutomic@lemmy.ml 5 points 1 month ago (11 children)

@DemocratPostingSucks@lemm.ee @Deebster@programming.dev @al4s@feddit.org Thanks for the feedback! Personally I prefer the first option, but based on your comments I will merge the PR with the second option.

[–] al4s 13 points 1 month ago (10 children)

If you're ever forced to do something the second way, you can also wrap it in braces, that way you end up with an immutable value again:

let app = {
  let mut app = ...
  ...
  app
};
[–] taladar@sh.itjust.works 1 points 1 month ago (3 children)

Why not just a let app = app; line after the let mut app = ...; one?

[–] al4s 2 points 1 month ago (2 children)

A scope groups the initialization visually together, while adding the let app = app; feels like it just adds clutter - I'd probably just leave it mut in that case.

[–] BB_C@programming.dev 3 points 1 month ago

Rebinding with and without mut is a known and encouraged pattern in rust. Leaving things as mut longer than necessary is not.

[–] taladar@sh.itjust.works 1 points 1 month ago

But a scope adds a nesting level which adds a lot more visual clutter.

load more comments (6 replies)
load more comments (6 replies)