2003年11月03日
川俣晶の縁側ソフトウェア技術雑記total 9157 count

Visual Basic .NETで、予約語の名前を持つクラスや変数を宣言する方法

Written By: 川俣 晶連絡先

 仕様書というのは、読んでいるはずなのに見落としがあるものです。

 時として、書いた本人すら見落としているものがあったりするわけで、これは人間の集中力の限界と言えるような気がします。

 と言うわけで、今日気付いたうっかり見落とし。

 Visual Basic .NETは、@ITで延々と連載でVisual Basic 6.0との相違を説明したので、大抵の言語仕様は調査済みだと思っていましたが、ごく基本的なところで見落としがありました。

 Visual Basic .NETは、.NET Framework上で動作する関係上、他プログラム言語で記述されたコードを呼んだり呼ばれたりすることが容易に実現できます。それは予約語に絡んで1つの問題を引き起こします。予約語を名前としたクラスや変数を宣言することは、言語仕様的に禁止されているプログラム言語は珍しくありません。しかし、予約語はプログラム言語の種類が変われば違う名前群に変わってしまうものです。この状況で、複数プログラム言語を混在させると、問題が起きる危険があります。必要なキーワードを書けない、という事態が起こりえるのです。

 Visual Basic .NETでは、エスケープ識別子というものを導入して、これを解決しています。

 以下は、Visual Basic .NETの言語仕様「2.2 識別子」(MSDN Library DVD-ROM 2003 Oct)からの引用です。

Imports System

Class [class]

    Shared Sub [shared](ByVal [boolean] As Boolean)

        If [boolean] Then

            Console.WriteLine("true")

        Else

            Console.WriteLine("false")

        End If

    End Sub

End Class

Module [module]

    Sub Main()

        [class].[shared](True)

    End Sub

End Module

 これは、本来使えないはずのキーワードclass、shared、boolean、moduleを使用しています。たとえば、Visual Basic .NETは名前の大文字と小文字を区別しないので、classというキーワードはクラスを宣言する予約語Classと一致してしまいます。つまり、そのまま書くとコンパイルエラーになります。

 しかし、前後を[……]でくくって、エスケープ識別子というものにすると、コンパイル可能になります。

 こんなに面白い機能なのに話題に出てくることが少ないような気がします。もしや、Visual Basic 6.0からある機能かと思って試してみましたけど、通りません。

 ちなみに、googleで「エスケープ識別子」として検索すると4件しか出てきません。

余談 §

 上記仕様書の

通常の識別子はキーワードと一致しないこともありますが、エスケープ識別子では一致します。

 という日本語訳はちょっと変な感じですね。

 原文はこうなっています。

Regular identifiers may not match keywords, but escaped identifiers can.

 may notは辞書によると可能性の否定だそうなので、おそらく「通常の識別子はキーワードと一致する可能性はありませんが、エスケープ識別子では一致できます」みたいな意味ではないかと。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2003年
11月
27日
書きたいことがあるが書けない状況なので予告にならない予告編だけでも
3days 0 count
total 2603 count
【技術雑記】の前のコンテンツ
2003年
10月
30日
プログラムの複雑さとは何か?
3days 0 count
total 8056 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20031103132515
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.