how to remove duplicate code in functional style
Alex
sascha.orlov at gmail.com
Fri Nov 23 15:07:36 UTC 2018
On Friday, 23 November 2018 at 14:33:40 UTC, berni wrote:
> I've got the following code, which works, but obviously
> contains duplication. Is there a way to move that
> "dissection_available?...:..." to the place, where it should be?
>
>> return dissection_available
>> ?solution.dup
>> .transposed.map!(a=>a.map!(b=>"?#."[b]).array)
>>
>> .zip(dissection.dup.transposed.map!(a=>a.map!(b=>"X#.?"[b]).array))
>> .map!(a=>a[0].to!string~" "~a[1].to!string)
>> .join("\n")
>> .to!string
>> :solution.dup
>> .transposed.map!(a=>a.map!(b=>"?#."[b]).array)
>> .join("\n")
>> .to!string;
>
> solution and dissection are of type const(int[][]).
Isn't the standard way of removing duplicate code in functional
style to write more small grained functions?
like
return solution
. initialCommonOperation
. someAction(dissection, dissection_available)
. finalCommonOperation;
auto commonInitialCommonOperation(T)(T input)
{
return
solution.dup.transposed.map!(a=>a.map!(b=>"?#."[b]).array);
}
auto someAction(T, A)(T tmp, A dissection, bool
dissection_available)
{
return dissection_available ?
tmp.zip(dissection.dup.transposed.map!(a=>a.map!
(b=>"X#.?"[b]).array))
.map!(a=>a[0].to!string~" "~a[1].to!string) : tmp;
}
auto finalCommonOperation(T)(T tmp)
{
return tmp.join("\n").to!string;
}
Don't know, if this compiles... but you get my point ;)
More information about the Digitalmars-d-learn
mailing list