On Mon, 10 Dec 2007 19:45:21 GMT, Just Another Victim of the Ambient
Morality wrote:

> Variable declarations will help prevent some bugs and will not 
> encourage any others (that I've thought of)!

I think what he's describing is a situation something like this:

[Horb-dee-dorb-dee-dorb, I need a new function to say hello.]

  def say_hello
    var first_name = "Jay"
    puts "Hi, #{first_name}."
  end

[Great, that works perfectly.  Two weeks later:  I need to add some
initialization to that.]

  def say_hello
    init_screen
    init_printer
    init_window_system
    init_text_to_speech

    var first_name = "Jay"
    puts "Hi, #{first_name}."
  end

[Wonderful.  Two weeks later: Oh, yeah, I should actually use those
outputs.]

  def say_hello(destination)
    var destination
  
    if (destination == "screen") 
      init_screen
    if (destination == "printer")
      init_printer
    if (destination == "window")
      init_window_system
    if (destination == "voice") 
      init_text_to_speech

    var first_name = "Jay"
    destination.puts "Hi, #{first_name}."
  end

[Two weeks later: More cruft I don't feel like making up a fake example
for.]

  def say_hello(destination)
    var destination
  
    if (destination == "screen") 
      init_screen
    if (destination == "printer")
      init_printer
    if (destination == "window")
      init_window_system
    if (destination == "voice") 
      init_text_to_speech

    var first_name = "Jay"

    var a = 3 * 4 + 5
    Thread.join
    acts_as_bad_example
    
    destination.puts "Hi, #{first_name}."
  end

[Two weeks later: Hey, why is the name even hard-coded?]

  def say_hello(destination, first_name)
    var destination
    var first_name  

    if (destination == "screen") 
      init_screen
    if (destination == "printer")
      init_printer
    if (destination == "window")
      init_window_system
    if (destination == "voice") 
      init_text_to_speech

    var first_name = "Jay"

    var a = 3 * 4 + 5
    Thread.join
    acts_as_bad_example
    
    destination.puts "Hi, #{first_name}."
  end

Oooooops.

And even if you remember to delete the hardcoding of "first_name"
completely, you could just as easily misspell it in the new definition.

The problem is that requiring "var" on the first use of a variable works
really well if, and only if, you write all your code in order.  

-- 
Jay Levitt                |
Boston, MA                | My character doesn't like it when they
Faster: jay at jay dot fm | cry or shout or hit.
http://www.jay.fm         | - Kristoffer