|
this.
I don't know much C# and getting into an existing C# project is hell difficult to understand.
I'd rather be phishing!
|
|
|
|
|
One of the "improvements" I find really complicated is the range operator.
string name;
name = "My name is Sander Rossel".Substring(11);
name = "My name is Sander Rossel"[11..]; Now tell me, which line of code better conveys my purpose?
Pattern matching is nice, but should be rarely needed in proper OOP.
Exception ex = new Exception();
switch (ex)
{
case InvalidCastException:
break;
case InvalidOperationException:
break;
case NullReferenceException:
break;
default:
break;
}
var exType = ex.GetType();
if (exType == typeof(InvalidCastException))
{ }
else if (exType == typeof(InvalidOperationException))
{ }
else
{ } There's probably an advantage to the pattern matching, but it doesn't do much for readability.
I love named tuples though.
public (string firstName, string lastName) GetNameParts(string name) { }
(var firstName, var lastName) = GetNameParts("Sander Rossel");
var tuple = GetNameParts("Sander Rossel");
Console.WriteLine(tuple.firstName); And of course string interpolation, which greatly improves readability and decreases change of bugs.
Console.WriteLine($"Hi {firstName} {lastName}, welcome to {appName}!");
Console.WriteLine(string.Format("Hi {0} {1}, welcome to {2}!", firstName, lastName, appName); If I could keep only one language improvement from about the last ten years it would be string interpolation!
|
|
|
|
|
Which code better conveys your purpose? The second.
Using ranges in Python for the last five million yeasrs, it is a joy to see them in C#. The only thing to remember, as in most languages that use slices and ranges, in [start..end] is that "end" is a stop and is not included in the range.
Console.WriteLine("Hello World!"[1..5]);
Console.WriteLine("Hello World!"[..5]);
Both give us "Hello" rom [0] to [4] stopping at [5].
|
|
|
|
|
I think your opinion comes from the "....Using ranges in Python for the last five million years..."
If you're used to ranges, then the second version is more obvious.
If you're not, it's pretty mysterious.
|
|
|
|
|
Named tuples and interpolated strings are awesome, as is the ?? operator and the ?. operator. Those stay.
cheers
Chris Maunder
|
|
|
|
|
I've been using ? and ?? so much I don't even consider them new anymore! So completely agreed
|
|
|
|
|
You beat me to it chris, I was just about to say exactly the same thing.
Myself and a colleague, where talking about this the other day, and basically came to the conclusion that all languages now have to take this approach, simply to appease the 15 minute attention span of the instant feedback generation.
|
|
|
|
|
We need "the next big thing".
|
|
|
|
|
"C" - oh, wait, the next BIG THING:
C
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
Yes, it will keep on trucking for a long time. I have seen way too many attempts at using C++ for embedded applications that only use a subset of what C++ can do. And when you objectively ( pun indented ) it just makes you wonder what the point was of using C++ instead of C. Managers of any kind are a very bad idea to begin with.
|
|
|
|
|
Hm, as an embedded system designer/programmer (now retired), I used C++ for most of my programing in the last 15 years of my career. Using templates for things like FIFOs, queues, digital oscillators, filter parts, etc made my code cleaner and easier to write. I did stay away from dynamic object creation/destruction and I didn't use C++ exceptions.
|
|
|
|
|
They are probably applicable to less than 5% of developers? But you still have to search for things like JPEG and PNG encoders and decoders, which will affect far more than that 5%. This perplexes me, even though I heard their reasons for it long ago... C# kicks its butt because of items like that.
Fortunately, you don't have to use the new constructs.
|
|
|
|
|
Personally, I find a lot of new things being introduced to be counter-productive so I don't bother using them and I generally avoid code that does. That's because it defeats the purpose as far as I'm concerned. Herb keeps saying they are making the language more concise but I really couldn't care less about that because I see no advantages to that. If I have to stop and think about what some new construct does that is not helpful. I'll take the old, verbose ways that are simple and easy to understand.
Of newer things, I have found only one from C++17 that I use frequently: inline static initializers. That's one of the most useful things I have found in quite a while. This may be an "old dog-new tricks" thing with me but I am not asking for any new tricks because the old ones are working pretty well as far as I'm concerned.
"They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"
|
|
|
|
|
Rick York wrote: If I have to stop and think about what some new construct does that is not helpful. I'll take the old, verbose ways that are simple and easy to understand. Thank god that you and @GregUtas are saying that...
I now feel less dumb
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
I believe code should read like a story. It makes for maintainability which is my primary concern. Very often the C# developers seem to believe that minimum typing is the objective of the language and add things that remove from the story. Choose what your priority is. I hate these stupid new features that hide what the story is saying. It's like a conversation with an idiot. You have no idea what they are saying.
|
|
|
|
|
When you look at a list of C++ changes in isolation, and without any motivating commentary they look hopelessly esoteric and unimportant. My experience with modern C++ features is that one day you will be looking for a way to solve a problem, and suddenly it will hit you, "Ah ha! That's what < feature X> is for."
C++ is becoming a very complex language. But the things added to C++ are put there by a bunch of really smart people who are experienced developers. It all has a purpose.
|
|
|
|
|
SeattleC++ wrote: It all has a purpose. Yes, to confuse poor old sods like me.
|
|
|
|
|
I actually haven't learned anything new since C++ 2003
I still look at C++ as C with objects, so for me it hasn't needed updating since it's standardization in the 90's. I never used the dreaded Templates (memory hoggers) but I've heard that they have improved since 2003.
So if you're like me that still codes in C++ as if it were C, then it's like "Why fix what ain't broken? There's always assembler"
|
|
|
|
|
i always believed that a large part of it was about "keeping their jobs".
i'm not talking only about VS2019 or C++. Windows grows because of it and you see the same buttons with the same functionality changing places in the same Form of say, System Properties.
then the UP one directory button disappears in Vista and 7, but then it's coming back in 8. they move the GUI to a heavily 3D multicolored look and then back to 8 colors and win3.11 looks.
it's progress alright, but i don't know if it's in the right direction.
the chances to start a C++ project that lasts for 5 years and at the end of the project to claim you know modern C++ are getting close to zero, much less to claim you know some other rapidly evolving language.
"if this frameworks are so great and helpful why do we need another one? why didn't the last 27 frameworks solve the problem? they didn't so you need the 28th framework, right?" - Jonathan Blow
|
|
|
|
|
Monday is a public holiday in the UK - like I have just been reminded today is in many places. I have no idea if that is general of specific to the UK.
Do we want a CCC Monday, or would you prefer a Tuesday start?
Vote Now!
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Nike
// TODO: Insert something here Top ten reasons why I'm lazy
1.
|
|
|
|
|
I would vote, but I can't be bothe...
oh what the heck.
Start Tuesday.
|
|
|
|
|
I'd vote but it's already Monday, and I don't do the CCC anyway. (Partly because I don't understand the logic behind them well enough to generate one if I accidentally got it right, and partly because even if I did create a clue to post a bunch of people would be salty I didn't get up in the middle of the night to post it for them.)
Did you ever see history portrayed as an old man with a wise brow and pulseless heart, weighing all things in the balance of reason?
Is not rather the genius of history like an eternal, imploring maiden, full of fire, with a burning heart and flaming soul, humanly warm and humanly beautiful?
--Zachris Topelius
Training a telescope on one’s own belly button will only reveal lint. You like that? You go right on staring at it. I prefer looking at galaxies.
-- Sarah Hoyt
|
|
|
|
|
|
And yet people wonder why I don't like my applications to be located in the cloud and insist upon installing them?
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|