web-dev-qa-db-ja.com

メソッド名の最大長

選択したプログラミング言語でのメソッド名の最大長を知っている人はいますか?これをC#固有の質問にしようと思っていましたが、スペクトル全体で知っておくといいと思います。

同様に関与する要因は何ですか:

  • 言語仕様はこれを制限しますか?
  • コンパイラはそれを何に制限しますか?
    • 32ビットマシンと64ビットマシンでは違いがありますか?
41
Josh

C#の場合、指定されたハード制限があるとは思わない。 (たとえば、C#5仕様のセクション2.4.2には制限がありません。)Roslynv2.2.0.61624には1024文字の制限があるようです。これは読みやすさの限界をはるかに超えており、賢明な機械生成の名前ですらあります。

Javaの場合、 仕様のセクション3.8 は次のように述べています。

識別子は、Java文字とJava数字の無制限の長さのシーケンスであり、最初はJava文字。

35
Jon Skeet

PHPは、スクリプトのメモリ制限によってのみ制限されているようです。

128Mbで、400万文字のクラス(およびメソッド)を作成することができました。

<?php
ini_set('memory_limit', '128M');
$i = 1024 * 1024;

while ($i < 10000000)
{
    $className = str_repeat('i', $i);
    eval("class $className { public function $className() { echo '$i<br>'; } }");
    new $className();
    $i *= 2;
}

?>
20
Greg

C#Visual Studio 2010(x64)でテストを行いました:識別子を作成しました:

int a123456789a123...;

そして繰り返された。 512文字で、VSは「識別子が長すぎます」というエラーを表示します。 511でも大丈夫です。 (Wordで文字数を確認しました。)

もう一つの例:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
17
DLeh

MicrosoftのC#実装は511、VB.NET実装は1023です。

Visual Studioは、識別子の最初の511(VBの場合は1023)文字のみを色付けし、残りは黒のままにします。

12
Kirill Osenkov

一般的なLISPシンボルの名前は文字列です。文字列の長さの制限はarray-dimension-limitです。

array-dimension-limitの値は、配列の個々の次元の排他的な上限である正の整数です。この境界は実装によって異なりますが、1024以上になります(実装者は、パフォーマンスを犠牲にすることなく、この制限を実行可能な限り大きくすることをお勧めします。)

実際には、これはかなり大きくなる可能性があります

Welcome to Clozure Common LISP Version 1.3-dev-r11583M-trunk  (DarwinX8664)!
? array-dimension-limit
72057594037927936
? 

Welcome to Clozure Common LISP Version 1.3-dev-r11583M-trunk  (DarwinX8632)!
? array-dimension-limit
16777216
? 

この回答では、メソッド名のパッケージ名は無視されます。これにより、長さが2倍になる可能性があります。

5
Doug Currie

c#では511文字の長さです。

4
shinji14

進行中(OpenEdge)の制限は32文字です。

2
vince

Dでは、これが当てはまるかどうかはわかりませんが、100 MBを超えるような非常識なものであると思います。メモリ不足の可能性があります。これは、私や他の人がシンボル名に対して約11kBのオブジェクトファイル形式の制限に遭遇し、これが修正されたことを知っていることに基づいています。

0
BCS

Javaでは、長さの制限は与えられていません。 オンラインのSunからこれを参照してくださいJavaチュートリアル

変数名では大文字と小文字が区別されます。変数の名前は、任意の正当な識別子にすることができます—文字で始まるUnicode文字と数字の無制限の長さのシーケンス...

上記の他のように、長さは使用可能なメモリに依存すると思います。

0
Bill