Sigil(コンピュータープログラミング)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータプログラミングでは、印章/ ˈsɪdʒəl /変数名に付けられた記号あり、変数のデータまたはスコープ(通常は接頭辞)を示します。ここで、は印章です。 $foo$

ラテン語の シジルからのシジルは、「小さなサイン」を意味し、魔法の力を持っていると思われるサインまたはイメージを意味します。[1] Sigilsを使用して、さまざまなプロパティまたは動作を持つ 名前空間を分離および区別できます。

歴史的背景

シジルの使用は、 BASICプログラミング言語によって普及しましたBASICでの印章の最もよく知られている例は、すべての文字列の名前に追加されたドル記号( " ")です。多くのBASIC方言は、他のシジル( " "など)を使用して整数浮動小数点数とその精度を示し、場合によっては他のタイプも使用します。 $%

Larry Wallは、 Perlプログラミング言語にシェルスクリプトによるシジルの使用を採用しました[要出典] Perlでは、シジルは文字列や整数などのきめ細かいデータ型を指定しませんが、スカラー(接頭辞 " "を使用)、配列( " "を使用)、ハッシュ( " "を使用)のより一般的なカテゴリを指定します)、およびサブルーチン( " "を使用)。Rakuはまた、変数のスコープを示すために次シジルまたは小枝[2]を使用します。楽の小枝の著名な例は次のとおりです。$@%&^"、自己宣言された仮パラメーター("プレースホルダー変数 ")で.使用され、" "、オブジェクト属性アクセサー(つまり、インスタンス変数)で使用されます。

CLIPSでは、スカラー変数の接頭辞は " ?" sigilですが、マルチフィールド(たとえば、1レベルのリスト)変数の接頭辞は " $?"です。

Common Lispでは特別な変数(動的スコープを持つ)は通常、「イヤーマフ規則*」と呼ばれるもので囲まれています。これは単なる慣例であり、強制されていませんが、言語自体が慣例を採用しています(たとえば、* standard-output *)。同様に、一部のプログラマーは定数をで囲みます。 +

CycLでは、変数の前に " ?" sigilが付きます。[3]同様に、定数名の前には「#$」(「ハッシュドル」と発音)が付いています。[4]

Elixirでは、シギルは「~」記号、シギルのタイプを示す文字、区切り文字で提供されます。たとえば~r(foo)、「foo」の正規表現です。他のシジルには~s、文字列と~D日付が含まれます。プログラマーは、独自のシジルを作成することもできます。[5]

MAPPER (別名BIS)では、文字列または文字値は引用符を必要としないため、名前付き変数の接頭辞は「<」で、接尾辞は「>」です。

mIRCスクリプトでは、識別子には " $"の印が付いていますが、すべての変数には " %"というプレフィックスが付いています(ローカル変数、グローバル変数、またはデータ型に関係なく)。バイナリ変数の前には「&」が付いています。

MUMPSプログラミング言語では、「$は組み込み関数名と「特別な変数名」(実行状態にアクセスするための組み込み変数)の前にあります。" $Z"は、非標準の組み込み関数名の前にあります。" $$"は外部関数名の前にあります。ルーチン(プロシージャ、サブルーチン、関数に使用)およびグローバル変数(データベースストレージ)の前には、キャレット(^)が付いています。最後のグローバル変数サブツリーは、キャレットと最後の添え字によって間接的に参照される場合があります。これは「ネイキッドリファレンス」と呼ばれます。システム全体のルーチンとグローバル変数(特定の共有データベースに格納されている)には、接頭辞^%が付いています。これらは「パーセントルーチン」および「パーセントグローバル」と呼ばれます。

Objective-Cでは、「」で始まる文字列リテラル@はオブジェクトタイプのインスタンスであり、 clang v3.1 / LLVM v4.0NSString以降では、、、またはです。接頭辞-は、キーワード、、、およびクラス定義の構造を表すためにも使用されます。クラスの宣言と定義内でも、接頭辞ofはメンバーのメソッドと変数を示すために使用され、接頭辞はクラス要素を示します。 NSNumberNSArrayNSDictionary@interfaceimplementationend-+

主にPerlに触発されPHP言語では、変数名の前に「 $」が付きます。これが接頭辞として付いていない名前は、定数関数、またはクラス名(または、クラスと同じ名前空間を共有するインターフェース名または特性名)と見なされます。

PILOT$、バッファ(文字列変数)に「#」、整数変数に「*」、プログラムラベルに「」を使用します。

Pythonは、デコレータ[6]のアプリケーションにpie構文@と呼ばれる ""プレフィックスを使用し"private"属性にdunderと呼ばれる" "プレフィックスを使用します__

Rubyでは、通常の変数にはシギルがありませんが、 " "はグローバル変数$の前に付けられ、 " "はインスタンス変数の前に付けられ、 " "はクラス変数の前に付けられますRubyは(厳密に従来の)接尾辞sigilsも使用します。 " "は、(通常は)ブールを返す述語メソッドを示します。および「」は、メソッドが予期しない影響を与える可能性があることを示し、注意して処理する必要があります。[7]@@@?!

スキームでは、慣例により、常にブール値を返すプロシージャの名前は通常「?」で終わります。同様に、以前に割り当てられたSchemeオブジェクトの一部(ペア、ベクトル、文字列など)に値を格納するプロシージャの名前は、通常、「!」で終わります。

