User defined attributes use

ilya-stromberg ilya-stromberg-2009 at yandex.ru
Sun Sep 15 23:47:35 PDT 2013


On Sunday, 15 September 2013 at 18:31:40 UTC, simendsjo wrote:
> On Sunday, 15 September 2013 at 17:34:06 UTC, matovitch wrote:
>> Hi everyone,
>>
>> I read the documentation about user defined attributes, but I 
>> don't see their uses. Ok, it'a a template expression you can 
>> link to a declaration, but what are they useful for ? (not 
>> sure about the syntax ;-))
>>
>> Can you declare a template constraint as a user defined 
>> attribute to do something like :
>>
>> void 
>> template_function_which_go_back_and_forth(@("Bidirectional") 
>> @("Range") BR)(BR br) {...}
>>
>> This would be awesome (even if not really occidental) to do 
>> something like:
>>
>> @("SmallTypeSet") @("MediumTypeSet") @("LargeTypeSet") Type
>>
>> This could allow to build tree based category structure.
>
> It enables declarative programming.
> And because this is D, there is no runtime overhead.
> A common use is to add semantics to types and instances that is 
> difficult or very intrusive to do by creating structs/classes 
> by hand.
>
> A little validation example:
>
> @nonNull // An instance shouldn't be allowed to be null
> class C {
>   @matches("[0-9]+")
>   string someNumber;
>
>   @interval!"(]"(0, 10) // (0, 10] range
>   int someInt;
> }
>
> C c;
> validate(c); // returns ["C is null", "someNumber doesn't match 
> '[0-9]+'", "someInt is outside the interval '(0, 10]'"]
>
> And ORMs usually use annotations:
>
> @table("some_tablename")
> class C {
>   @id("id_field_name")
>   int id;
> }
>
> Take a look at C# and Java libraries to see how many uses 
> attributes/annotations - they are still quite new in D, so they 
> are still underutilized.
> A very big difference is of course that UDAs are available at 
> compile time :)

Can you print a full examle? For example, can you implement 
"matches" UDA and validate function.
It's intresting how can I create new UDA and check if it's 
available for class/field.


More information about the Digitalmars-d-learn mailing list