[Newbies] RE: Newbie: Error Checking in Dynamically typed Language

Jerome Peace peace_the_dreamer at yahoo.com
Sun Dec 10 05:54:59 UTC 2006

>[Newbies] Newbie: Error Checking in Dynamically typed
>Aditya Siram aditya_siram at hotmail.com 
>Sun Dec 10 03:22:09 UTC 2006 wrote:

>Hi all,
>This is my first time working with a dynamically
typed environment and my 
>first instinct is to error check all arguments. For
example suppose I want 
>to create an object to represent an octet in an IP
address (a number between 
>0 and 256) I would do something like this:
>Object subclass: #Octet
>    instanceVariables: 'octetValue'
>    ......
>    super initialize.
>    octetValue := 0.
>setOctetValue: numBtw0And256
>    octetValue = numBtw0And256        <-------Here's
where I have a problem
>How do I know the numBtw0And256 is actually an
integer between 0 and 256 and 
>not 'cat' or '3.14'?

Octet>>setOctetValue: numBtw0And256
(self isOctet: numBtw0And256 )
	ifTrue: [ octetValue := numBtw0And256 ]
	ifFalse: [ self error: 	'ooch, ouch, eeach, ' 
				, numBtw0And256 printString 
				, ' was supposed to be an octet and it was not.' ]

Octet>>isOctet: anOctet
"True iff rcvr is an octet value
anOctet isInteger ifFalse: [^false ]
^(anOctet min: 256 max: 0 ) = anOctet

alternately you can define isOctet in two places

"False for anything but a small integer"

"True iff rcvr is an octet value
^(self min: 256 max: 0 ) = self

and replace the predicate 
(self isOctet: numBtw0And256 ) with:
numBtw0And256 isOctet
>Since I came from statically typed languages I feel
like I writing a whole 
>bunch of error  checking code along the lines of
ifIsInteger: ... etc which 
>doesn't seem to be in the spirit of Squeak.

If you don't know where your data is coming from it is
good to check it.
Especialy as you write new stuff. You want errors to
point to themselves early.
Later in refactoring you can weed out redundant test
if you need to get back the speed.
Squeak has had a lot of cowboys who code up stuff w/o
checking or taking small steps.
Squeak has a lot of bugs introduced from letting that
code in.
Don't let the spirit of squeak mislead you. Good
programing practices are good programming practices.

Yours in service, -- Jerome Peace

Have a burning question?  
Go to www.Answers.yahoo.com and get answers from real people who know.

More information about the Beginners mailing list