0

あなたの言語でキーワードの競合をどのように回避していますか?

たとえば、生成するレポートのすべての構成変数を保持するクラス (VB 2008) を作成しています。当然、変数の 1 つは「日付」です。もちろん、キーワードと同じ名前を付けることはできません。VB 2008 では、競合する単語を [] で囲んで修正するオプションがありますが、私は常にそれをハックと見なしてきました。助言がありますか?一般的なキーワードを回避するために、あなたの名前は何ですか?

視覚化に役立つコード...

Dim m_Title As String

Dim m_Date As String

Public Property Title() As String
    Get
        Return m_Title
    End Get
    Set(ByVal value As String)
        m_Title = value
    End Set
End Property


Public Property [Date]() As String
    Get

    End Get
    Set(ByVal value As String)

    End Set
End Property 
4

9 に答える 9

5

おそらく、変数のより具体的な性質について考えてみませんか?

あなたの例から、「日付」は「作成日」または「投稿日」またはその他のものにすることができます。変数名が平凡すぎる場合は、コードを単純化しすぎている (またはわかりにくくしている) 可能性があります。明確で簡潔な変数名を作成して、同僚を助けてください。

于 2009-07-17T19:57:56.797 に答える
1

[Date]ハックと見なさないでください。プロパティが日付を表す場合は、 と呼ぶ必要がありますDate。仕事を完了するために利用可能なツールを使用してください。個人的には、そのような競合を回避するためだけの名前を持つプロパティは、プロパティを使用するたびに対処する必要があるため、ハックのように感じます。

于 2009-07-17T20:00:56.930 に答える
1

変数名のスペルを間違えてください!

于 2009-07-17T20:05:34.923 に答える
1

.NET では、共通言語仕様 (CLS) を対応すべき最小公約数と見なすのが合理的です。これは、ECMA-335「Common Language Infrastructure (CLI) Partitions I to VI」に記載されています。名前について具体的に述べていることは次のとおりです。CLS ルール #4 (8.5.1「有効な名前」) のメモ:

CLS (消費者): CLS ルール 4 に違反する型を消費する必要はありませんが、独自のキーワードの 1 つを名前として使用する名前付きアイテムへのアクセスを許可するメカニズムが必要です。

いいえ、それは実際にはハックではなく、明確なルールです。これが存在する理由は、.NET はそれを対象とする言語に関しては拡張可能であるため、名前の衝突は避けられないからです。C# をカバーする場合、VB があります。C# と VB をカバーするなら、C++/CLI があります。これらすべてをカバーするなら、F# と Delphi Prism があります。等々。したがって、言語がキーワードを識別子としてエスケープする方法を提供することがCLSによって義務付けられている理由。私がリストしたすべての言語は、そうするための何らかの方法を提供します (したがって、CLS コンシューマに準拠しています)。

一般に、C# または VB の非コンテキスト キーワードとの衝突を避けることは、依然として良いマナーであると考えられています。これは主に、これらの 2 つの言語が非常に大きな差で最も人気があるためです。たとえば、それが理由であり、それHashSetだけではありませんSet- 後者は VB キーワードです。完全なリストは次のとおりです。

于 2009-07-17T20:10:11.280 に答える
0

「日付_」または「_日付」。

于 2009-07-17T20:12:12.727 に答える
0

ほとんどの言語には、予約語をエスケープする何かがあります。C# には @ があるため、@class を引数名として使用できます (MVC の採用者が学習しているもの)。

ドメインがそれを説明するために特定の単語を使用すると述べている場合、それが予約語のエスケープの目的です。予約語をエスケープしてモデルをドメインに近づけることを恐れません。たとえそれがより多くのタイピングを意味するとしても - 明快さはそれだけの価値があります!

于 2009-07-17T19:57:48.263 に答える
0

キーワードと名前が衝突するのを避けるために、私は単純にキーワードを使用しません。

あなたの場合、日付。何の日付?私があなたのアプリケーションを維持しなければならないとしたら、おそらく最初に尋ねるでしょう。キーワードの優れた点は、それらが完全に一般的であることです。変数名は決してそうであってはなりません。

于 2009-07-17T19:58:06.873 に答える
0

特効薬はありませんが、最新の言語は、名前空間を管理する機能を向上させるのに大いに役立ちます。

私の場合、C に ' index' コマンドがあることを呪っています。

于 2009-07-17T20:07:37.853 に答える
0

これは、Perl が質問を完全に回避する 1 つの質問です。

変数は常に の 1 つを持ち$%@*&ます。衝突する可能性があるのは、グロブ/ハンドルとサブルーチンだけです。

グロブ/ハンドルはもうあまり使用されていないため、それは大きな問題ではありません。

Perl では、サブルーチンとキーワードはほとんど同じです。組み込みのサブルーチン/キーワードにアクセスする必要がある場合はCORE::、たとえばCORE::dump.

sub実際、問題が発生するキーワードは、mylocal、および 'our'だけだと思います。これらのキーワードはパーサーの非常に早い段階で解析されるからです。これらの名前でサブを作成できることに注意してください。完全な名前を指定しないと、または祝福された参照から、またはシンボリック参照を使用しないと機能しません。

{
  package test;
  sub my{  print "'my'  called using $_[-1]\n" };
  sub new{ bless {}, $_[0] };
  sub sub{ print "'sub' called using $_[-1]\n" };

  sub symbolic{
    *{__PACKAGE__.'::'.$_[1]}{CODE}->('symbolic reference');
  }

  my $var; # notice this doesn't call test::my()
}

package main;
my $test = test->new;

# Called from a blessed reference
$test->my('blessed reference');
$test->sub('blessed reference');

print "\n";

# Called using the full name
test::my('full name');
test::sub('full name');

print "\n";

# Called using a symbolic reference
$test->symbolic('my');
$test->symbolic('sub');

出力:

祝福された参照を使用して呼び出された「my」
祝福された参照を使用して呼び出された「サブ」

フルネームで呼ばれる「my」
フルネームを使用して呼び出された「サブ」

シンボリック参照を使用して呼び出された「my」
シンボリック参照を使用して呼び出された「sub」
于 2009-07-19T23:29:08.177 に答える