標準ML'は、型を参照する変数に接頭辞sigil " "を使用します。印章が2倍になる場合、それは平等が定義されているタイプを指します。'」文字は、変数内または変数の最後に表示される場合もあります。その場合、特別な意味はありません。

Transact-SQLでは@、ローカル変数またはパラメータ名の前に「 」が付きます。システム変数(グローバル変数と呼ばれる)は、「@@」プレフィックスで区別されます。

UnixシェルとPerlに部分的に触発されたWindowsPowerShellでは変数名の前に " " sigilが付いています。 $

XSLTでは、変数とパラメーターには$使用時に先頭の "" sigilがありますが、 ""属性で定義されている場合、<xsl:param>または<xsl:variable>" name"属性で定義されている場合、sigilは含まれません。XSLTに関連して、XQuery$は定義と使用 の両方で " "印章形式を使用します。

MELでは、変数名の前に「$」を付けて、関数、コマンド、およびその他の識別子と区別します。

同様の現象

シェルスクリプト変数

UnixシェルスクリプトMakefilesなどのユーティリティでは、「$」は変数の名前をその内容に変換する単項演算子です。これは印章に似ているように見えるかもしれませんが、変数に割り当てるときにドル記号が省略されていることからわかるように 、 Cのポインターの間接参照演算子と同様に、字句間接参照の単項演算子です。*

識別子の規則

Fortranでは、シジルは使用されませんが、文字I、J、K、L、M、およびNで始まるすべての変数はデフォルトで整数です。Fortranのドキュメントでは、これを「暗黙のタイピング」と呼んでいます。明示的な型指定も使用して、任意の変数を任意の型で宣言できます。

PrologHaskellRubyGoを含むさまざまなプログラミング言語は、大文字で始まる識別子を小文字で始まる識別子とは異なる方法で扱います。これは、シギルの使用に関連する方法 です

革砥

実際には、革砥の一種であり、Microsoftの.NET 共通言語インフラストラクチャ(CLI)で多くの言語を使用するには、呼び出し元の言語のキーワードである可能性のある別の言語の変数を使用する方法が必要です。これは、プレフィックスによって行われることがあります。C#では、変数名の前に「@」を付けることができます。これは主に、キーワードと競合する変数名を使用できるようにするために使用されます。[8] VB.Netでも、のように名前を角かっこで囲むことで同じことが実現され[end]ます。[9]

" @"プレフィックスは文字列リテラルにも適用できます。以下の文字通りの接辞を参照してください

ハンガリアン記法

sigilsに関連するのは、ハンガリアン記法です。これは、変数名に特定のアルファベットの接頭辞を付けることによって変数の型を指定する変数命名規則です。ただし、シジルとは異なり、ハンガリアン記法はコンパイラに情報を提供しません。そのため、変数には明示的な型を冗長に指定する必要があります(型推論のある言語を使用する場合を除く)。ほとんどの標準コンパイラはプレフィックスの使用を強制しないため、これにより省略が可能になり、誤って誤って使用されたためにコードが混乱しやすくなります。[10]

文字通りの接辞

sigilsは名前(識別子)に適用されますが、同様のプレフィックスとサフィックスをリテラル、特に整数リテラル文字列リテラルに適用して、リテラルの評価方法またはデータ型を指定できます。たとえば0x10ULL、C ++では値16にunsigned long long整数として評価されます。0xプレフィックスは16進数を示し、サフィックスはunsigned longlongULLを示します。同様に、プレフィックスは、Pythonのように、値を持つ文字列を表す生の文字列を示すためによく使用されます。エスケープされた文字列として、これは。として記述されます。 r"C:\Windows"C:\Windows"C:\\Windows"

これは、識別子(名前)の構文やセマンティクスではなく、リテラルのセマンティクス(値)に影響を与えるため、stropping(識別子構文)でもsigil(識別子セマンティクス)でもありませんが、構文的には似ています。

Javaアノテーション

@Overrideや@Deprecatedなどの Javaアノテーションを比較します。

混乱

場合によっては、同じ構文を異なる目的に使用でき、混乱を招く可能性があります。たとえば、C#では、 " @"プレフィックスは、革砥(予約語を識別子として使用できるようにするため)またはリテラルのプレフィックス(生の文字列を示すため)のいずれかに使用できます。この場合、識別子の構文やリテラルのセマンティクスに影響を与えるので、どちらの使用も印章ではありません。識別子のセマンティクスには影響しません。

も参照してください

参考文献

  1. ^ 「印章の定義」コリンズ英語辞典2012年5月22日取得
  2. ^ 「Perl6変数:Twigils」、Perl6ドキュメント
  3. ^ 「変数–Cycorp」www.Cyc.com 2017年12月31日取得
  4. ^ 「定数–サイコープ」www.Cyc.com 2017年12月31日取得
  5. ^ 「はじめに:印章」Elixir 2022年1月18日取得
  6. ^ 「PEP318-関数とメソッドのデコレータ」
  7. ^ ブラック、デビッドA.(2007年8月15日)。「バングメソッド;または、危険、ルビーストになります!」2016年5月22日にオリジナルからアーカイブされました。
  8. ^ 「C#キーワード」MSDN 2011年3月23日取得
  9. ^ "文字列(C#リファレンス)"MSDN 2011年3月23日取得
  10. ^ Linuxカーネルコーディングスタイル、LinusTorvaldsによる