オフサイドルール
出典: フリー百科事典『ウィキペディア(Wikipedia)』
オフサイドルール(Off-side Rule)とは、一部のプログラミング言語において字下げによって宣言の範囲(ブロック)を示す規則である。すなわち、そのような言語ではブロックは字下げによって形成され識別される。この用語と考え方は Peter J. Landin によるもので、サッカーのオフサイド規則から由来していると思われる。(訳注:具体的にサッカーのオフサイドとどう関連しているのかは定かではない。単に左端から字下げする様子が「端から離れている = off side」ということではないかと考えられる)
目次 |
[編集] 定義
- 前の行の空白以外の最初の左端寄りのトークンより左端寄りにあるトークンが新たな宣言の開始として解釈される。
-
- — Peter J. Landin、"The Next 700 Programming Languages"[1]
-
[編集] コード例
以下の例は Python における字下げブロックを示している(コロンは可読性を高める構文上のマーカーでもある)[1]:
def is_even(a): if a / 2.0 == a / 2: return True else: return False
[編集] 他の手法
C言語で一般化した手法として、余分な空白を無視して中括弧 {
と }
でブロックを表すという方法がある。この方法の利点は、自動的に読みやすく字下げすることが可能で、しかもそれによってコードの意味が変化しない点である。欠点は、人間が読むとき字下げに目が行ってしまい、括弧で表現されている真の構造を読み違える可能性がある点である。(⇒字下げスタイル)
LISP言語は文と式を区別せず、全てのスコープの制御を括弧で行う。中括弧を使用する言語と同様、余分な空白は無視される。
他の手法として、ブロックの開始と終了を明確なキーワードで表現する方法がある。中括弧言語とは異なり、改行も重要な意味を持つことが多いが、字下げには意味が無い。この手法の例として Pascal では "begin
" でブロックを開始し、"end
" でブロックを終了する。BASIC言語では、ブロックはブロック名(例えば "IF
")で開始され、ブロック名の前に "END" をつけたキーワード(例えば "ENDIF
")で終了する。Bourne Shell(sh や bash)も似ているが、ブロック終了を示すキーワードはブロック名を逆に綴ったものである(例えば、"case
" で始まる条件文は "esac
" までがスコープとなる)。
[編集] オフサイドルールを採用している言語
[編集] 参考文献
- ^ Landin, Peter J. (3月 1966年). "The next 700 programming languages". Communications of the ACM 9 (3): 157–166. DOI:10.1145/365230.365257.