コンピュータプログラミングにおいて、シジル(/ ˈsɪdʒəl /)は変数名に付加される記号で、変数のデータ型またはスコープを示し、通常は接頭辞として使用されます。例えば、 のように、はシジル$fooです$。
シジルは、ラテン語のsigillum(「小さな印」を意味する)に由来し、魔法の力を持つとされる印や画像を意味します。 [ 1 ]シジルは、異なる特性や動作を持つ名前空間を分離および区別するために使用できます。
記号の使用は、BASICプログラミング言語によって普及しました。BASICにおける記号の最もよく知られた例は、すべての文字列名の末尾に付加されるドル記号(" ")です。多くのBASIC方言では、整数や浮動小数点数とその精度を表すために、他の記号(" "など)が使用され、場合によっては他の型も使用されます。$%
ラリー・ウォールは、自身のPerlプログラミング言語にシェルスクリプトのシジルの使用法を採用した。Perlでは、シジルは文字列や整数などの細かいデータ型を指定するのではなく、スカラー(接頭辞「」を使用)、配列(「」を使用)、ハッシュ(「」を使用)、サブルーチン(「 」を使用)といったより一般的なカテゴリを指定する。Rakuでは、変数のスコープを示すために、二次シジル、またはトゥイギル[ 2 ]も使用する。Rakuのトゥイギルの代表的な例としては、自己宣言された仮パラメータ(「プレースホルダー変数」)で使用される「 」(キャレット)や、オブジェクト属性アクセサ(インスタンス変数)で使用される「 」などがある。$@%&^.
CLIPSでは、スカラー変数には「 」記号が接頭辞として付き?、マルチフィールド(1レベルリストなど)変数には「$?」が接頭辞として付きます。
Common Lispでは、特殊変数 (動的スコープを持つ) は通常、` <input> `で囲まれます。これは*「イヤーマフ規約」と呼ばれています。これは単なる慣習であり、強制されるものではありませんが、言語自体がこの慣習を採用しています (例: *標準出力*)。同様に、定数を `<input>` で囲むプログラマーもいます。+
CycLでは、変数には「 」記号が接頭辞として付けられます?。[ 3 ]#$同様に、定数名には「 」(「ハッシュダラー」と発音)が接頭辞として付けられます。 [ 4 ]
Elixirでは、シジルは「~」記号の後にシジルの種類を示す文字、そして区切り文字が続きます。たとえば、~r(foo)は「foo」の正規表現です。その他のシジルには、~s文字列用の や~D日付用の などがあります。プログラマーは独自のシジルを作成することもできます。[ 5 ]
難解なINTERCALでは、変数は16ビット整数識別子で、.16ビット値の場合は「 」(「spot」と呼ばれる)、:32ビット値の場合は「 」(「twospot」と呼ばれる)、,16ビット値の配列の場合は「 」(「tail」)、;32ビット値の配列の場合は「 」(「hybrid」)のいずれかが接頭辞として付けられます。[ 6 ]後のCLC-Intercalでは、@値を持たない変数(クラスに使用)用に「 」(「whirlpool」)と、変更されたコンパイラ_を格納するために「 」が追加されました。[ 7 ]
MAPPER (別名BIS)では、文字列や文字値には引用符が必要ないため、名前付き変数には「<」を接頭辞として、「">」を接尾辞として付けます。
mIRC スクリプトでは、識別子には「$」記号が付き、すべての変数には「%」が接頭辞として付きます (ローカル変数、グローバル変数、データ型に関係なく)。バイナリ変数には「 」が接頭辞として付きます&。
MUMPSプログラミング言語では、「 $」は組み込み関数名と「特殊変数名」(実行状態にアクセスするための組み込み変数)の前に付きます。「$Z」は非標準の組み込み関数名の前に付きます。「$$」は外部関数名の前に付きます。ルーチン(プロシージャ、サブルーチン、関数に使用)とグローバル変数(データベース格納)には、キャレット(^)が接頭辞として付きます。最後のグローバル変数サブツリーは、キャレットと最後の添え字で間接的に参照できます。これは「裸の参照」と呼ばれます。システム全体のルーチンとグローバル変数(特定の共有データベースに格納)には、^% が接頭辞として付きます。これらは「パーセントルーチン」と「パーセントグローバル」と呼ばれます。
Objective-Cでは、" " で始まる文字列リテラル@はオブジェクト型のインスタンスですNSString。または、 clang v3.1 / LLVM v4.0 以降では、、NSNumberまたはNSArrayですNSDictionary。プレフィックスは、@キーワードinterface、、、にも使用されimplementation、endクラス定義の構造を表します。クラスの宣言と定義内でも、プレフィックスは-メンバメソッドと変数を示すために使用され、プレフィックスは+クラス要素を示します。
PHP言語はPerlから大きな影響を受けており、変数名の前には「 」が付きます。この接頭辞が付いていない名前は、定数、関数、クラス名(またはクラスと同じ名前空間を共有するインターフェース名やトレイト名)とみなされます。$
PILOT では$、バッファ (文字列変数) には " "、#整数変数には " "、*プログラム ラベルには " "を使用します。
Python では、プライベート属性には「 dunder」__と呼ばれる「 」という接頭辞を使用します。
Rubyでは、通常の変数にはシジルがありませんが、グローバル変数$には "が、インスタンス変数には "が、クラス変数には " が接頭辞として付けられます。Ruby では、(厳密には慣習的な)サフィックスシジルも使用できます。 " は、ブール値または真偽値を返す述語メソッドを示し、 " は、メソッドが予期しない効果をもたらす可能性があり、注意して扱う必要があることを示します。[ 8 ]@@@?!
Schemeでは、慣例として、常にブール値を返す手続きの名前は通常 " ?" で終わります。同様に、以前に割り当てられた Scheme オブジェクト (ペア、ベクトル、文字列など) の一部に値を格納する手続きの名前も通常 " !" で終わります。
標準MLでは'、型を参照する変数には接頭辞「 」を使用します。この接頭辞が二重になっている場合は、等価性が定義されている型を参照していることを意味します。「 '」文字は変数の中または末尾にも出現しますが、その場合は特別な意味はありません。
Transact-SQLでは、@ローカル変数またはパラメーター名の前に「 」が付きます。システム関数 (以前はグローバル変数と呼ばれていました) は、「@@」という接頭辞で区別されます。一時テーブルのスコープは、#ローカルを示す「 」と##グローバルを示す「 」という接頭辞で示されます。
UnixシェルやPerlに部分的に影響を受けたWindows PowerShellでは、変数名の前に「 」記号が付きます。$
XSLTでは、変数とパラメータは$使用時に先頭に「 」記号が付きますが、「 」属性で定義されている場合、または「 」属性で定義されている場合は、記号は含まれません。XSLTに関連して、XQueryは定義時と使用時の両方で「 」記号形式を使用します。<xsl:param><xsl:variable>name$
MELでは、変数名に$は関数、コマンド、その他の識別子と区別するために「 」が接頭辞として付けられます。
UnixシェルスクリプトやMakefileなどのユーティリティでは、「$」は変数名をその内容に変換する単項演算子です。これは記号に似ているように見えるかもしれませんが、実際にはC言語のポインタの逆参照演算子と同様に、字句参照のための単項演算子です。これは、変数に代入する際にドル記号が省略されることからもわかります。*
Fortranでは、シジルは使用されませんが、I、J、K、L、M、Nで始まる変数はすべてデフォルトで整数型になります。Fortranのドキュメントでは、これを「暗黙的な型付け」と呼んでいます。明示的な型付けも可能で、任意の変数を任意の型で宣言できます。
Prolog、Haskell、Ruby、Goなどの様々なプログラミング言語では、大文字で始まる識別子と小文字で始まる識別子を異なる方法で扱います。これは、記号の使用に関連した慣習です。
実際にはストロッピングの一種で、Microsoft の.NET共通言語インフラストラクチャ(CLI) で多くの言語を使用するには、呼び出し元の言語でキーワードになる可能性のある別の言語の変数を使用する方法が必要です。これは、プレフィックスを使用して行われることがあります。C #では、任意の変数名に " をプレフィックスとして付けることができます@。これは主に、そうでなければキーワードと競合する変数名の使用を可能にするために使用されます。[ 9 ] VB.Netでは、名前を角括弧で囲むことによって同じことが実現されます。例: [end]。[ 10 ]
接頭辞「@」は文字列リテラルにも適用できます。詳細は下記のリテラル接頭辞を参照してください。
シジルに関連するものとして、ハンガリアン記法があります。これは、変数名に特定のアルファベット接頭辞を付けることで変数の型を指定する変数命名規則です。しかし、シジルとは異なり、ハンガリアン記法はコンパイラに情報を提供しません。そのため、型推論機能を持つ言語を使用しない限り、変数の型を明示的に冗長に指定する必要があります。ほとんどの標準コンパイラは接頭辞の使用を強制しないため、省略が可能になり、また、意図しない誤った使用によりコードが混乱しやすくなります。[ 11 ]
記号は名前(識別子)に適用されますが、同様の接頭辞と接尾辞はリテラル、特に整数リテラルと文字列リテラルに適用でき、リテラルの評価方法またはデータ型を指定します。たとえば、0x10ULLC++ では、 は unsigned long long 整数として値 16 に評価されます。0x接頭辞は 16 進数を示し、接尾辞はunsigned long long を示します。同様に、接頭辞は、Python ののように、生の文字列ULLを示すためによく使用されます。これは、値 の文字列を表します。エスケープされた文字列としては、 と記述されます。r"C:\Windows"C:\Windows"C:\\Windows"
これは、識別子(名前)の構文や意味ではなく、リテラルの意味(値)に影響を与えるため、ストロッピング(識別子の構文)でもシジル(識別子の意味)でもありませんが、構文的には類似しています。
@Overrideや@DeprecatedなどのJavaアノテーションを比較してください。
場合によっては、同じ構文が複数の目的に使用されることがあり、混乱を招く可能性があります。たとえば、C#では、「@」プレフィックスは、ストロッピング (予約語を識別子として使用できるようにするため) またはリテラルのプレフィックス (生の文字列を示すため) のどちらにも使用できます。この場合、どちらの使用方法もシジルではありません。なぜなら、識別子の構文またはリテラルの意味に影響を与え、識別子の意味には影響しないからです。