Previous Table of Contents Next


Character objects make up the individual elements of strings and can be expressed using character literals. Character objects conform to the protocol <Character>:

Protocol <Character> Conforms to: <magnitude>
Messages:
asLowercase ^ <Character> If the receiver is an uppercase letter, returns its lowercase equivalent
asString ^ <string> Creates a string object containing only the receiver
asUppercase ^ <Character> If the receiver is a lowercase letter, returns its uppercase equivalent
codePoint ^ <integer> Returns the encoding of the receiver in the implementation-dependent character set
isAlphaNumeric ^ <boolean> Tests whether receiver is either a letter or a digit
isDigit ^ <boolean> Tests whether the receiver is numeric character
isLetter ^ <boolean> Tests whether the receiver is an alphabetic character
isLowercase ^ <boolean> Tests whether the receiver is a lowercase letter
isUppercase ^ <boolean> Tests whether the receiver is an uppercase letter

Character objects represent individual entries in an implementation-dependent character set. ASCII and Unicode are the character sets most commonly used by Smalltalk implementations. The elements of a character set are integers that are called code points. The message codePoint, when sent to a character object, returns the corresponds code point. A character object that corresponds to a particular code point can be accessed by sending the message codePoint: to the class object named Character:

Protocol <Character class> Conforms to: <classDescription>
Messages:
codePoint: <integer> ^ <Character> Returns the character object corresponding to a code point

Blocks were discussed in section 4.4. They are objects that represent Smalltalk code in a bound to a specific variable environment. The messages for all blocks are defined by <block>. The applicability of other messages depends on the number of arguments defined for the block:

Protocol <block> Conforms to: <Object>
Messages:
argumentCount ^ <integer> Number of arguments required by the block
valueWithArguments: <Array> ^ <Object> Evaluates the block using the arguments

Protocol <block0> Conforms to: <block>
Messages:
ensure: <block0> ^ <Object> Evaluates the receiver, then the cleanup block
ifCurtailed: <block0> ^ <Object> Evaluates the receiver protected by a cleanup block
on: <exceptionSelector>
do: <block1> ^ <Object>
Evaluates the receiver in the context of an exception handler
value ^ <Object> Evaluates the receiver
whileFalse Repetitively evaluates the receiver until it returns true
whileFalse: <block0> Repetitively evaluates the receiver until it returns true; after each evaluation, except the last, evaluates the argument
whileTrue Repetitively evaluates the receiver until it returns false
whileTrue: <block0> Repetitively evaluates the receiver until it returns false; after each evaluation except the last, evaluate the argument

Protocol <block1> Conforms to: <block>
Messages:
value: <Object> ^ <Object> Evaluates the receiver

Protocol <block2> Conforms to: <block>
Messages:
value: <Object> value: <Object> ^ <Object> Evaluates the receiver

Exception classes and exception object were discussed previously in the chapter. Exception classes conform to the protocol <exceptionSelector>, whereas their instances conform to <signaledException>. These protocols are not described here, but examples of their usage can be found section 4.6.

4.7.2. Numeric Protocols

Standard Smalltalk supports four basic types of numeric objects: integers, fractions, floating-point objects (also called floats), and scaled decimal objects. One or more classes can be used to implement each type of number. All numeric classes conform to the protocol <number>. Generally, the arguments to numeric messages can be instances of any class of number. Thus, mixed-mode arithmetic expressions are supported. When an arithmetic message involves different classes of numbers, the result is usually a number object of the more general type. The generality of the numeric types, in descending order is

Float
Scaled decimal
Fraction
Integer


Previous Table of Contents Next