[REBOL] Re: About Standards and Best Practices
From: rebol:techscribe at: 2-Sep-2003 9:06
To flesh out Andrew's reply a little:
1. Use objects if you want to process assemblies of values (records)
that share the same structure uniformly, even though at times some of
the values may be missing. The prototype object ensures that all data
instances will have a complete set of fields that are initialized with
some useful value (in our example we'll be generating reports, and
therefore if a record is missing some data, we will want to display
N/A
in our report). Now, even though our records are deficient (see
the two records examples below), they can be treated uniformly, i.e.
without implementing exception handling for missing values:
Example:
person!: make object! [
first-name: "N/A" last-name: "N/A"
phone: "N/A"
email: "N/A" website: "N/A"
address: "N/A"
]
persons: make block! 1000
;- deficient record: no email address or web site
append persons make person! [
first-name: "Tom" last-name: "Smith"
phone: "555-555-5555"
address: "Main Street, Ukiah, CA 95482"
]
;- deficient record: no phone number or web site
append persons make person! [
first-name: "Bill" last-name: "Jones"
address: "Main Street, Ukiah, CA 95482"
email: "[bjones--earthlink--net]"
]
;- generic display function
display-list: func [field] [
foreach person persons [
print [
person/first-name person/last-name get in person field
]
]
]
list-phone-numbers: does [ display-list 'phone ]
list-email-addresses: does [ display-list 'email ]
list-addresses: does [ display-list 'address ]
list-phone-numbers
list-email-addresses
list-addresses
2. Use objects, when you have hierarchies of structures:
animal!: make object! [ species: "N/A" extinct: "N/A"]
dinosaur: make animal! [ species: "Mamal" extinct: "Yes" lived-from:
1965 lived-to: 1979 ] ;- must lookup those numbers!
cat: make animal! [ species: "Mamal" extinct: "No" likes: "Milk, Mice,
Fireplace" ]
3. Use objects to subcatgorize data:
contact!: make object! [
name: "N/A" first-name: "N/A"
phone: "N/A"
address: "N/A"
email: "N/A" website: "N/A"
]
company!: make object! [
office: make contact! []
contact: make contact! []
]
rebol-tech: make company! [ office: make contact! [ ....] contact: make
contact! [ .... ] ]
That will enable you to look up office related data as
rebol-tech/office/... and contact related data as rebol-tech/contact/...
with both subcategories having the same structure, i.e. you can again
implement a single set of functions to process both types of data.
Andrew Martin wrote: