Skip to main content

Introducing ObjectScript

ObjectScript is an object programming language designed for rapidly developing complex business applications. It is well-suited for a variety of applications including:

  • Business logic

  • Application integration

  • Data processing

ObjectScript source code is compiled into object code that executes within the Caché Virtual Machine. This object code is highly optimized for operations typically found within business applications, including string manipulations and database access. ObjectScript programs are completely portable across all platforms supported by Caché.

You can use ObjectScript in any of the following contexts:

  • Interactively from the command line of the Terminal.

  • As the implementation language for methods of Caché object classes.

  • To create ObjectScript routines: individual programs contained and executed within Caché.

  • As the implementation language for Stored Procedures and Triggers within Caché SQL.

  • As a server-side scripting language within a Caché Server Pages application.

ObjectScript is completely compatible and interoperable with the other Caché native scripting language: Caché Basic.

To learn more about ObjectScript, you can also refer to:

Features

Some of the key features of ObjectScript include:

  • Powerful built-in functions for working with strings.

  • Native support for objects including methods, properties, and polymorphism.

  • A wide variety of commands for directing control flow within an application.

  • A set of commands for dealing with I/O devices.

  • Support for multidimensional, sparse arrays: both local and global (persistent).

  • Support for efficient, Embedded SQL.

  • Support for indirection as well as runtime evaluation and execution of commands.

Language Overview

The following is an introduction to the major elements of ObjectScript.

ObjectScript does not define any reserved words: you are free to use any word as an identifier (such as a variable name). In order to accomplish this, ObjectScript uses a set of built-in commands as well as special characters (such as the “$” prefix for function names) in order to distinguish identifiers from other language elements.

For example, to assign a value to a variable, you can use the SET command:

 SET x = 100
 WRITE x

In ObjectScript it is possible (though not recommended) to use any valid name as an identifier name, as shown in the following program, which is functionally identical to the previous example:

 SET SET = 100
 WRITE SET

Some components of ObjectScript, such as command names and function names, are not case-sensitive. Other components of ObjectScript, such as variable names, labels, class names and method names are case-sensitive. For details refer to “Case Sensitivity” in the “Syntax Rules” chapter of this document.

Whitespace can be inserted or omitted almost anywhere in ObjectScript. However, one use of whitespace is significant; a command cannot start on the first character position on a line, nor can a command continue on the first character position of a line. Thus, all command lines must be indented. Comments must also be indented. However, a label must begin on the first character position of a line, and some other syntax, such as macro preprocessor statements, may begin on the first character position of a line. For details refer to “Whitespace” in the “Syntax Rules” chapter of this document.

ObjectScript does not use a command terminator character or a line terminator character.

Invoking Commands and Functions

ObjectScript syntax, in its simplest form, involves invoking commands on expressions, such as:

   WRITE x

which invokes the WRITE command on the variable x (this displays the value of x). In the example above, x is an expression; an ObjectScript expression is one or more “tokens” that can be evaluated to yield a value. Each token can be a literal, a variable, the result of the action of one or more operators (such as the total from adding two numbers), the return value that results from evaluating a function, some combination of these, and so on. The valid syntax for a statement involves its commands, functions, expressions, and operators.

Statements and Commands

An ObjectScript program consists of a number of statements. Each statement defines a specific action for a program to undertake. Each statement consists of a command and its arguments.

Consider the following ObjectScript statement:

 SET x="World"
 WRITE "Hello",!,x

WRITE is a command. It does exactly what its name implies: it writes whatever you specify as its argument(s) to the current principal output device. In this case, WRITE writes three arguments: the literal string “Hello”; the “!” character, which is a symbolic operator specific to the WRITE command that issues a line feed/carriage return; and the local variable x, which is replaced during execution by its current value. Arguments are separated by commas; you may also add whitespace between arguments (with some restrictions). Whitespace is discussed in the Syntax chapter of this document.

Most ObjectScript commands (and many functions and special variables) have a long form and a short (abbreviated) form (typically one or two characters). For example, the following program is identical to the previous one, but uses the abbreviated command names:

 S x="World"
 W "Hello",!,x

The short form of a command name is simply a device for developers who do not like to type long command names. It is exactly equivalent to the long form. This document uses the long form of command names. For a complete list, see Abbreviations Used in ObjectScript in the Caché ObjectScript Reference.

For more information on commands, refer to the Commands chapter or the individual reference page within the Caché ObjectScript Reference.

Functions

A function is a routine that performs an operation (for example, converting a string to its equivalent ASCII code values) and returns a value. A function is invoked within a command line. This invocation supplies parameter values to the function, which uses these parameter values to perform some operation. The function then returns a single value (the result) to the invoking command. You can use a function any place you can use an expression.

Caché provides a large number of system-supplied functions (sometimes known as “intrinsic” functions), which you cannot modify. These functions are identifiable, as they always begin with a single dollar sign (“$”) and enclose their parameters within parentheses; even when no parameters are specified, the enclosing parentheses are mandatory. (Special variable names also begin with a single dollar sign, but they do not have parentheses.)

Many system-supplied function names have abbreviations. In the text of this manual, the full function names are used. The abbreviation is shown on the function’s reference page and a complete list is provided in Abbreviations Used in ObjectScript in the Caché ObjectScript Reference.

