- Off-side rule
-
This article is about the programming language syntax feature. For other uses, see Offside (disambiguation).
A computer programming language is said to adhere to the off-side rule if the scope of declarations (a block) in that language is expressed by their indentation. The term and the idea are attributed to Peter J. Landin, and the term can be seen as a pun on the offside law of football (soccer).
Contents
Definition
Peter J. Landin, in an article called "The Next 700 Programming Languages", defined the off-side rule thus: "Any non-whitespace token to the left of the first such token on the previous line is taken to be the start of a new declaration."[1]
Code examples
The following is an example of indentation blocks in Python (note also the colons — they are obligatory and not stylistic in Python):[2]
def is_even(a): if a % 2 == 0: print('Even!') return True else: print('Odd!') return False
Alternatives
The primary alternative to delimiting blocks, popularized by C, is to ignore whitespace and mark blocks explicitly with curly brackets (i.e.
{
and}
) or some other delimiter. The main advantage of this is that it makes it possible for tools to correct the indentation automatically. A disadvantage is that if such a tool is not used, it is possible to have a program that works correctly but whose indentation leads a reader astray.Lisp doesn't differentiate statements from expressions, and parentheses are enough to control the scoping of all statements within the language. As in curly bracket languages, the lengths of the whitespaces are ignored.
Another alternative is for each block to begin and end with explicit keywords. Often, this means that newlines are important (unlike in curly brace languages), but the indentation is not. Examples of this rule are the Pascal convention of starting blocks with keyword
begin
and ending them withend
. In BASIC and FORTRAN, blocks begin with the block name (such asIF
) and end with the block name prepended withEND
(e.g.END IF
). The Bourne shell (sh, and bash) is similar, but the ending of the block is usually given by the name of the block written backward (e.g.case
starts a conditional statement and it spans until the matchingesac
).Off-side rule languages
- ABC
- Boo
- BuddyScript
- Cobra
- CoffeeScript
- Curry
- F# (if #light "off" is not specified)
- Genie
- Haml
- Haskell[3] (only for
where
,let
,do
, orof
clauses when braces are omitted) - ISWIM, the abstract language that introduced the rule
- Miranda
- Nemerle
- Occam
- PROMAL
- Python
- Spin
- XL
- YAML
- Nimrod
References
This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.
- ^ Landin, Peter J. (March 1966). "The next 700 programming languages". Communications of the ACM 9 (3): 157–166. doi:10.1145/365230.365257. Archived from the original on 2007-04-17. http://web.archive.org/web/20070417160748/http://www.cs.utah.edu/~wilson/compilers/old/papers/p157-landin.pdf.
- ^ Python FAQ on colons
- ^ The Haskell Report - Layout
Categories:- Programming language topic stubs
- Programming language topics
Wikimedia Foundation. 2010.