Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
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)


Back to
Between a rock and a hard place.
Previous and next
or
Horse's mouth home
Forward to
Letter to The Editor
Some other Articles
The future of canal management and charities - Kennet and Avon Canal bias
Does Well House Manor Hotel in Melksham offer lots of discounts?
Passing parameters to Python functions - the options you have
Letter to The Editor
Do 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 Melksham
Melksham Chamber of Commerce - grows to appoint new Press Officer. Welcome. Sam
Small scale improvement - big scale gain. And they CAN be done with local knowledge
Wanted - a look to the future
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3278_Do- ... Java-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb