I learned programming on HyperCard. Everything essential was there: loops, conditionals, variables (local by default, global if you declared it such), subroutines, and a pretty powerful object orientation.
I wrote a stack for the newspaper I once worked for, that took the daily nationwide temperature reports and massaged them into something suitable for printing. I was rather proud of that at the time.
The object orientation even included inheritance, of a sort. There was a handler (HC's term for method) called openCard that was called whenever a new card was shown. If there was no openCard handler attached to the card that was opening, the background's (series of cards with a shared layout and handlers) openCard handler was called. Then the stack's. If it still wasn't handled, the handler in the "Home" stack was called.
If you did handle that somewhere along the way, you could elect to pass the message on and let the "superclass's" scripts take a whack at it.
The Home stack was a superclass of sorts for every stack in HyperCard. You could modify behavior globally from there (it could be overridden, of course, by individual cards, stacks, etc.). You could also insert arbitrary stacks into the search order. Some of Apple's demonstration stacks did that, as I recall.
The search order was the same for pre-defined handlers as well as user-defined handlers.
- Aaron