Discussion: Functions with many parameters #239
Replies: 11 comments 1 reply
|
My first thought would be, would it make sense for the parameters to be part of a struct that you construct and pass in? It would depend on what the actual parameters represent of course. Another option could potentially be the builder pattern. Something like this: foo()
.parameter_0(1)
.parameter_1(2)
.parameter_2(3)
.parameter_3(4)
.parameter_4(5)
.parameter_5(6)
.parameter_6(7)
.build();EDIT: See #64 for reasons against builder patterns for some use cases. |
And choose the parameter names well, so that you can maximize field puns. If you're okay with nightly then |
And how would you deal with mandatory parameters? |
I don't think I'd use it in that case. |
|
@longfellowone Do you have a required flow of the parameters? Then there could be multiple structs (like a state machine) to ensure them have each mandatory parameter. Like most of the http crates that we have, it is required to have a url before sending. |
foo("mandatory1", "mandatory2")
.parameter_0(1)
.parameter_1(2)
.parameter_2(3)
.parameter_3(4)
.parameter_4(5)
.parameter_5(6)
.parameter_6(7)
.build(); |
|
I am thinking about how to solve this issue. |
What I have is a mathematical calculation that requires about 7 mandatory parameters that have no reasonable defaults. And 5 parameters that are optional |
|
Put those 7 parameters in a struct and give the struct to foo |
|
Here's another idea: fn foo(
parameter_0: type,
parameter_1: type,
parameter_2: type,
parameter_3: type,
parameter_4: type,
parameter_5: type,
parameter_6: type
) -> type {
// function body
}that's what I've been doing in the years since I opened this |
|
Some thoughts:
pub struct FooDescriptor {
parameter_0: type,
parameter_1: type,
parameter_2: Option<type>,
parameter_3: type,
parameter_4: type,
parameter_5: type,
parameter_6: Option<type>,
}
impl Default for FooDescriptor {
// default()
}
fn foo(FooDescriptor) -> type {
// function body
}
fn main() {
let _ = foo(FooDescriptor::default());
}That would make it easy to use optional arguments, have the arguments in one place, and would make it possible to define default parameters. Examples: |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Requesting a design pattern for functions that take lots of parameters. For example this way:
is a way that I think should be an anti-pattern because it's too wide. I prefer things to be less than 80 chars wide.
All reactions