Benji Smith wrote:
Yigal Chripun wrote:
Maybe it's just me but all those C-style statements seem so arcane and
unnessaccary. real OOP languages do not need control structures to be
part of the language - they're part of the class library instead.
Here's some Smalltalk examples: (and D-like comparable code)
Interesting...
Assuming the core language had no control structures, how would library
authors implement them?
If the language itself lacked IF, ELSE, SWITCH, CASE, DO, WHILE, FOR,
and presumably GOTO... how exactly would you go about implementing them
in a library?
--benji
Simple. using polymorphism and closures (called blocks in Smalltalk).
for example, Here's a simple D implementation for "if", "else":
abstract class Boolean {
void IfTrue(void delegate() dg);
void IfFalse(void delegate() dg);
void IF_ELSE(void delegate() dgTrue, void delegate() dgFalse) {
IfTrue(dgTrue);
IfFalse(dgFalse);
}
...
}
class True : Boolean {
void IfTrue(void delegate() dg) {
dg();
}
void IfFalse(void delegate() dg) { /* nothing to do here */ }
}
// class False is implemented similarly
you use it like this:
(a > 4).IF_ELSE(dg1, dg2);
if (a > 4) is "true" it'll be of the type True (in Smalltalk everything
is an object, btw) therefore the methods of True will be called - IfTrue
will evaluate the delegate, and IfFalse will do nothing.