The Smalltalk programming language reference article from the English Wikipedia on 24-Apr-2004
(provided by Fixed Reference: snapshots of Wikipedia from wikipedia.org)

Smalltalk programming language

Sponsorship the way you would do it

Smalltalk is a dynamically typed object oriented programming language designed at Xerox PARC by Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg, and others during the 1970s. The language was generally released as Smalltalk-80 and has been widely used since. Smalltalk is in continuing active development, and has gathered a loyal community of users around it.

Smalltalk has been a great influence on the development of many other computer languages, including: Objective-C, Actor, Java and Ruby. Many software development ideas of the 1990s came from the Smalltalk community, such as Design Patterns (as applied to software), Extreme Programming and Refactoring. Among Smalltalkers is Ward Cunningham, the inventor of the WikiWiki concept.

Smalltalk's big ideas include:

One surprising feature of Smalltalk is the absence of any built-in progamming constructs: if-then-else, for, while, etc. All of these things are implemented using objects. For example, decisions are made by sending an ifTrue message to a Boolean object, and passing a fragment of code to execute if the Boolean is True. Just about the only built-in construct is the syntax for sending a message to an object.

The following code example for finding the vowels in a string illustrates Smalltalk's style. ( | characters declare variables, : declares parameters, and think of [ and ] as { and } curly braces for the moment):

| aString vowels |
aString := 'This is a string'.
vowels := aString select: [:aCharacter | aCharacter isVowel].
In the last line, the string is sent a select: message with the code block following as an argument. Here's the code in the superclass Collection that does the work:
| newCollection |
newCollection := self species new.
self do: [:each | 
   (aBlock value: each) 
       ifTrue: [newCollection add: each]].
^newCollection
It responds to the message by iterating through its members (this is the do: method) evaluating aBlock code once for each character; aBlock (aCharacter isVowel) when evaluated creates a boolean, which is then sent ifTrue:. If the boolean is true, the character is added to a string to be returned. Because select is defined in the abstract class Collection, we can also use it like this:
| rectangles aPoint|
rectangles := OrderedCollection 
 with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
 with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
aPoint := Point x: 20 y: 20. collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].

Table of contents
1 External Links

External Links

Implementations

Tutorials


Programming languages
Ada | Algol | APL | BASIC | C | C++ | C# | Cg | COBOL | Common Lisp | ColdFusion | Delphi | Eiffel | Forth | FORTRAN | Haskell | Java | JavaScript | Jython | Lisp | Logo | Mesa | ML | Modula-2 | Oberon | Objective-C | Objective Caml | Pascal | Perl | PHP | PL/I | PostScript | Powerbuilder | Prolog | Python | QBASIC | REXX | Ruby | Scheme | Smalltalk | Tcl/Tk | Visual Basic