...
ANY language with function overloading - or worse,
operator overloading - is a disaster waiting to happen. With minimal use and a very good guide, it is not a problem, but with 20 ways to make an object, half of them applicable to your task, and "help" that does very little to assist you, or when + starts acting differently depending on the order of operations (should I put the classC or the classN object first?), then
someone doesn't understand that simplicity is usually best in those cases. C++, .NET, even many other recent languages all allow this, and
most of them make the mistake of overusing such features.
Now, here is a nice feature to put in an editor:
Be able to identify overloaded operators, colour-code them, and then make the tooltip text show what class overloaded it! Bonus if you can navigate to the declaration of the overloading from the right-click menu!
Finally, notice I said "C", and not "C++"? Yes, I use "C" to mean "C", and not "C, C++, C#, or some other similar language". Because C has *one* set of argumentss to any given function, so you don't have to worry if you should be passing a string or a system.uri. If you want multiple argument sets, you
make a new function.
glVertex2f?
glVertex3i?
glVertex3ub?
glVertex2dv?
Same function, different arguments. And
clearly shows the arguments in the name itself. And, it is *consistant* across the entire OpenGL API. If all of thosse were overloaded glVertex2() and glVertex3(), fewer languages could use them, you would have to explicitly cast values, and you would have to look at the source of the values to understand what version of the function was being called. If they are members of a structure, you have to find the correct header file, browse to the structure, and look at the types of the values. And God help you if there is a structure within a structure, now you have to do *two* lookups, possibly in entirely different files, just to understand one fnction call. Oh, and if the types were #defined elsewhere, you have to find those as well...
Read this. Finding the right set of arguments is just one extra sub-step but
it adds up.
(3 posts later)
I have the experience of trying to work with the WebBrowser control in VB for a few hours, and getting absolutely
nowhere just because they tried to make it do everything however you wanted with whatever arguments you passed, and made a mediocre interface, rather than trying to do everything one way, and do it
exceptionally well. The greatest pitfal of OOP is when it encourages you to try to make everything work everywhere.
You do not have that experience, and are thus unqualified to dispute it.
Specifically, I wanted to get input from the user between a few pages, then navigate to that page and not navigate away. It would work correctly if I set the URL in the GUI editor's property sheet, but changing the url from the code to respond to the user's input just didn't work. Rather than understand why(due to their inability to fully explain every variation of every function, since they over-overloaded them), I attempted to get it to work through
multiple different sequences of instructions, and *none* of them worked.
If I had researched how to use COM in C, I would have asked the user then created the browser with the URL preset, but because this was VB, and a pre-created windows form, I didn't want to, and likely couldn't without days of research, learn how to create a new WebBrowser
after getting input, and I couldn't even guarentee it would work. If there is a clear way to accomplish your goal, and the manual clearly describes how things should work, then you know when something is wrong, and can find out what to do. Otherwise, you will seek alternative methods even when they will fail anyway, because you don't know that they will. In the end, I simply made a new project for each page, but I cannot be fully content with such a
workaround to an inherent flaw of OOP and documentation. Now, you can probably tell me "Oh, you just had to set option X before changing the URL", and you would probably be right. But did MSDN say that? Certainly not! And MSDN should have, but didn't because they just assumed that everyone could comprehend among their countless overloads what one has the right parameters for the current task. I'm sure that Python would probably have been as simple as "new browser; disable navigation; browser.goto(page)", or some other language, but .NET does *not* want you to find the easy way on your first attempt. MAybe non-windows .NET does, and it probably has proper documentation, too, but the default .NET that comes with the downloadable VB doesn't.