オフサイドルール

オフサイドルール（Off-side Rule）とは、一部のプログラミング言語において字下げによって文などのかたまりの範囲（ブロック）を示す規則である。すなわち、そのような言語ではブロックは字下げによって形成され識別される。この用語と考え方は によるもので、ここでのoff-sideは「(左端)側から離れる」という意味だが、これはサッカーなどの球技におけるオフサイド規則 (offside law) のもじりと考えられる。
レイアウト・ルールと呼ぶこともある。
定義.
ただし言語によっては、一見した見た目が似ているだけで、実際の規則は全く違う場合もある（ただし多くの文献などで、見た目の類似＝同じもの、と紹介されているかもしれない）。
例えばHaskellの layout rule では、codice_1, codice_2, codice_3, codice_4 という限定された4個のキーワードの直後のトークンが開き波括弧ではなかった場合にのみ、そのルールが発動し、改行とインデントの深さに応じて、いくつかの規則に従い、最初の開き波括弧、セミコロン及び閉じ波括弧が補完される、というものである。なおdoについてはdo式（do expressions）というさらに別の、特別な記法の一部でもある。
コード例.
以下の例は Python における字下げブロックを示している（コロンは可読性を高める構文上のマーカーでもある）
def is_even(a):
 if a / 2.0 == a / 2:
 return True
 else:
 return False
他の手法.
前述のように、Landin による提案がオフサイドルールのはじまりと一般に認知されているが、クヌースが"Structured Programming with go to Statements"で引用している Dewey Val Schorreの "Improved Organization for Procedural Languages"（Landin の提案と同じく1966年）に、とあり、ほぼ同時期に他にも（おそらく複数）独立して同様の試行が存在している。
以下ではオフサイドルール以外のブロックの記法について概観する。
Cで一般化した手法として、余分な空白を無視して波括弧 codice_5 と codice_6 でブロックを表すという方法がある。この方法の利点は、自動的に読みやすく字下げすることが可能で、しかもそれによってコードの意味が変化しない点である。人間が読むとき字下げに目が行ってしまい、括弧で表現されている真の構造を読み違える可能性があるが、真の構造をきちんと反映するように自動で修正するという手がある。
LISP（のS式）は、全ての開始と終了を丸括弧ないし角括弧で明示する（中括弧を使用する言語と同様、余分な空白は無視される）。そもそもS式（S-expression）はプログラムコードのリスト構造による内部表現をそのまま一種のリテラルのようにして表現（express）したものである。
他の手法として、ブロックの開始と終了を記号ではなくキーワードで表現する方法がある。ここで論じている他の構文と同様字下げには意味が無い。
ALGOLで一般化した手法として、"codice_7" でブロックを開始し、"codice_8" でブロックを終了するという方法がある（これは、具象構文（見た目）は大きく違うが、抽象構文としては波括弧の言語とさほど違うものではない）。
いくつかの言語では、繰り返しや条件分岐を表現するキーワードが暗黙のうちにブロックの開始（や終了）も表現する。構造化BASICなどでは、ブロックはブロックをともなうキーワード自身（例えば "codice_9"）で開始され、前に "END" をつけたキーワード（例えば "codice_10"）で終了する。Bourne Shellの一部の文法などでは、ブロック終了を示すキーワードは開始するキーワードを逆に綴ったものである（例えば、"codice_11" で始まるブロックは "codice_12" で終了する）。EiffelやRubyでは、ブロックをともなうキーワード自身（たとえば"codice_11"）で開始され、"codice_8"で終了する。