Egh, the only time I ever completely capitalize something is for a constant.
Egh, the only time I ever completely capitalize something is for a constant.
I find most will just copy-cat from the conventions used in examples. Makes sense. Just going with what another programmer of that language/script is doing since it seems to work.
For example, I was originally taught to use i, j and k consecutively in my for loops. What sense does this make in practice? I have no idea, I just use them instead of say... a, b and c for example. Though this doesn't become a readability issue unless I'm trying to use the darn thing globally or something weird like that.
I understand the i for iteration or for index, I always that the j was just because it looked similar to i
I stand on the more structured your code is the better off you are in the future. I look back at some of my code from 5 years ago and think to myself "Dang i sucked back then." mainly because I can hardly read the code. It is all cryptic and never used any standards for scope named variables or any prefix for the variable type.
var
strName : String;
intCurIndex : Integer;
chrDelimiter : Char;
and etc. this is the convention I use for prefix, and if it is a class variable it is prefixed with an underscore _chrDelimiter or _blnRunning
it just helps me to know what to expect the value should be. after all, it is all preference if you are working on your project "el solo" The compiler doesn't care as long as you haven't made a grave mistake and called the wrong function or have declared something in local scope that overrides global scope and have forgotten to reference the global scope with Self.VarName
Well that is just my 2 cents.
Oh and indentation. that is a big one for me. I must always indent consistently.
Nice article. It has a lot of good advices.
I'm sorry but I use capitals for keywords and data types (not defined by user, just the ones defined by the language). I found it's easer to read for me even if I'm using syntax highlighting. You can locate almost any language structure at a glance. For everything else (variables, classes, procedures, etc) I use CamelCase. Often I use upper-case for constants too.
About spaces, I put one before "(" always, and also after ",". See:
Code:ThisProcedureHasSomeParameters(Parameter1, Parameter2, LastOne); ThisProcedureHasSomeParameters (Parameter1, Parameter2, LastOne);
Also, I separate procedure implementations by three empty lines. This way is easer to find where it starts and ends. I use indentation, of course (2 spaces each level, 1 TAB for 8 spaces).
And I never, never, NEVER use hungarian notation. That's true annoying. What if you change the type of a largely used variable? BTW, the proposal of the variable itself should be enough to know the type it is (i.e. a variable named "FileName" will never be of type "INTEGER", will it?)
And use long names (very long sometimes) for everything except few short ones as "Ndx", "Cnt" and few more (never one leter though), and a lot of comments.
In this case I use the "Borland convention" and use "f" (i.e. SELF.fVarName), but only in variables not in properties. I read it in a paper published by Borland itself.
Last edited by Ñuño Martínez; 08-06-2011 at 09:39 AM.
No signature provided yet.
In code I have written no, FileName will never be Integer however it might be something like TBESEString or widestring, or any other format that it could fit. Also, I have used many libraries where a variable or type is actually an int or cardinal or a word but named as though it contained data and not an index for the data.
And for changing the type of a largely used variable. Well My standard is I don't use variables outside of one unit if possible. So, normally I only have to change its name in a single file. And I love GREP and Search and Replace.
Its not any standard notation I follow. I just use the structure that I find easiest to read. As I said, I don't like the way I coded 5 years ago. It's possible I would like the way I code now, in 5 years. It all comes down to preferences, there is no de facto standard. And even if there is, who cares. Follow the "Shop Standards" and if you are so lucky maybe you are making the "Shop Standards" wherever you are working.
I really think it is a waste of time when you get with other programmers and no one codes alike. I would rather hate the formatting of the code and have to write code like that, then to have 5 different formatting standards on one project.
I tend to vary my notation depending on context for example, for a large number of type declerations that get used often, I'll shorten the terms but also include information pertaining to that type ie :
SInt8 - Signed 8bit Integer
UInt8 - Unsigned 8bit Integer etc
SInt16
UInt16
SInt32
UInt32
Float32
Float64
So this is similar to a lot of C stuff, OpenGL etc. I don't use classic hungarian notation simply because it's an old technique that isn't needed with modern code editors.
For class definitions and methods I tend to use the most descriptive terms (in CamelCase) and group together classes by name whenever it seems appropriate :
TJSpatialRegion
TJSpatialEntity
TJSpatialEntityController
TJSpatialEntityControllerAnnotation
I always use the prefix 'A' on variables in method declerations so there can be no confusion between private variables (F). class Properties exposed to end-users use no prefix.
FVelocityVector : TJVec3;
FSpatialController : TJSpatialController;
procedure TJSpatialEntity.SetVelocityVector(AVelocityVector : TJVec3);
procedure TJSpatialEntity.SetSpatialController(AspatialContr oller : TJSpatialController);
procedure TJSpatialRegion.AddSpatialEntity(ASpatialEntity : TJSpatialEntity);
property VelocityVector : TVec3 read GetVelocityVector write SetVelocityVector;
I think that naming conventions are important for either :
A) Adoption Speed - If you intend your code to be accessed by a large number of people, you'll want it to be as descriptive as possible.
B) Coding Speed - If it's just you or a small team and the source is closed then use whatever shorthand is appropriate in order to save on time writing/reading the code.
Very large code-bases require all coders to use the same system for notation if only to avoid adding additional complexity into already complex systems.
P.S I would not recommend using layout rules with the intention of making the language syntax easier to read! that's why we have syntax highlighters etc. If you're doing a whole bunch of keystrokes to bring code-completion in line with your own layout, you're just wasting time. Use the layout defined in your editors snippets. Questions of notation should be about understanding what your code does not how the language works.
Last edited by phibermon; 21-06-2011 at 09:14 PM.
When the moon hits your eye like a big pizza pie - that's an extinction level impact event.
Note that this is written before reading actual article. Here are my thoughts on the subject.
I always try to keep my code readable, simply because I often "jump between projects" - I have three Pascal projects right now (game engine, Super Heli Land and DCPU-16-like virtual processor) and two RPG Maker ones (plus one on hiatus until I'll get more skilled with RM because of magnitude of it) and when I get bored with one project I am going to other. So often I have few month breaks from one project.
Because of it, I've learned to write easy to read code. For my identifiers (variables, procedures and functions) I'm using CamelCase (with first letter upper case), for constants it is all uppercase. Sometimes for procedures/functions I'm using underscore_notation, but only when code readability suffers from usage of CamelCase or when I'm writing some library and want to visually separate its name (example: DarkhogGui_DrawButton).
I also do lots of commenting. Even most insignificant and obvious line should be IMO commented, because after few months you won't know what it does.
Bookmarks