A function always returns a value. Commonly, this return value is supplied to a command, such as SET namelen=$LENGTH("Fred Flintstone") or WRITE $LENGTH("Fred Flintstone"), or to another function, such as WRITE $LENGTH($PIECE("Flintstone^Fred","^",1)). Failing to provide a recipient for the return value usually results in a <SYNTAX> error. However, in a few functions, providing a recipient for the return value is not required. An operation performed by executing the function (such as moving a pointer), or the setting of one of the function’s parameters is the relevant operation. In these cases, you can invoke a function without receiving its return value by using the DO or JOB command. For example, DO $CLASSMETHOD(clname,clmethodname,singlearg).

A function can have no parameters, a single parameter, or multiple parameters. Function parameters are positional and separated by commas. Many parameters are optional. If you omit a parameter, Caché uses that parameter’s default. Because parameters are positional, you commonly cannot omit a parameter within a list of specified parameters. In some cases (such as $LISTTOSTRING) you can omit a parameter within a parameter list and supply a placeholder comma. You do not have to supply placeholder commas for optional parameters to the right of the last specified parameter.

For most functions, you cannot specify multiple instances of the same parameter. The exceptions are $CASE, $CHAR, and $SELECT.

Commonly, a parameter can be specified as a literal, a variable, or the return value of another function. In a few cases, a parameter must be supplied as a literal. In most cases, a variable must be defined before it can be specified as a function parameter, or an <UNDEFINED> error is generated. In a few cases (such as $DATA) the parameter variable does not have to be defined.

Commonly, function parameters are input parameters that supply a value to the function. A function does not modify the value of a variable supplied as an input parameter, In a few cases, a function both returns a value and sets an output parameter. For example, $LISTDATA returns a boolean value indicating whether there is a list element at the specified position; it also (optionally) sets its third parameter to the value of that list element.

All functions can be specified on the right side of a SET command (for example, SET x=$LENGTH(y)). A few functions can also be specified on the left side of a SET command (for example, SET $LIST(list,position,end)=x). Functions that can be specified on the left side of a SET are identified as such in their reference page syntax block.

System-supplied functions are provided as part of Caché. The ObjectScript Language Reference describes each of the system-supplied functions. A function provided in a class is known as a method. Methods provided in Caché are described in the InterSystems Class Reference.

In addition to its system-supplied functions, ObjectScript also supports user-defined functions (sometimes known as “extrinsic” functions). For information on defining and calling user-defined functions, refer to User-Defined Code.

Expressions

An expression is any set of tokens that can be evaluated to yield a single value. For example, the literal string, “hello”, is an expression. So is l + 2. Variables such as x, functions such as $LENGTH(), and special variables such as $ZVERSION also evaluate to an expression.

Within a program, you use expressions as arguments for commands and functions:

 SET x = "Hello"
 WRITE x,!
 WRITE 1 + 2,!
 WRITE $LENGTH(x),!
 WRITE $ZVERSION

Variables

In ObjectScript, a variable is the name of a location in which a runtime value can be stored. Variables must be defined, for example, by using the SET command, but they do not have to be typed. Variables in ObjectScript are untyped; that is, they do not have an assigned data type and can take any data value. (For compatibility, the $DOUBLE function can be used to convert untyped floating point numbers to a specific numeric data type format.)

ObjectScript supports several kinds of variables:

  • Local variables — A variable that is accessible only by the Caché process that created it, and which is automatically deleted when the process terminates. A local variable is accessible from any namespace.

  • Process-private globals — A variable that is accessible only by the Caché process and is deleted when the process ends. A process-private global is accessible from any namespace. Process-private globals are especially useful for temporary storage of large data values.

  • Globals — A persistent variable that is stored within the Caché database. A global is accessible from any process, and persists after the process that created it terminates. Globals are specific to individual namespaces.

  • Array variables — A variable with one or more subscripts. All user-defined variables can be used as arrays, including local variables, process-private globals, globals, and object properties.

  • Special variables (also known as system variables) — One of a special set of built-in variables that contain a value for a particular aspect of the Caché operating environment. All special variables are defined; Caché sets all special variables to an initial value (sometimes a null string value). Some special variables can be set by the user, others can only be set by Caché. Special variables are not array variables.

  • Object properties — A value associated with, and stored within, a specific instance of an object.

ObjectScript supports various operations on or among variables. Variables are described in much greater detail in the Variables chapter of this document.

Operators

ObjectScript defines a number of built-in operators. These include arithmetic operators, such as addition (“+”) and multiplication (“*”), logical operators, and pattern match operators. For details, refer to the Operators chapter of this document.

Relationship with ISO Standard M

ObjectScript is a superset of the ISO 11756-1999 standard M programming language. If you are an M programmer you can run your existing M applications on Caché with no change.

ObjectScript offers a number of significant improvements over ISO-standard M including:

  • Integrated support for objects and object-oriented programming.

  • Procedure and control blocks using { } syntax.

  • Relaxed whitespace requirements.

  • Many new functions.

You can take advantage of these new features in an evolutionary fashion, using them within your applications as you see fit.

FeedbackOpens in a new tab