Conditional operator as a statement
-
@JonB I would have gone with a lambda function and a full switch case approach. We're dealing with enums after all, and it screams at me: "THIS WILL EXPAND TO MORE FILES!"
@J.Hilk said in Conditional operator as a statement:
lambda function and a full switch case approach
Nah....!! KISS!! :)
And for the record I wouldn't use a
switch
statement to return a simple value where there are only 2 explicit case and a default. Why write a multiline essay to pick between a couple of literal string values? Of course it's only IMHO, and each to their own.... -
@J.Hilk said in Conditional operator as a statement:
lambda function and a full switch case approach
Nah....!! KISS!! :)
And for the record I wouldn't use a
switch
statement to return a simple value where there are only 2 explicit case and a default. Why write a multiline essay to pick between a couple of literal string values? Of course it's only IMHO, and each to their own.... -
@J.Hilk I agree.
And personally I find a couple of? :
s, in one line, as more readable than a multiple lineswitch
statement and a lambda. Each to their own :)auto winter_stats_filename = [](int year, Type type) -> std::string { const char* suffix = "mean"; // Fallback switch (type) { case Type::MIN: suffix = "min"; break; case Type::MAX: suffix = "max"; break; case Type::MEAN: suffix = "mean"; break; default: assert(false && "winter_stats_filename: unexpected Type value"); break; } return "stats-" + std::to_string(year) + "-winter-" + std::string(suffix) + ".csv"; }; std::ifstream in_winter(winter_stats_filename(year, type));
I agree, sometimes I have the correct opinion and sometime the others have to wrong opinion :P
-
auto winter_stats_filename = [](int year, Type type) -> std::string { const char* suffix = "mean"; // Fallback switch (type) { case Type::MIN: suffix = "min"; break; case Type::MAX: suffix = "max"; break; case Type::MEAN: suffix = "mean"; break; default: assert(false && "winter_stats_filename: unexpected Type value"); break; } return "stats-" + std::to_string(year) + "-winter-" + std::string(suffix) + ".csv"; }; std::ifstream in_winter(winter_stats_filename(year, type));
I agree, sometimes I have the correct opinion and sometime the others have to wrong opinion :P
@J.Hilk
To pick whether you wantmin
,max
ormean
in a string I have to read through 10 lines of your code (and check a lambda for sanity to add to it). Madness! :)I can grasp
var amount = (type == MIN) ? "min" : (type == MAX) ? "max" : "mean";
at a single glance.
(Yes, I know you have added enum-range checking in your code which adds a few lines compared to mine.)
-
@J.Hilk
To pick whether you wantmin
,max
ormean
in a string I have to read through 10 lines of your code (and check a lambda for sanity to add to it). Madness! :)I can grasp
var amount = (type == MIN) ? "min" : (type == MAX) ? "max" : "mean";
at a single glance.
(Yes, I know you have added enum-range checking in your code which adds a few lines compared to mine.)
-
@J.Hilk Fair enough! But what is "an Undertale rash", Google talks about it in some game but that's it?
-
I really don't like lambdas used like this. Pack it in a function and you first have to go to the end of it to see what it's doing and then go back up to see how it is doing it. Have 2 or 3 of those in a function and the flow is completely ruined - you have to jump around and scroll multiple screens up and down to figure out what's going on.
I'm with @JonB on this - readability doesn't mean verbosity. Often fewer words express the intent better than paragraphs of syntax with sprinkles of what the code is actually doing. -
@JonB Undertale is a game that’s kind of infamous among programmers for having huge, messy if-else chains in its code.
So when I say “Undertale rash,” I mean I get an allergic reaction to code that looks like that@J.Hilk said in Conditional operator as a statement:
So when I say “Undertale rash,” I mean I get an allergic reaction to code that looks like that
Not knowing about the game or its code, I wondered if you intended "Undertail rash" and were thinking of a rash on your private back bits! :)