質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5855閲覧

Javaのアノテーション、.NETの属性に似た仕組みを持つ言語は、他にありますか?

Mr_Roboto

総合スコア2208

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/07/29 15:15

Unityちゃんのデモサンプルソースを見ていてこんな記述を見かけました。

C#

1[RequireComponent (typeof(AudioSource))]

この角括弧[]の意味が分からずに調べているとどうも属性と言うらしい。
(VB.netでも使えるようです)

何だこの仕組?

何のために必要なのかよく分からずに更に調べていると
どうもJavaのアノテーションが近いらしいということで、なるほどと思いました。
(それなら分かります)

しかし、呼び名が違いすぎて、似たようなものだと分かりにくいなぁと思ったわけですが、
識者の方からすれば、全然違うものなのでしょうか。(または、ほとんど同じもの?)

もしかして、最近のモダンな言語には割と実装されている(されつつある)機能なのでしょうか?

ということで、興味本位というかタイトルの通りなのですが、
他の言語でもこのような仕組みを持つものがあったら教えてほしいです。
(.NET系でもC#、VB.net以外で使えるものがあれば教えて下さい)

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

その後に定義された関数の動作へ何かしらの影響を与えるという仕組みとしては、Pythonにデコレータというのがあります。書き方はJavaっぽいですけど、仕組みは全く異なります。ただ、共通の事柄をさせるような何かと言うことでは、近いモノがあるような気がします。(同じようなことをやれる場合があるけど、やり方は全く違う、という感じでしょうか)

なおPythonには関数アノテーションという仕組みがありますが、こちらは注釈以外の意味を持ちません。(もともと、Javaのアノテーションが初期のモノはコンパイラに対する注釈以外の意味を持たなかったような気がします。たぶん。)

投稿2016/07/29 16:19

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_Roboto

2016/07/30 04:02

ご回答ありがとうございます。 デコレータについて、ちょっとだけいろいろと見てみたり書いてみたりしましたが、 どのように似ているのかよく分かりませんでした ^_^; とりあえず、そのようなものがあるという認識で今のところ保留しておきます。 Python勉強する時があったら参考にさせていただきます。
guest

0

ベストアンサー

こんにちは。

C++の__attribute__は考え方的には同じものと思います。
でも、C++はリフレクションをサポートしていないので、C++の__attribute__はコンパイラへの指示にしか使えません。(変数などにつけた__attribute__をユーザ・プログラムが取得できない。)
ということは、ユーザ定義な__attribute__は意味がなく、実用上はJavaのアノテーションや.NETのアトリビュートとはかなり異なってしまいます。

でも、clangコンパイラは自力でビルドできます。その際であればビルドする人が__attribute__を定義できます。
ユーザ・プログラムがアクセスできないから、やっばり意味がないように見えますが、clangは構文解析機としての機能も提供してます。clangToolingです。これを使う人にとってはたいへんありがたい機能です。

投稿2016/07/29 15:31

編集2016/07/29 15:33
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_Roboto

2016/07/29 15:48

早速のご回答ありがとうございます。 C++は、私の中で無理な言語認定なのでw ちっともやる気が無いのですが、そのような仕組みがあるのですね。 「一般化された属性」なのか単なる属性なのかよく分かりませんが、 属性なんて汎用名っぽい呼び名は良くないですね ^_^; (検索しにくい) 何でもありだと思っていたC++にリフレクションが無いというのもちょっと驚きです。 clangのことが、あまり良くわからないので (確かコンパイラの研究から生まれたコンパイラ?)、 へ〜〜〜という言葉しか出ないですが、参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問