[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Non-declared variables

Gavin Kistner

10/16/2006 3:10:00 PM

From: Avatar [mailto:acampbellb@hotmail.com]
> Are there real tangible benefits that non-declared, dynamically typed
> (at binding time) variables provide? Or do dynamic variables simply
> create less compile time errors and more (harder to catch) runtime
> errors?

Every language feature that reduces how much typing I have to do is a
tangible benefit to me. It eases stress on my body machine, and speeds
the delivery of my code.

The only downside I can think of is that typos may not be caught for
instance/class variables as readily:

class Foo
def bar
@somethingDelicious = 12
end
def whee
print( @sonethingDeIicious )
end
end

If you personally find that you are having trouble in this arena, I
suspect that it wouldn't be hard to write a code analyzer that alerted
on potential misspellings. I've personally not needed it.

6 Answers

Ara.T.Howard

10/16/2006 3:30:00 PM

0

Martin Coxall

10/16/2006 3:36:00 PM

0

> Every language feature that reduces how much typing I have to do is a
> tangible benefit to me. It eases stress on my body machine, and speeds
> the delivery of my code.

That seems a ridiculous thing to say to me. Time taken to type out
code is not the limiting factor in your productivity.

If you sacrifice readability, maintainibility, safety, extensibility
or supportibility for a fewer characters, it's hardly a worthwhile
tradeoff.

Terseness is not a virtue. If it were, I'd be a perl programmer.

Martin

James Gray

10/16/2006 3:47:00 PM

0

On Oct 16, 2006, at 10:29 AM, ara.t.howard@noaa.gov wrote:

> On Tue, 17 Oct 2006, Gavin Kistner wrote:
>
>> From: Avatar [mailto:acampbellb@hotmail.com]
>>> Are there real tangible benefits that non-declared, dynamically
>>> typed
>>> (at binding time) variables provide? Or do dynamic variables simply
>>> create less compile time errors and more (harder to catch) runtime
>>> errors?
>>
>> Every language feature that reduces how much typing I have to do is a
>> tangible benefit to me. It eases stress on my body machine, and
>> speeds
>> the delivery of my code.
>>
>> The only downside I can think of is that typos may not be caught for
>> instance/class variables as readily:
>>
>> class Foo
>> def bar
>> @somethingDelicious = 12
>> end
>> def whee
>> print( @sonethingDeIicious )
>> end
>> end
>>
>> If you personally find that you are having trouble in this arena, I
>> suspect that it wouldn't be hard to write a code analyzer that
>> alerted
>> on potential misspellings. I've personally not needed it.
>
> for those of you using vim, the completion feature virtually
> eliminates this
> kind of bug. for instance, i can type @som, then hit 'ctrl-n', and
> @somethingDelicious simply appears. this is a huge bug stopper for
> me,
> because i reely cant spel.

In TextMate this is done with the escape key and I couldn't agree
more about it being an excellent habit to get into.

James Edward Gray II

Gavin Kistner

10/16/2006 4:12:00 PM

0

Gavin Kistner wrote:
> If you personally find that you are having trouble in this arena, I
> suspect that it wouldn't be hard to write a code analyzer that alerted
> on potential misspellings.

Here's a simple example I just came up with. (If this were to be taken
a little further, it should probably report line numbers. If it were to
be taken a lot further, it should probably use actual parsing of Ruby
code to determine class scope for variables, leave out things that look
like variables inside strings/regexp/comments, etc.)

require 'typochecker'

class Foo
def foo
@@name = 'boot'
@name = 'wow'
@somethingDelicious = 12
end
def whee
print( @mane, @@names )
print( @somethingDelicions )
end
end
#=> Possible typo: @@name versus @@names
#=> Possible typo: @name versus @mane
#=> Possible typo: @somethingDelicious versus @somethingDelicions


(typochecker.rb)
# http://po-ru.com/files/levenshtein/1.3/leve...
require 'levenshtein'

source = IO.read( $0 )
cvars, ivars = source.scan( /@{1,2}\w+/ ).partition{ |v| /^@@/ =~ v }
[ cvars, ivars ].each{ |vars|
vars.each_with_index{ |v1, i|
vars[ (i+1)..-1 ].each{ |v2|
if Levenshtein.distance( v1, v2 ) <= 2
warn "Possible typo: #{v1} versus #{v2}"
end
}
}
}

Ara.T.Howard

10/16/2006 4:42:00 PM

0

Martin Coxall

10/16/2006 4:47:00 PM

0

> it's not the actual typing of the lines that takes so long - it's reasoning
> over it.

Yes, which is really my point. It's not about reducing keystrokes.
it's about expressiveness.

Martin