# Simplify this code?

Is there anyway this simplify this 5 line block?

``````                let delta = if *n > 1 {
(upper - lower) / ((n - 1) as f32)
} else {
0.0_f32
};
``````

here `n` is a `&usize`, thus our need for `*n` – but that is not what I want to simplify. What I want to say her eis:

if n is 1, then the delta is 0.0; otherwise, it’s (upper-lower)/(n-1).

This is where C style ternary `test? true_expr : false_expr` really comes in handy, or being able to drop the `{}`'s

In Rust, is there anyway to simplify this down to 1 line (besides writing a custom macro).

Thanks!

Not really any way to simplify it… But you can already put it on one line:

``````let delta = if *n > 1 {(upper - lower) / ((n - 1) as f32)} else {0.0_f32};
``````

And the C-like version wouldn’t be much shorter:

``````let delta = (*n > 1)? (upper - lower) / ((n - 1) as f32) : 0.0_f32;
``````

You can always put it into a function:

``````let delta = compute_delta(n, upper, lower);
``````
2 Likes

Name this and put in a separate function. It seems to me it does have a meaning (average/share?). A name will make it more clear, and you can even put a longer comment explaining what it is and what it does.

``````let delta = (upper - lower) / (usize::max(n - 1, 1) as f32);
``````

This is assuming you don’t add `delta` to anything when `n == 1` except when it is multiplied by `0`.

If you need to use it more than once, I’m with everyone else: just give it a function! It’s the interval between `n` equally spaced points, with the first at `lower` and the last at `upper`.

Moreover, the purpose of the `if` is to make it well-defined for the case of a single point. Can’t speak for why, but I do know this is a common need when working with polylines (e.g. `n=1` would be the case where a point is created for each vertex of a polyline; `n=10` is when a point is created for each vertex as well as 9 points in-between each pair; etc.)

This is clever+ You’re right, when n==1, I don’t use delta.