All the languages that we teach have a
for loop or the equivalent, which is a clean way of repeating a block of code with a rising or falling index number. It's used in many circumstances - for example in iterating through the months of the year (
for m goes from 1 to 12) of in stepping through all the members of an ordered [list / array / table]
*
In many cases, the end condition in this type of structure is evaluated
before every iteration of the loop so that a changing end condition will be reflected immediatley. Look at this (Perl)
$j = 8;
for ($k=0; $k<$j; $k++) {
print "Value $k\n";
$j--;
}
which runs like this:
munchkin:laug11 grahamellis$ perl ph
Value 0
Value 1
Value 2
Value 3
munchkin:laug11 grahamellis$
There's a similar structure / setup in PHP, Java, C and C++. See previous article
[here] for a diagram and further example. And it applies to a Tcl
for loop too - there's an example
[here].
However, in some languages the loop terminator is evaluated once before the loop is entered, and no matter how the termination condition / value is changed while the loop is running, the
for statement knows the iteration count from the start
%. Here's a Ruby example:
j = 8
for i in 0..j
puts "Value of loop variable is #{i}"
j -= 1
end
which runs like this:
munchkin:laug11 grahamellis$ ruby rx
Value of loop variable is 0
Value of loop variable is 1
Value of loop variable is 2
Value of loop variable is 3
Value of loop variable is 4
Value of loop variable is 5
Value of loop variable is 6
Value of loop variable is 7
Value of loop variable is 8
munchkin:laug11 grahamellis$
In Lua, too, the loop count is evaluated once before the loop is entered, and that's the iteration count used. From this week's
Lua course there's an example showing that -
[here] and another
[here].
In Python, too, the
for and
range /
xrange construct is a single evaluation at the start. See an example of that
[here].
* - Use "list", "array" or "table" depending on the language you're programming in - they are different words for a sequentially numerically indexed (ordere) collection.
% - In all languages, there is at least one mechanism such as
break or
last to exit prematurley. Rather more dramatically,
return and
exit will get you out of a loop and more besides.
(written 2011-08-18, updated 2012-04-15)
Associated topics are indexed under
H104 - PHP - Control Statements [3200] How a for loop works Java, Perl and other languages - (2011-03-12)
[2912] Predictions for the seagull population - (2010-08-09)
[2304] Extracting real data from an exported file in PHP or Perl - (2009-07-25)
[1825] Question Mark - Colon operator (Perl and PHP) - (2008-10-08)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[1477] Decisions - small ones, or big ones? - (2007-12-18)
[1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
[1199] Testing for one of a list of values. - (2007-05-22)
[1191] Smart English Output - via PHP and Perl ? : operator - (2007-05-18)
[962] Breaking a loop - Ruby and other languages - (2006-12-03)
[863] Double and Triple equals operator in PHP - (2006-09-12)
[657] The ternary operator in Python - (2006-03-25)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[406] Assignment, equality and identity in PHP - (2005-08-08)
[353] Wimbledon Neck - (2005-06-20)
[340] Code and code maintainance efficiency - (2005-06-08)
Y103 - Python - Conditionals and Loops [3558] Python or Lua - which should I use / learn? - (2011-12-21)
[3439] Python for loops - applying a temporary second name to the same object - (2011-09-14)
[3083] Python - fresh examples from recent courses - (2010-12-11)
[2899] Groupsave tickets - 3 or 4 train tickets for the price of 2 - (2010-08-02)
[2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
[1661] Equality, sameness and identity - Python - (2008-05-31)
[1201] No switch in Python - (2007-05-23)
[909] Python is like a narrowboat - (2006-10-30)
[835] Python - when to use the in operator - (2006-08-16)
[788] New - Conditional expressions in Python 2.5 - (2006-07-01)
[668] Python - block insets help with documentation - (2006-04-04)
[299] What - no switch or case statement? - (2005-05-03)
U103 - Lua - Conditionals and loops [3686] The goto statement in Lua - (2012-04-06)
[2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
[2454] For loops in Lua - (2009-10-14)
[2351] Ternary operators alternatives - Perl and Lua lazy operators - (2009-08-12)
[1738] Clean code, jump free (Example in Lua) - (2008-08-06)
[1685] Short circuit evaluation (lazy operator) in Lua - (2008-06-22)
T203 - Tcl/Tk - Conditionals and Loops [3571] Comparing loop commands in Tcl - (2012-01-06)
[3570] Trapping errors in Tcl - the safety net that catch provides - (2012-01-06)
[3189] Tcl - the danger of square brackets in a while command - (2011-03-02)
[2681] Tcl - a great engineering language - (2010-03-17)
[2471] A short form of if ... then ... else - (2009-10-23)
[2261] Tcl - nice and nasty - (2009-06-29)
[1401] Tcl - using [] or {} for conditions in an if (and while) - (2007-10-23)
[210] Joining lists in Tcl. Indirect variables in Tcl. - (2005-02-12)
P204 - Perl - Conditionals and Loops [3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
[2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2550] Do not copy and paste code - there are much better ways - (2009-12-26)
[1727] Equality and looks like tests - Perl - (2008-07-29)
[1607] Learning to program in Perl - (2008-04-11)
[1468] Lexical v Arithemetic testing, Bash and Perl - (2007-12-11)
[930] -> , >= and => in Perl - (2006-11-18)
C203 - C and C based languages - Conditionals and Loops [3384] Loops - a comparison of goto, while and for - (2011-08-10)
[3243] Breaking the running sequence - an introduction to conditional statements and loops - (2011-04-11)
[3121] New year, new C Course - (2011-01-05)
[2570] Function Prototypes in C - (2010-01-11)
[2002] New C Examples - pointers, realloc, structs and more - (2009-01-20)
[1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
R104 - Ruby - Control Structures [3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[3619] Ruby v Perl - a comparison example - (2012-02-21)
[3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
[3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
[3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
[2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
[2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
[2619] Passing code to procedures and yield in Ruby - (2010-02-02)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
[1891] Ruby to access web services - (2008-11-16)
[1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[995] Ruby's case - no break - (2006-12-17)
[985] Equality in Ruby - == eql? and equal? - (2006-12-14)
[960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)
J704 - Java - Loops and Conditional Statements [3038] Setting up individual variables, and arrays, in Java - some commented examples - (2010-11-09)
[2734] for and foreach in Java - (2010-04-22)
Some other Articles
Open Source Training Schedule - learn a programming language - in Autumn 2011 or 2012$ is atomic and % and @ are molecular - PerlFrom fish, loaves and apples to money, plastic cards and BACS (Perl references explained)Perl - making best use of the flexibility, but also using good coding standardsDoes a for loop evaluate its end condition once, or on every iteration?Tables as Objects in Lua - a gentle introduction to data driven programmingParallel but not really parallel. Moving game characters. Coroutines in Lua. The difference between lists and strings - TclRodwell Trail, WeymouthWhat costs 8.20 from Melksham, or 22.30 via Chippenham?