Do I need to initialise variables - programming in C, C++, Perl, PHP, Python, Ruby or Java.
Starting with a clean slate. Are variables initisialised, and if so, how? Even with this fundamental question, languages vary considerably.
C and C++
From my (e)mailbag ...
"""In a piece of code we [82][ac] Ä ve written we declare an array, but we do not fill the elements with values, we assume (dangerous I know) that it has defaulted all elements to zero. During the code execution only a few elements of the array are set to an integer value BUT it seems on occasions that there are some elements that have values in other than zero. These elements are not referenced in the code to be changed, so we assume the problem lies with the declaration / initialisation of the array. On some days this happens continually from the start of the job running, but on other days when the code is loaded is does not happen at all."""
When you set up an array in C or C++, it won't be initialised unless you force it to be - it will take whatever values happen to be in left in the memory from precious actions. More often than not, that does turn out to be integer zeros as there's a lot of blank space in many (other) programs, and also many libraries / languages clear to zero on exit. For global arrays, it's going to be down to the specific linker / loader as to what it does. For anything allocated with calloc, the manual tells you it's initiiased, with malloc that is not the case - and (?) which does "new" use internally? For local variables, assume no intitialisation. Best / surest bet is, frankly, to loop in zeros as that will work no matter what's going on internally. If you have a lot of it to do, write the code just once as a function.
Some pointers there - hope they help. In summary, I'm not surprised that you've got a piece of code that works most of the time ... kinda typical for code that doesn't initialise when it should ;-/
Python and Ruby
Variables are NOT initisialised automatically, and if you try and use a variable before it exists, you'll get an error:
wizard:~ graham$ python
Python 2.7 (r27:82508, Jul 3 2010, 20:17:05)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> abc += 8
Traceback (most recent call last):
File "", line 1, in
NameError: name 'abc' is not defined
>>>
wizard:may11 graham$ irb
>> puts "Look at #{varname} please"
NameError: undefined local variable or method `varname' for main:Object
from (irb):1
>>
Perl and PHP
New variables are
assumed to contain an empty string ... which (if you use them in a numeric context will be treated as zero.
If you run Perl with a
-w command line switch of with
use warnings;
you'll duely get warnings.
In PHP, you can set the
E_NOTICE error level flagging to give you warnings if you use the contents of a variable that's not been initialised. See
the PHP manual for how to set that - you can do so in your web server setup, your php.ini configuration file, or script by script.
Java
The Java compiler will throw out any possible attempt to use an uninitialised local variable:
wizard:may11 graham$ javac Flawed.java
Flawed.java:4: variable somevar might not have been initialized
System.out.print(somevar);
^
1 error
wizard:may11 graham$
and indeed that sometimes very irritating - if you initialise a variable in two different ways (in and
if and
else) some compilers will still complain and you'll need to explicitly set it to a value prior to the tonditional statment just to be overwritten one way or another within the conditions.
Arrays and member variables of objects
are automatically initialised - to the default (fallback) value for their type - false for boolean, 0 for numerical types, null for reference types.
(written 2011-05-05)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y102 - Python - Fundamentals [328] Making programs easy for any user to start - (2005-05-29)
[633] Copying a reference, or cloning - (2006-03-05)
[748] Getting rid of variables after you have finished with them - (2006-06-06)
[956] Python security - trouble with input - (2006-11-30)
[1430] Integer v float - Python - (2007-11-12)
[1448] Question on division (Java) - Also Perl, PHP, Python ... - (2007-11-28)
[1461] Python - input v raw input - (2007-12-06)
[1878] Pascals Triangle in Python and Java - (2008-11-10)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[2442] Variable storage - Perl, Tcl and Python compared - (2009-10-08)
[2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
[3083] Python - fresh examples from recent courses - (2010-12-11)
[3181] Beware - a=a+b and a+=b are different - Python - (2011-02-23)
[3551] Some terms used in programming (Biased towards Python) - (2011-12-12)
[3886] Formatting output - why we need to, and first Python example - (2012-10-09)
[3917] BODMAS - the order a computer evaluates arithmetic expressions - (2012-11-09)
[4324] Learning to program - variables and constants - (2014-11-22)
[4442] Mutable v Immuatble objects in Python, and the implication - (2015-02-24)
[4712] A reminder of the key issues to consider in moving from Python 2 to Python 3 - (2016-10-30)
R103 - Basic Ruby Language Elements [986] puts - opposite of chomp in Ruby - (2006-12-15)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[2296] Variable scope - what is it, and how does it Ruby? - (2009-07-18)
[2613] Constants in Ruby - (2010-02-01)
[2617] Comparing floating point numbers - a word of caution and a solution - (2010-02-01)
[3430] Sigils - the characters on the start of variable names in Perl, Ruby and Fortran - (2011-09-10)
[3758] Ruby - standard operators are overloaded. Perl - they are not - (2012-06-09)
[4369] Ruby - the second rung of learning the language - (2014-12-28)
[4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
P202 - Perl Fundamentals [184] MTBF of coffee machines - (2005-01-20)
[1312] Some one line Perl tips and techniques - (2007-08-21)
[1726] Hot Courses - Perl - (2008-07-28)
[1826] Perl - Subs, Chop v Chomp, => v , - (2008-10-08)
[1946] Variable Types in Perl - (2008-12-15)
[2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
[2876] Different perl examples - some corners I rarely explore - (2010-07-18)
[3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
[3102] AND and OR operators - what is the difference between logical and bitwise varieties? - (2010-12-24)
[3329] Perl from basics - (2011-06-20)
[3398] Perl - making best use of the flexibility, but also using good coding standards - (2011-08-19)
[3542] What order are operations performed in, in a Perl expression? - (2011-12-07)
[3574] Perl functions such as chop change their input parameters - (2012-01-10)
J703 - Java - Variables [127] Conversion and coercion in Java - (2004-11-22)
[2148] Variable scope in Java Servlets and other web applications - (2009-05-01)
[2153] Class Loading and Variable Conversion in Java - (2009-05-02)
[3038] Setting up individual variables, and arrays, in Java - some commented examples - (2010-11-09)
[3041] Java - basic rules for arithmetic, variables and conversion - (2010-11-10)
[3365] Turning bright delegates into bright and knowledgable ones - (2011-07-21)
[4345] Incrementing a variable in Java - Pre and Post Increment - (2014-12-08)
H103 - PHP - Variables, Operators and Expressions [483] Double Dollars in PHP - (2005-11-02)
[2215] If nothing, make it nothing. - (2009-06-02)
[3916] PHP variables - dynamically typed. What does that mean? - (2012-11-08)
[4642] A small teaching program - demonstration of principles only - (2016-02-08)
C201 - C and C based languages - C Language Fundamentals [888] Turning C from source to a running program - (2006-10-06)
[1671] Compiling C programs with gcc - an overview - (2008-06-10)
[2005] Variables and pointers and references - C and C++ - (2009-01-23)
[2576] What does const mean? C and C++ - (2010-01-15)
[2842] Staring a C course with Hello World - why? - (2010-06-30)
[3120] Learning to write good programs in C and C++ - separating out repeated code - (2011-01-04)
[3234] Your program - you just provide the filling in the sandwich - (2011-04-08)
[3591] Integer types, and integer overflows, in C - (2012-01-25)
[4555] Preprocessor directives in C and C++ - what they mean - (2015-10-27)
[4566] C - why is slow to write and debug) but fast to run? - (2015-11-01)
Some other Articles
The future of canal management and charities - Kennet and Avon Canal biasDoes Well House Manor Hotel in Melksham offer lots of discounts?Passing parameters to Python functions - the options you haveLetter to The EditorDo I need to initialise variables - programming in C, C++, Perl, PHP, Python, Ruby or Java.Between a rock and a hard place.International travel to the UK - coming to MelkshamMelksham Chamber of Commerce - grows to appoint new Press Officer. Welcome. SamSmall scale improvement - big scale gain. And they CAN be done with local knowledgeWanted - a look to the future