97

Made with KolourPaint and screenshots from Kate (with the GitHub theme).

you are viewing a single comment's thread
view the rest of the comments
[-] ThirdConsul@lemmy.ml 5 points 1 month ago

To be honest I always disliked variable declaration without value assignment, so to me both options suck. :)

[-] notarobot@lemm.ee 5 points 1 month ago* (last edited 1 month ago)

What about

Let ret: Number
If (someCondition) {
    <a lot of expensive calculations>
    ret = resultOfOperations
} else {
    <a lot of other different expensive operations>
    ret = resultOfOtherOperations
}
return ret

You can't declare ret inside the brackets

[-] ferric_carcinization@lemmy.ml 5 points 1 month ago

Rust would allow you to

let ret = if some_condition {
    <a lot of expensive calculations>
    result_of_operations
} else {
    <a lot of other different expensive calculations>
    result_of_other_operations
};

Now you don't have to declare it inside the blocks.

[-] barubary@infosec.exchange 5 points 1 month ago

Similarly, Perl lets you say

my $ret = do {    if (...) {        ...    } else {        ...    }};
[-] notarobot@lemm.ee -3 points 1 month ago
[-] ferric_carcinization@lemmy.ml 4 points 1 month ago

What's disgusting about it? The only thing I can think of is the implicit return, which felt a bit icky at first.

Also, as the if expression is an expression, you can call methods on it like so:

if 1 > 2 {
    3
} else {
    4
}.min(5)

(the above is still an expression, so it could be used, for example, as part of a condition for another if)

Of course, you can write horrible code in any language, but the ability to use blocks where expressions are expected can be great sometimes.

[-] Ephera@lemmy.ml 3 points 1 month ago

It's the same thing as ternary, just without the ? : syntax.

[-] ThirdConsul@lemmy.ml 4 points 1 month ago
let ret = someCondition ? expensiveOperation() : otherOperation() 

?

[-] notarobot@lemm.ee 2 points 1 month ago

Yeah. That works.

[-] racketlauncher831@lemmy.ml 2 points 1 month ago

What about you declare (then it gets allocated in stack) it and pass it to a different context for assignment?

[-] ThirdConsul@lemmy.ml 2 points 1 month ago* (last edited 1 month ago)

Well, I don't know your use case well enough, but I guess you might have perfect reason for that behavior.

One thing that comes to my mind is the old Try in C#

bool parsedSuccessfully = int.TryParse("123", out int result);

But I guess more popular approach would be to use Error as Values, right?

E.g. something like this

Outcome<Exception, Int> result = int.TotallyNewParse("123");
[-] racketlauncher831@lemmy.ml 3 points 1 month ago
[-] ThirdConsul@lemmy.ml 2 points 1 month ago

Great example.

Wouldn't getchar() be more appropriate here? Last time I used C it was 16 years ago.

[-] racketlauncher831@lemmy.ml 3 points 1 month ago

Yes, and no, sir, you missed the point. The procedure here is to allocate then give away, not reading a fixed-length returned value.

Say you can only afford to have ten bytes in the stack. You allocate char s[10]; then give it to a library to parse something. Also telling it to abort if it's going to be longer than ten bytes, of course.

this post was submitted on 19 Jun 2025
97 points (87.0% liked)

Programmer Humor

37637 readers
295 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 6 years ago
MODERATORS