So I’ve been working on a software project of mine. I’ll tell you more about it soon enough, but for now, it’s enough to say that I’m writing source code that generates source code.
One thing I’ve noticed is variable declaration. There are 2 extremes.
One variable used multiple times
This is the memory-efficient version. If you need the use of an integer variable, you just declare one variable. For example,
int i; i = DoSomething() + DoSomethingElse(); DoAlpha(i); i = DoThis() + DoThat(); DoBeta(i);
That’s just for illustrative purposes. If you’ve written a fair amount of code, I’m sure you can think of better examples. Which are probably (and usually) more elaborate and lengthier.
The drawback to this is that the variable is temporary. As the code continues its execution, previous values stored in that variable are considered to be unimportant to future executions. That’s why the value can be discarded and the variable overwritten.
Multiple variables but one-off use
Then there’s the “declare as many variables as you can (or think you need)” method. For example,
int i1 = DoSomething(); int i2 = DoSomethingElse(); int i3 = DoThis(); int i4 = DoThat();
This has the advantage of keeping the variable values “alive” through that section of code. The drawback is that you use more memory, even if seemingly trivial. I mean, that’s like 12 more bytes of memory (assuming integers still take up 32 bits when you’re reading this). That hardly makes a dent in the computer’s memory space.
The hybrid
The above 2 are extreme cases. What happens when you write code is probably a hybrid, somewhere in between the 2 extremes. For example,
int iSubtotal; int iTotal; iSubtotal = DoSomething(); iTotal += iSubtotal; iSubtotal = DoThis() + DoThat(); DoSomethingElse(iSubtotal); iTotal += iSubtotal;
You know what you declared those variables for, so you have an idea how many “unique” variables you need. This have the benefits of using the least number of variables (sort of), balanced with keeping the least number of “live” variable values around.
So why am I talking about this?
Auto-generated source code cannot generate hybrids
When you’re writing code, you have one very important advantage: You have context. A program that generates source code, such as a decompiler, does not have that.
When you’re writing code, you make variable decisions such as naming, naming conventions, how many you need and so on.
A decompiler has difficulty making decisions like those, so it has to choose one of the extremes. Typically the multiple variables route, because that’s the safest. All a decompiler can do is detect that a variable is needed, and so writes out the variable declaration in the resulting source code. It cannot decide on whether this part of the code can reuse one of the variables it has already declared (or at least has difficulty doing so).
Ok, so the cat’s out of the bag. I’m writing a decompiler. That’s not exactly true but will suffice for now (I promise I’ll tell you more soon!).
Anyway, that’s what I discovered while working on my software project. I have decided to go the multi-use variable route, because of a human (and programmer) behaviour. A human programmer has difficulty holding on to many separate variables in his head.
When a section of code requires many variables, I tend to try to limit the number of variables I remember in my head. Maybe there’s a pattern. I might remember there’s fFinancialYear1 up to fFinancialYear7. I might decide to refactor the code such that I only need one fFinancialYear floating point variable (assuming the appended numeral makes sense, and not just laziness in naming). I might separate the code section into several sections, so each section has a limited number of variables.
Maybe that’s not how most programmers work, but I find it “friendlier” than having thisIsAnAwesomeClass1 through thisIsAnAwesomeClass20, and I can’t remember which awesome class does which. I tend to work with tighter variable names (where possible and logical), and write code that’s as tight in scope as possible. So the variable values can be discarded, which means I don’t have to keep track of whether that value is still needed, even if the computer doesn’t mind having to keep track of it.
So how do you write your code where variables are concerned?




I'm a mathematician, programmer, writer, 






Beginning C# – Variables and operations
So you’re sick with Hello World program code, and want to start doing something. Before you go writing your NASA-approved quantum space engine or the next blockbuster financial application, you have to know about how programs store and manipulate data.
Program data (such as rocket speed or stock prices) are stored in variables, which can be thought of as boxes holding information. We remember information differently from a computer. For example, the information “15″ can be a number to us. Or part of an address such as “street 15″. Or 15 dollars. We can pretty much move this data around in our heads.
Here’s the thing: computers need structure. They must know that 15 is a number, and will only store 15 as a number. If 15 is to be part of an address, it must be stored as an address. Moving data from one form to another usually requires telling the computer explicitly to do so, which means you have to write specific code to do that. It’s easier to talk to a computer in its own terms, so we’ll learn about …
Variable types
There are a few variable types, and the most commonly used are those storing numbers and text. There are 2 kinds of number variables; whole numbers and numbers with decimal points (also known as real numbers). In C#, the whole number variables are
byte,shortandint. The other kind hasfloat,doubleanddecimal. There are more, but these are the common ones.Why is there a difference? Because computers think, store and manipulate them differently. To the computer, a 7 and a 7.00 are two very different pieces of information. This is very important, especially if you’re doing mathematical calculations.
So we’ll go through them a little bit
Why are the real numbers approximations? Again it’s due to the way computers store data.
floatanddoublevariable types implement the IEEE standard. For now, we’ll simply learn more about these variable types through practical use. Which brings us to the sample code.A closer look
The first two lines inside the Main function is
This is how we declare our variables. In this case, we tell the computer we want a variable of type
intand we name it “number”. We also declare two variables of typedouble, named (unimaginatively) “anothernumber” and “yetanothernumber”. Variables of the same type can be declared on the same line by separating them with a comma.The next three lines are
This is where we assign values to our variables. So we want the integer 5 to be stored in “number”. Then we want 3.14159 to be stored in “anothernumber”. The next line is more interesting. We want two times the value stored in “anothernumber” to be stored in “yetanothernumber”. This means we can assign any appropriate value to a variable, even if the value is stored in another variable.
Manipulating data basically involves mathematical operations (although they are others). They are addition, subtraction, multiplication and division. Their respective operations in code are +, -, * and /.
Commenting
Skipping a couple lines down, we encounter the double forward slash //. This simply tells the computer that whatever follows after the // on the same line is to be ignored, because it’s meant to be read by a human.
Additional note
If you’ve tried running the previous Hello World program straight from the directory by double clicking, you’ll find that it comes up and then disappears. Which is what the following lines will prevent:
Console.WriteLine("End of program"); Console.ReadLine();By printing “End of program”, you’ll know that the program has indeed reached the end. The
Console.ReadLine();tells the computer to wait for input till the Enter/Return key is hit. This automatically solves the disappearing problem.Here’s the source code for you to play with.
Homework
Try assigning
and print out the answer! Can you figure out why the values aren’t what you think they should be?