Remix.run Logo
gus_massa 5 days ago

Thanks. I missed it.

I really dislike that, because it hides the control flow too much. Perhaps I'm biased by Racket, where it's easy to define something weird using macros, but you should not do unexpected weird things.

For example you can define vector-set/drop that writes a value to a position of a vector, but ignores the operation when the position is outside the vector. For example

  (vector-set/drop v -2 (print "banana"))
With a macro is possible to skip (print "banana") because -2 is clearly out of range, but if you do that everyone will hate you.
ygra 5 days ago | parent [-]

I think in the context of C# this is not exactly unexpected since there are various operators that apply conditional execution (and evaluation) to parts of an expression. All of them start with ?, though (? :, ??, ?., ?[], ??=), so except for casts to nullable types, every question mark in an expression signals that control flow is about to happen and it's been that way in C# for quite a while.

gus_massa a day ago | parent [-]

[Too late, sorry for the delay, but I had to think about it.]

That ooks like a good reason. Looking at https://learn.microsoft.com/en-us/dotnet/csharp/language-ref... , the magic is in the LHS or the RHS, and in ??= the magic is explicitly in the connection. Here, IMHO, the problem is that the magic jumps from one side to the other. Anyway, I don't use C#.