Hungarian UIs
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
I swapped for a while to
Something
for the text boxSomethingLabel
for the label of the text box (not necessarily a label control - literally the thing that acts as a label for something), It worked well, for one thing you don't have to remember to rename if the text box becomes a dropdown or a dropdown some radio buttons etc. It did also help enforce the discipline the the UI did UI work and the OM should be separated out: Username would be the control to handle the username, and couldn't be re-used to store the username in lieu of the model. It also adheres to guidance about not including type names in members. Most places I've worked at stick to the Hungarian notation, so I've pretty much swapped back.Sort of a cross between Lawrence of Arabia and Dilbert.[^]
-Or-
A Dead ringer for Kate Winslett[^] -
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
I’m using it not only with the UI components but with some parts of the framework. For example DataTable dtMyTable etc. It’s useful and I’m not planning to change it just because some new pompous fancy coding conventions. I strictly follow the languages naming conventions though. No matter if it’s C++, C# or Java.
There is only one Vera Farmiga and Salma Hayek is her prophet! Advertise here – minimum three posts per day are guaranteed.
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
I have been using wpf with mvvm for the past 3 or 4 years now, and thankfully, that means I very rarely have to name any controls :)
When I was a coder, we worked on algorithms. Today, we memorize APIs for countless libraries — those libraries have the algorithms - Eric Allman
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
I've never quite understood how strongly some dislike hungarian notation. its just a style :)
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer. This was quickly perverted into a monstrosity. Name variables with meaningful names is to be encouraged, though in my style most abbreviations are discouraged. In UI programming, I often use Label/Checkbox or some suffix to distinguish controls from data. In C++, I still use Hungarian in three distinct cases: I put a 'p' in front of pointers since the semantics are dramatically different. I put 'h' in front of naked handles for a similar reason--if I see a variable prefixed with an 'h', there better be a CloseHandle or equivalent nearby (code-wise). I also put "m_" in front of class member variables. Oddly I don't do this in C# (except lately since my current peers insist on using the "_" prefix for member variables.)
-
I swapped for a while to
Something
for the text boxSomethingLabel
for the label of the text box (not necessarily a label control - literally the thing that acts as a label for something), It worked well, for one thing you don't have to remember to rename if the text box becomes a dropdown or a dropdown some radio buttons etc. It did also help enforce the discipline the the UI did UI work and the OM should be separated out: Username would be the control to handle the username, and couldn't be re-used to store the username in lieu of the model. It also adheres to guidance about not including type names in members. Most places I've worked at stick to the Hungarian notation, so I've pretty much swapped back.Sort of a cross between Lawrence of Arabia and Dilbert.[^]
-Or-
A Dead ringer for Kate Winslett[^] -
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
c2423 wrote:
lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name
I do the same thing [insert](in WinForms code behind)[/insert] as I find it useful and it helps reduce coding errors. I have no qualms about using it. Also, it's strictly not Hungarian notation, since
lbl
andtxt
are not primitive data types. /raviMy new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
I've never quite understood how strongly some dislike hungarian notation. its just a style :)
I think there's general agreement these days that it's not a good style, particularly if you want to change the underlying type of something without having to do a lot of renaming, aside from the aesthetics of it. However, everybody has seen the arguments for and against ad nauseum but I was curious as to what people do in the UI. One other exception that springs to mind is IInterface, which I don't have any problems with.
-
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer. This was quickly perverted into a monstrosity. Name variables with meaningful names is to be encouraged, though in my style most abbreviations are discouraged. In UI programming, I often use Label/Checkbox or some suffix to distinguish controls from data. In C++, I still use Hungarian in three distinct cases: I put a 'p' in front of pointers since the semantics are dramatically different. I put 'h' in front of naked handles for a similar reason--if I see a variable prefixed with an 'h', there better be a CloseHandle or equivalent nearby (code-wise). I also put "m_" in front of class member variables. Oddly I don't do this in C# (except lately since my current peers insist on using the "_" prefix for member variables.)
So when you say you still use Hungarian in three cases, you are referring to the pre-monstrosity kind?
The difficult we do right away... ...the impossible takes slightly longer.
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.
I can't find it quickly but there was a good article posted here via the news feed (Insider News) that told a story, presumably true, as to what Hungarian was supposed to be for and what it got turned into and that they were vastly different. Anywho the Wikipedia article[^] might help, at least differentiating between System Hungarian and Apps Hungarian. Personally I tend to use the txtAge, lblAge, cmbGender, lblGender, cmdOK, cmdCancel etc. I am intrigued by the idea of switching to AgeTxt, AgeLbl, GenderCmb, GenderLbl, CancelCmd, OKCmd etc., might be better in at least some if not many places. Mike
-
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer. This was quickly perverted into a monstrosity. Name variables with meaningful names is to be encouraged, though in my style most abbreviations are discouraged. In UI programming, I often use Label/Checkbox or some suffix to distinguish controls from data. In C++, I still use Hungarian in three distinct cases: I put a 'p' in front of pointers since the semantics are dramatically different. I put 'h' in front of naked handles for a similar reason--if I see a variable prefixed with an 'h', there better be a CloseHandle or equivalent nearby (code-wise). I also put "m_" in front of class member variables. Oddly I don't do this in C# (except lately since my current peers insist on using the "_" prefix for member variables.)
Yes, I've read the Joel on Software article which explains the distinction, and agree in principle. In practice it's hard to get everyone on the team to go along with this... p for pointers makes sense, h for handles makes sense, m and underscore for member variables I change my mind on every few months - I dislike that there is a prefix in general, however the next alternative of caps/lower case first letter to distinguish feels equally smelly. I've actually got to the point of using automatic properties instead of backing fields mostly though so in newer framework versions this becomes less and less of an issue (using a private property may sound a bit wrong for what would have been a field, but that's an argument for another day)
-
c2423 wrote:
lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name
I do the same thing [insert](in WinForms code behind)[/insert] as I find it useful and it helps reduce coding errors. I have no qualms about using it. Also, it's strictly not Hungarian notation, since
lbl
andtxt
are not primitive data types. /raviMy new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
So when you say you still use Hungarian in three cases, you are referring to the pre-monstrosity kind?
The difficult we do right away... ...the impossible takes slightly longer.
I listed them; p, h and m_ (or _). The monstrosity kind were where you'd get a string of letters which must have meant something to someone, but which were now indecipherable. I once worked for a guy who insisted that 'i' be a prefix for integer and 'b' for byte/unsigned char, yet someone else on the team used 'n' and someone else 'd' and both used 'b' for bool, even if had ceased to be a BOOL (in the worse case, bool not only became an enum, but failure or false became -1.) PS. I suppose the most notorious example is WPARAM wParam which isn't a WORD at all. I realized that I do use lParam and wParam in this case, but mainly because when I want to know what's in the WPARAM, I know what to look for--the l and w prefixes have lost all meaning. It annoys me, though.
-
I can't find it quickly but there was a good article posted here via the news feed (Insider News) that told a story, presumably true, as to what Hungarian was supposed to be for and what it got turned into and that they were vastly different. Anywho the Wikipedia article[^] might help, at least differentiating between System Hungarian and Apps Hungarian. Personally I tend to use the txtAge, lblAge, cmbGender, lblGender, cmdOK, cmdCancel etc. I am intrigued by the idea of switching to AgeTxt, AgeLbl, GenderCmb, GenderLbl, CancelCmd, OKCmd etc., might be better in at least some if not many places. Mike
I didn't see the article - perhaps it was Joel on Software? http://www.joelonsoftware.com/articles/Wrong.html[^] I don't think AgeTxt etc is any better - you would win the point of saying "I don't use Hungarian notation", while doing something equally smelly. There is a suggestion above which is that you would have something like AgeInput or AgeEdit, which I quite like on the basis that it doesn't prescribe a particular implementation.
-
Making it a suffix means that related controls (i.e. all the things for FirstName) come together. Doing it 'properly' you have a single control, called firstName, which has the editor and the label and exposes the right properties. But UI usually doesn't work out like that, so you will have several controls relating to the same concept. You have to use the type to differentiate them, and a suffix seems better than a prefix to me.
-
Strictly speaking strings aren't primitive data types either, but it'd make my skin crawl to name a variable strXyz.
Ha! I wasn't advocating using (and do not use)
strXyz
. :-D /raviMy new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
Strictly speaking strings aren't primitive data types either, but it'd make my skin crawl to name a variable strXyz.
-
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer. This was quickly perverted into a monstrosity. Name variables with meaningful names is to be encouraged, though in my style most abbreviations are discouraged. In UI programming, I often use Label/Checkbox or some suffix to distinguish controls from data. In C++, I still use Hungarian in three distinct cases: I put a 'p' in front of pointers since the semantics are dramatically different. I put 'h' in front of naked handles for a similar reason--if I see a variable prefixed with an 'h', there better be a CloseHandle or equivalent nearby (code-wise). I also put "m_" in front of class member variables. Oddly I don't do this in C# (except lately since my current peers insist on using the "_" prefix for member variables.)
Joe Woodbury wrote:
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer
No. http://en.wikipedia.org/wiki/Hungarian_notation[^] "Simonyi's paper referred to prefixes used to indicate the "type" of information being stored" http://msdn.microsoft.com/en-us/library/aa260976%28v=vs.60%29.aspx[^] "Long, long ago in the early days of DOS, Microsoft's Chief Architect Dr. Charles Simonyi introduced an identifier naming convention that adds a prefix to the identifier name to indicate the functional type of the identifier."
-
Joe Woodbury wrote:
Giving a variable name passwordString or something comparable is not Hungarian notation. The original intent with Hungarian notation was that a very short prefix would indicate HOW the variable was used, not the actual type of the variable. Thus dX meant delta-X, not that X is an integer
No. http://en.wikipedia.org/wiki/Hungarian_notation[^] "Simonyi's paper referred to prefixes used to indicate the "type" of information being stored" http://msdn.microsoft.com/en-us/library/aa260976%28v=vs.60%29.aspx[^] "Long, long ago in the early days of DOS, Microsoft's Chief Architect Dr. Charles Simonyi introduced an identifier naming convention that adds a prefix to the identifier name to indicate the functional type of the identifier."
jschell wrote:
http://msdn.microsoft.com/en-us/library/aa260976%28v=vs.60%29.aspx[^]
"Long, long ago in the early days of DOS, Microsoft's Chief Architect Dr. Charles Simonyi introduced an identifier naming convention that adds a prefix to the identifier name to indicate the functional type of the identifier.""the functional type" Simonyi's paper makes this reasonably clear, though even he allowed some physical types to be represented. I believe the problem is that Simonyi was using "type" when he meant "usage" due, I believe, to English not being his first language. (I found it funny that he writes : "In closing, it is evident that the conventions participated in making the code more correct, easier to write, and easier to read. Naming conventions cannot guarantee good code, however; only the skill of the programmer can." When, for me at least, his example is nearly indecipherable and not clear at all.)
-
I think we can all agree that for the most part nobody uses Hungarian notation for variables any more... but it still seems prevalent in UI programming - for example I might have lblSomething next to txtSomething. On one hand I feel a bit uneasy that there must be some way to avoid this horrible practice, but on the other hand lblSomething is clearly meant to be a label which is next to txtSomething, and I need a way to differentiate between them without ending up with two controls with the same name. What say you? Disclaimer: I don't consider this to be a programming question, more a question of what styles people like to use.