|
Intended-side-effects were intended . That is side-effects in the functional meaning (in constrast with 'pure' functions, Haskell was the hint).
Unintended side effects are just evil.
|
|
|
|
|
Judging by the restrictions imposed on partial methods: they cannot have return value (only void ) or out parameters, they are intended to have side effects.
Whether or not it is disastrous to skip side effect is another question. In original example (logging) it is not.
|
|
|
|
|
Yes, indeed.
The original example showed a safe usage.
|
|
|
|
|
CPallini wrote: Wouldn't that be disastrous if the method is intended to produce side-effects?
Where I used to work, that was an every day occurrence, both in the code and in the meetings with the managers.
Latest Article - A Concise Overview of Threads
Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny
Artificial intelligence is the only remedy for natural stupidity. - CDP1802
|
|
|
|
|
|
I'm not sure such a code-remove by the compiler is 'cool'...
While removing unused code while optimizing is good thing, removing unimplemented code just because it signed 'partial' definitely illogical...
And to be honest - why would I define a private method and not implement it? It is definitely smells like a language feature added to support half-visual development with code generators... Outside of that context I see it very disturbing...
"The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge". Stephen Hawking, 1942- 2018
|
|
|
|
|
Yes, code generators me think.
|
|
|
|
|
The people defining and the people using may be different people - this is only applicable to partial classes, remember - so there is a very good chance that the partial definition and its implementation are in different files, just as InitializeComponent is defined in the designer.cs file of a WinForms app, and called from the .cs file.
I've not used it, but I can see advantages in a "team written" class, in that I write a "frame" which calls partial methods that are implemented by other team members in different files. As has been mentioned, it could be very useful for automated designers, allowing the user to define methods only when he needs them without having to mess around with delegates. Or tracing information only available in debug builds, which isn't even called in release giving slightly higher performance.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
That's not cool - it's obfuscatory.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
modified 16-Jan-19 14:22pm.
|
|
|
|
|
Exactly what I was going to write.
"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?"
|
|
|
|
|
Of course, you could always simplify that to:
using System;
using System.Diagnostics;
namespace ConditionalMethodTest
{
class Foo
{
[Conditional("LOGGING")]
private void Log(string msg)
{
Console.WriteLine(msg);
}
public void DoSomething()
{
Log("Fizbin");
}
}
static class Program
{
static void Main()
{
new Foo().DoSomething();
}
}
} for exactly the same effect.
ConditionalAttribute Class (System.Diagnostics) | Microsoft Docs[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard Deeming wrote: for exactly the same effect.
Yes, but that's not nearly as confusing!
Latest Article - A Concise Overview of Threads
Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny
Artificial intelligence is the only remedy for natural stupidity. - CDP1802
|
|
|
|
|
C'mon Marc, that's not a valid example. Everybody of our age range knows
fizzbin has two z's.
|
|
|
|
|
Dunno. If I had a method whereby I could do just a part of my work, that would definitely be desired...
Anything that is unrelated to elephants is irrelephant Anonymous
- The problem with quotes on the internet is that you can never tell if they're genuine Winston Churchill, 1944
- Never argue with a fool. Onlookers may not be able to tell the difference. Mark Twain
|
|
|
|
|
|
It was heavily used in Entity Framework DB First.
I've used them a lot to extend generated classes with my own code.
I've never used it for my own classes or outside of generated code.
|
|
|
|
|
Sander Rossel wrote: It was heavily used in Entity Framework DB First.
Well, there's your problem - you're using Entity Framework...
Sander Rossel wrote: I've used them a lot to extend generated classes with my own code.
I prefer to generate my own code.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
Sander Rossel wrote: It was heavily used in Entity Framework DB First.
Ah. That explains it. They made a language enhancement to support a bad design to begin with!
Latest Article - A Concise Overview of Threads
Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny
Artificial intelligence is the only remedy for natural stupidity. - CDP1802
|
|
|
|
|
Marc Clifton wrote: They made a language enhancement to support a bad design to begin with!
That's truth in advertising right there...
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
Remove partial method, you just broke all WPF user controls!
|
|
|
|
|
I thought this too. What the hell use are partial methods. The only reasonable use I have found for them is when using Xamarin to build an app. You may have a class defined in both the iOS and Android projects and defining a partial class makes sense.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
I'm not saying partial classes aren't reasonable (hell, I use partial classes), I'm saying partial METHODS aren't.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I can't think of a single use for a partial method either.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
When I learned about partial functions, I immediately embraced it. My project at that time was a protocol stack, with data transport, control and management planes. Each plane is a set of functions completely separated from the other two, but operating on the same protocol layer entity. Partial fuctions allowed me to keep the implementation of the planes completely independent of each other. Obviously, very plane specific functions didn't make use of partial functions, but for e.g. initialization and cleanup it was great.
Once you get going with partial functions, you add e.g. logging functions without cluttering up the plain code. When you write test functions, you write a partial function to verify entry and/or exit conditions. In the development phase, you add extensive parameter validation that would be too expensive to run in production code, or you add code for performance measurenment and statitics to detect bottlenecks and excessive resource reuqirements, so they can be fixed before the product is released.
Yes, you can put it all into one huge, messy code file with a lot of #ifdef to disable parts of the code. The programmer responsisible for one of the planes will have to wade through lots of code that is ireelevant to his tasks. An update in any of the planes, the log functions, the performance measurement functions, the test and validation functions,... invalidates the source file of every other programmer on the project.
Obviously it can be done that way. But I love the partial functions, considering that to be a much better way to do it.
|
|
|
|
|
I do not agree. We have a number of WCF/SOAP projects where we generate code from wsdl and same thing with XML generating code from XSD. I both cases it is beneficial to have additional methods or properties in a separate file. When XSD or WSDL is updated you code is not overwritten during regeneration.
|
|
|
|