Hi Eric,
 
Don't know if I can help, but I agree that using attributes is not quite as
clear in the documentation as it might be (although there's an example of
validation on page 82 of the ooRexx Reference). Now I don't claim to be an
expert on attributes, but I do know that OO languages/software have many
ways of implementing the attribute concept. The ooRexx approach, once you
get used to it, is imho rather nice. 
 
The following code aims to provide some examples of using attributes - both
defining them in a class called "MainlyAttributes" and getting/setting then
from outside the class. Each of the three attributes in the class is defined
slightly differently to indicate the range of options available. Hope this
helps.
 
 
/* Check out Attributes
 
   A class with three attributes - x, y, and z, each specified differently:
   x is fully spec'd using the ::attribute directive for both get and set.
     Note the "set" code provided with the ::attribute directive. This code
     constrains the value to be a numeric whole positive number and is taken
     from the ooRexx Reference (page 82).
   y uses the ::attribute statement for gets only; the set is provided as a
     specific method called "y=". This method checks for numeric and returns
     either .true or .false. Note that the returned value must be checked
using
     the "result" special variable. If ,false is returned, the value of y is
set
     to the string "Not Set".
   z uses a single ::attribute directive with default get/set bevavior.
 
*/
 
i = .MainlyAttributes~new
 
say; say "-----------------Attributes Test----------------------------"
 
-- Get initial values of all three attributes:
say "Initial values of attributes assigned in the 'init' method:"
say "x=" i~x " y=" i~y " z=" i~z
 
say; say "Set x to 123 with the statement 'i~x = 123'."
i~x = 123
say "x is now:" i~x
 
say; say "Invoke a method that 'gets' all three attributes:"
i~getAllThree
 
say; say "Set y to an invalid value ..."
say "Invalid: i~y='abc'"
i~y='abc'
say "Result =" result
say "... and now to a valid value:"
say "Valid:   i~y=100"
i~y=100
say "Result =" result
 
say; say "Set z to a different value using i~z='xyz'"
i~z='xyz'
say "z =" i~z
 
say; say "Set x to a valid numeric value using i~x=123"
i~x = 123;
say "i~x =" i~x
 
say; say "Set x to a non-numeric value. This will raise an error and exit."
say "But it's the last example in this program, so an exit here is OK."
i~x = "abc"
 

--
----------------------------------------------------------------------------
-
::class MainlyAttributes
 
  ::attribute x get
  ::attribute x set
    expose x
    use arg value
    -- Prevent x having a value that is not a whole number by throwing an
error
    -- and exiting if x is assigned a bad value:
    if datatype(value, "Whole") = .false | value < 0 then
      raise syntax 93.906 array ("x", value)
    x = value
    return 1
 
  ::attribute y get
 
  ::attribute z
 
  ::method init
    expose x y z
    x = 0
    y = ""
    z = "abc"
 
  ::method getAllThree
    expose x y z
    say "x =" x
    say "y =" y
    say "z =" z
 
  ::method "y="  -- equivalent to  ::attribute y set
    expose y
    use arg a
    if a~datatype("N") then do
      y = a
      return .true
    end
    y = ""
    return .false
 
--
----------------------------------------------------------------------------
-
 


 
  _____  

From: Eric Davidson [mailto:eric-david...@bigfoot.com] 
Sent: 28 December 2011 16:32
To: oorexx-users@lists.sourceforge.net
Subject: [Oorexx-users] ::attribute validation


As an ex-mainframe person who has been using REXX extensively for over 20
years, and using ooRexx procedurally for the last 5. I am trying to update
myself to develop code using the OO techniques.

I have read the documentation and I believe I understand the basics of
methods, but I am currently stuck using attributes - specifically how to
validate the values an attribute can have.

I can't seem to find simple examples of creating methods and validating.

Apologies if this is a basic question that I should have referred elsewhere

Eric Davidson

------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Oorexx-users mailing list
Oorexx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-users

Reply via email to