One of the popular exercises I set on our Perl courses goes something like ...
Write a program to ask the user to enter four numbers each between the value of 1 and 6. If the user enters a number below 1 or over 6, ask him to enter that number again. If the user enters the word END, stop reading numbers.
Print out the count, average and total of all the numbers entered. Take care to print an appropriate error message for the average if no numbers were entered.
and I then add
Please try to do the following exercise WITHOUT using the words "while" or "if" in your program. which encourages the use of a
for loop, lazy operators, and constructs such as
unless and
? ... :, even though in real life you would use at lead one
if for this task.
I set the same exercise in Ruby earlier today - unusually, this week's group is not converting from another language such as Perl where such constructs are familiar - they've done a little C and Java, where the options are limited and I wanted to gently encourage them to try these new and powerful facilities. Sample program -
[here] and a comparative example in Perl
[here].
What do I notice as I look at the two programs? A remarkable similarity in the concepts. A simplification in Ruby in terms of not having to think if I'm comparing strings and numbers, but a need in Ruby to convert with
.to_s and
.to_i methods. The lack of $ on local variable names in Ruby, which means that I can't just drop a variable into a string to output it - I need to use
#{...}. And the use of methods in Ruby such as
.chomp as it's so much an object oriented language. With all those changes, every single line of code is different ...
If you want to learn Perl, take a look at our
Perl Courses. If you want to learn Ruby, take a look at our
Ruby Courses. In both cases, we've options to help you learn whether you've never programmed before, if you're experinced in one of the pair and converting, or - as is more usual - if you're somewhere between.
(written 2012-02-21, updated 2012-02-25)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R104 - Ruby - Control Structures [960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)
[962] Breaking a loop - Ruby and other languages - (2006-12-03)
[985] Equality in Ruby - == eql? and equal? - (2006-12-14)
[995] Ruby's case - no break - (2006-12-17)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
[1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[1738] Clean code, jump free (Example in Lua) - (2008-08-06)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
[1891] Ruby to access web services - (2008-11-16)
[1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[2471] A short form of if ... then ... else - (2009-10-23)
[2619] Passing code to procedures and yield in Ruby - (2010-02-02)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
[2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
[3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[3200] How a for loop works Java, Perl and other languages - (2011-03-12)
[3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
[3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
[3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
[3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
[3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[3769] Muttable v immutable and implications - Ruby - (2012-06-20)
[4322] Learning to Program - the conditional statement (if) - (2014-11-21)
[4323] Learning to program - Loop statements such as while - (2014-11-22)
[4370] Conditionals, loops and methods in Ruby - a primer with simple examples - (2014-12-29)
[4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
[4503] Separating your code for easier testing, understanding and re-use; example in Ruby - (2015-06-02)
[4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
[4674] Alternating valuses / flip-flop / toggle - example in Ruby - (2016-05-17)
Q102 - Choosing your language [76] Learning to program in - (2004-10-07)
[1990] Speaking all the languages - (2009-01-12)
[2001] I have not programmed before, and need to learn - (2009-01-19)
[2048] Learning to program in PHP, Python, Java or Lua ... - (2009-02-19)
[2507] Admission - (2009-11-19)
[2535] When should I use Java, Perl, PHP, or Python? - (2009-12-13)
[2536] All the Cs ... and Java too - (2009-12-13)
[2700] The same very simple program in many different programming languages - (2010-03-31)
[2866] Ruby - how does it compare and where is it the right language? - (2010-07-11)
[3169] Rekeying a table - comparison in #Ruby #Perl and #Python - (2011-02-14)
[3558] Python or Lua - which should I use / learn? - (2011-12-21)
[3764] Shell, Awk, Perl of Python? - (2012-06-14)
[3785] Programming languages - what are the differences between them? - (2012-06-27)
P206 - Perl - More Loops and Conditionals [138] Perl - redo and last without a loop - (2004-12-02)
[299] What - no switch or case statement? - (2005-05-03)
[657] The ternary operator in Python - (2006-03-25)
[1191] Smart English Output - via PHP and Perl ? : operator - (2007-05-18)
[1825] Question Mark - Colon operator (Perl and PHP) - (2008-10-08)
[2815] switch and case, or given and when in Perl - (2010-06-17)
[2817] Setting a safety net or fallback value in Perl - (2010-06-19)
[2824] A pint of Black Rat, and a lazy barman - (2010-06-25)
[2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
[2967] Multiway branches in Perl - the given and when syntax - (2010-09-22)
[2972] Some more advanced Perl examples from a recent course - (2010-09-27)
[3398] Perl - making best use of the flexibility, but also using good coding standards - (2011-08-19)
[3914] While, for, foreach or something else to loop. - (2012-11-06)
Some other Articles
Some TestWise examples - helping use Ruby code to check your web site operationLoading Ruby classes - where does Ruby look?Matching regular expressions, and substitutions, in RubyRuby v Perl - a comparison examplelists and struct::list in Tcl - Introduction to struct::list and examplesThe fileutil package and a list of file system commands in TclBus top - colours of LondonHistoric documents for WiltshireTcl - dicts - a tutorial and examples