|
|
Bernhard Hiller wrote: In the 13395 lines of code of the main window
Bernhard Hiller wrote: In the 13395 lines of code
Bernhard Hiller wrote: 13395
What?
|
|
|
|
|
That's clean code, isn't it?
|
|
|
|
|
I came across this java code. (I changed the class name to SingletonClass)
private static SingletonClass instance;
public SingletonClass()
{
SingletonClass.instance = this;
}
public static SingletonClass getInstance()
{
return instance;
}
|
|
|
|
|
Singleton... public constructor... I don't see anything wrong here
Oh... And I'm curious what you do when you don't call the constructor at least once
|
|
|
|
|
Which of course is used like this:
SingletonClass myVerySingletonClass = (new SingletonClass()).getInstance();
or even better:
SingletonClass anInstanceThatWeDontUse = new SingletoneClass();
SingletonClass useThisInstead = anInstanceThatWeDontUse.getInstance();
Good stuff!
On the other hand, I actually have written code similar to this, except I don't call it a singleton of course. Granted, it's smelly code.
Quiz: What might be the reason to provide a static method that returns an instance of the class, when you know that there will ever only be one instance?
Marc
|
|
|
|
|
SingletonClass useThisInstead = anInstanceThatWeDontUse.getInstance();
This would actually generate a compile error as it getInstance() is a static method
|
|
|
|
|
Nicholas Marty wrote: This would actually generate a compile error as it getInstance() is a static method
Marc
|
|
|
|
|
Actually, in Java you are allowed to call a static method from an instance...
One of many dumb things Java does.
|
|
|
|
|
Uh... Somehow I mistook the code for c#... Somehow skipped that in the original post
At least in c# it isn't possible to do that and I'd think even Java should at least give a compiler warning about that
|
|
|
|
|
If there'll only ever be one instance, that's your typical singleton, isn't it? I don't really understand your quiz question.
I've done load-on-demand singletons in the past which may be what the doofus in charge of this example was going for, I suppose.
|
|
|
|
|
That's just an example of the well-known Renewable Singleton Pattern. That comes in very handy when the old instance has worn out.
For a closer description, see
"Real World Software Development, Vol. II: Design Patterns", by W.T. and F. (2021)
|
|
|
|
|
Ah yes! Code Entropy!
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
It makes sense. Every "real-world" (i.e. big) JAVA application reassures me that java is nondeterministic.
|
|
|
|
|
Public Sub New()
MyBase.New
End Sub
Sort of implied anyway - but the fun fact is that the class that has this constructor doesn't actually explicitly inherit anything...so Mybase is object .
(Fortunately the compiler just ignores this so no actual harm done)
|
|
|
|
|
|
Zen coding.
cheers
Chris Maunder
|
|
|
|
|
Duncan Edwards Jones wrote: Fortunately the compiler just ignores this so no actual harm done Which proves that we already have machine that outsmarts the men...
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
When I see code like this, I sometimes suspect it may have been copied/pasted from a De-Compiler (such as IL Spy). I mean why on earth would someone go to the trouble of typing that?
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Yeah - or it could be a stub left behind when whatever extra work used to go on in the constructor was removed...or worst of all it may be a cargo cult coding issue.
|
|
|
|
|
I write constructors such as that. Only when I have multiple constructors though.
At least when you're going to change that code to call another constructor you know the call to the base class's constructor is gone (and probably going to be the default).
I'd rather write too much code (such as access modifiers even though they're the default) and make sure everyone knows I really wanted to call that constructor or have that access modifier than write too few and accidentally use a default I didn't intend. Especially since I switch a lot between VB and C# and both have different defaults.
Like a co-worker who doesn't write access modifiers. When I confronted him about it he said "everyone knows the default is public!". Turned out the default was internal
|
|
|
|
|
Yet another disastrous example from the VB6 project I'm porting. In many ways this one is truly eye-popping...
(Note, the code is paraphrased to avoid spilling "secrets" (like anyone would steal this carp)).
Dim con As ADODB.Connection
Sub DoSomething()
...
con.BeginTrans
...
On Error GoTo MyRollback
... Various statements that insert records ...
con.CommitTrans
...
Exit Sub
MyRollback:
MsgBox Err.Description
con.RollbackTrans
Resume Next
End Sub
So, if an error is detected, the current transaction is aborted but the code then attempts to write the remaining inserts anyway - only not outside of a transaction.
Of course it all goes pear-shaped when the Commit is attempted, but by that stage a whole bunch of detritus will have accumulated in the database.
And as there are pretty well no relationships in this DB, there's nothing preventing those records being utterly invalid (and they will be).
I predict a monumental data cleanup task approaching!
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Whoah - are we working on the same system?
(I saw a bit of code that detects is a record exists by attempting to insert it and trapping the error - of course, it traps any SQL error so if the record doesn't exist but you haven't passed in the mandatory fields we just assume it does...)
|
|
|
|
|
That sounds like the same culprits.
I wonder if there's a "special" team of programmers who travel the world sabotaging projects.
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Guild of Master Underground Programmers (GUMP)
They're actually part of small group (paid for by a hidden tax in you pay) that goes out to deliberately code to make large amounts of guaranteed employment for other coders.
[Applications for membership have been outsource]
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "As far as we know, our computer has never had an undetected error." - Weisert | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|