Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 06:14
Оценка: 3 (2) +1 -1
Насколько сложно сделать ?

По сути свойства это вызов метода, но с другим синтаксисом.
Раз методы расширения есть, то и свойства было бы хорошо добавить.

В C# возможно будут в будущем,а Nemerle это ведь будущее уже сейчас.
Why No Extension Properties?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Свойства расширения
От: catbert  
Дата: 05.12.11 10:35
Оценка: :)
Здравствуйте, _NN_, Вы писали:

_NN>Насколько сложно сделать ?


_NN>По сути свойства это вызов метода, но с другим синтаксисом.

_NN>Раз методы расширения есть, то и свойства было бы хорошо добавить.

_NN>В C# возможно будут в будущем,а Nemerle это ведь будущее уже сейчас.

_NN>Why No Extension Properties?

Ну, мне кажется, в основном проблемы в совместимости с потенциальными будущими свойствами расширения в С-шарпе, и ввода в язык статических свойств с индексатором.
Re[2]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 10:56
Оценка:
Здравствуйте, catbert, Вы писали:

C>Здравствуйте, _NN_, Вы писали:


_NN>>Насколько сложно сделать ?


_NN>>По сути свойства это вызов метода, но с другим синтаксисом.

_NN>>Раз методы расширения есть, то и свойства было бы хорошо добавить.

_NN>>В C# возможно будут в будущем,а Nemerle это ведь будущее уже сейчас.

_NN>>Why No Extension Properties?

C>Ну, мне кажется, в основном проблемы в совместимости с потенциальными будущими свойствами расширения в С-шарпе, и ввода в язык статических свойств с индексатором.


Будущими ? А когда это будет ?
В C# 5 вроде не планируется.
А он еще и не вышел.

А если в C# 6 добавят, то там и исправить можно.

Можно без поддержки индексаторов если в этом вся проблема.
А что собственно с ними ? В чем там проблема ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Свойства расширения
От: hardcase Пират http://nemerle.org
Дата: 05.12.11 11:14
Оценка: 1 (1) +1
Здравствуйте, _NN_, Вы писали:

_NN>Насколько сложно сделать ?


_NN>По сути свойства это вызов метода, но с другим синтаксисом.


Один вопрос. Нафига это вообще нужно?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 11:17
Оценка: +1
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, _NN_, Вы писали:


_NN>>Насколько сложно сделать ?


_NN>>По сути свойства это вызов метода, но с другим синтаксисом.


H>Один вопрос. Нафига это вообще нужно?


Удобство.
Вместо .GetSomeName() писать .SomeName
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Свойства расширения
От: hardcase Пират http://nemerle.org
Дата: 05.12.11 11:26
Оценка: -1
Здравствуйте, _NN_, Вы писали:

_NN>Удобство.

_NN>Вместо .GetSomeName() писать .SomeName

Охренеть как удобно. Я согласен с Липпертом — игра не стоит свеч.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Свойства расширения
От: hardcase Пират http://nemerle.org
Дата: 05.12.11 11:28
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Насколько сложно сделать ?


Ты бы лучше оптимизацию match-а по вариантам сделал, раз хочешь пользу нанести
Тут даже прикидывать особенно не нужно — компилятор точно разгонится.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Свойства расширения
От: catbert  
Дата: 05.12.11 12:23
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Охренеть как удобно. Я согласен с Липпертом — игра не стоит свеч.


А зачем тогда обычные свойства? Вот джава-программеры обходятся getter-ами и setter-ами.
У свойств есть своя семантика. Свойство означает "я описываю состояние объекта, и меня можно быстро вызвать". Тот факт, что в С-шарпе свойства-расширения не осилили, не значит что они не нужны.
Re[5]: Свойства расширения
От: hardcase Пират http://nemerle.org
Дата: 05.12.11 12:58
Оценка:
Здравствуйте, catbert, Вы писали:

C>У свойств есть своя семантика. Свойство означает "я описываю состояние объекта, и меня можно быстро вызвать". Тот факт, что в С-шарпе свойства-расширения не осилили, не значит что они не нужны.


Это очень редкий юзкейз — экстеншн метод с единственным аргументом. Я правильно понимаю, что после хотелки "экстеншн свойства" должны появиться экстеншн -события и экстеншн-индексаторы?
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.11 14:32
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Насколько сложно сделать ?


Попробуй — узнаешь .

Для начала обдумай каков будет синтаксис их объявления. Где будем this описывать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 19:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _NN_, Вы писали:


_NN>>Насколько сложно сделать ?


VD>Попробуй — узнаешь .


VD>Для начала обдумай каков будет синтаксис их объявления. Где будем this описывать?


Вариант 1.
public static X : int {this m : MyClass} { get { m.Y + 1 } set { m.Y = value - 1 } }


Вместо {} любая другая пара скобок.

Вариант 2.
Тут this передается неявно.
public static MyClass.X : int { get { this.Y + 1 } set { this.Y = value - 1 } }


В обоих вариантах код раскрывается в:
[ExtensionPropertyAttribute(Type = Getter)]
public static get_X(m : MyClass) : int { m.Y + 1 }

[ExtensionPropertyAttribute(Type = Setter)]
public static set_X(m : MyClass, value : int) : void { m.Y = value - 1 }
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 19:40
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, _NN_, Вы писали:


_NN>>Насколько сложно сделать ?


_NN>>По сути свойства это вызов метода, но с другим синтаксисом.


H>Один вопрос. Нафига это вообще нужно?


Например можно будет делать так:

def tm = 20.Minutes;


Сейчас это конечно можно решить макросом, но без него было бы проще:
namespace X
{                    
    [assembly: Nemerle.Internal.OperatorAttribute ("X", "Minutes", true, 283, 284)]

    macro @Minutes(val)
    {
        <[ System.TimeSpan(0, $val, 0); ]>
    }
}

def tm = 20 Minutes;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.11 19:51
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Вариант 1.

_NN>
_NN>public static X : int {this m : MyClass} { get { m.Y + 1 } set { m.Y = value - 1 } }
_NN>


_NN>Вариант 2.

_NN>Тут this передается неявно.
_NN>
_NN>public static MyClass.X : int { get { this.Y + 1 } set { this.Y = value - 1 } }
_NN>


И то, и то, как-то некузяво. Второй вариант совсем не похож на методы-расширения. Какой-то не явный параметр. Первый просто странный.

Как вариант:
public static X(this m : MyClass) : int { get { m.Y + 1 } set { m.Y = value - 1 } }
// или
public static X : int
{
  this m : MyClass;
  get { m.Y + 1 }
  set { m.Y = value - 1 }
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Свойства расширения
От: catbert  
Дата: 05.12.11 20:06
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Это очень редкий юзкейз — экстеншн метод с единственным аргументом. Я правильно понимаю, что после хотелки "экстеншн свойства" должны появиться экстеншн-события и экстеншн-индексаторы?


Не после, а прямо сейчас А юзкейс редкий, мне кажется, именно потому что нету экстеншен-свойств.
Re[4]: Свойства расширения
От: catbert  
Дата: 05.12.11 20:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Как вариант:

VD>
VD>public static X(this m : MyClass) : int { get { m.Y + 1 } set { m.Y = value - 1 } }
VD>// или
VD>public static X : int
VD>{
VD>  this m : MyClass;
VD>  get { m.Y + 1 }
VD>  set { m.Y = value - 1 }
VD>}
VD>


Да ладно уже, чем квадратные скобки плохи?

    public static X[this m : MyClass] : int 
    { 
        get { m.Y + 1 } 
        set { m.Y = value - 1 } 
    }
Re[4]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 05.12.11 20:18
Оценка: 2 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>И то, и то, как-то некузяво. Второй вариант совсем не похож на методы-расширения. Какой-то не явный параметр. Первый просто странный.


Кстати подумалось, а почему расширения не используют синтаксис
static <ClassName>.<Method/Property/... Name> : <Type> { ... }


Тогда бы не нужно было придумывать имя переменной, а использовался бы this.
И унификация

public static MyClass.ExtensionMethod(p1 : Param1, p2 : Param2) : int { this.DoSomething(); }

public static MyClass.ExtensionProperty : int { get { this.X } set { this.X = value } }

public static MyClass.ExtensionEvent : MyEevnt { ... }


http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Свойства расширения
От: Ziaw Россия  
Дата: 06.12.11 06:08
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Это очень редкий юзкейз — экстеншн метод с единственным аргументом. Я правильно понимаю, что после хотелки "экстеншн свойства" должны появиться экстеншн -события и экстеншн-индексаторы?


Если делать свойства, то надо делать и события и индексаторы.
Re[5]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.12.11 10:53
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Кстати подумалось, а почему расширения не используют синтаксис

_NN>
_NN>public static MyClass.ExtensionMethod(p1 : Param1, p2 : Param2) : int { this.DoSomething(); }
_NN>public static MyClass.ExtensionProperty : int { get { this.X } set { this.X = value } }
_NN>public static MyClass.ExtensionEvent : MyEevnt { ... }
_NN>


В принципе не плохо. Но есть две проблемы:
1. Несовместимость с используемым синтаксисом для методов-расширений. Будут ломающие изменения.
2. Те кто приходят с шарпа могут путать такие описания с явной реализацией членов интерфейсов.
3. Довольно много переделок в парсере, так как синтаксис сильно отличается от исходного. Фактически нужно вводить новый вид квази-цитат.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.12.11 11:02
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Если делать свойства, то надо делать и события и индексаторы.


С чего бы это?

На практике у меня пару раз возникало желание сделать свойство-расширение. А вот события или индексеры ни разу.

Да и как вообще можно сделать события расширениями? Кто их вызвать то будет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 06.12.11 13:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _NN_, Вы писали:


_NN>>Кстати подумалось, а почему расширения не используют синтаксис

_NN>>
_NN>>public static MyClass.ExtensionMethod(p1 : Param1, p2 : Param2) : int { this.DoSomething(); }
_NN>>public static MyClass.ExtensionProperty : int { get { this.X } set { this.X = value } }
_NN>>public static MyClass.ExtensionEvent : MyEevnt { ... }
_NN>>


VD>В принципе не плохо. Но есть две проблемы:

VD>1. Несовместимость с используемым синтаксисом для методов-расширений. Будут ломающие изменения.
К сожалению это так
Можно оставить 2 синтаксиса и потом убрать старый.

VD>2. Те кто приходят с шарпа могут путать такие описания с явной реализацией членов интерфейсов.

В C# static нельзя написать для явной реализации.
Можно придумать другое ключевое слово: extension, например.

VD>3. Довольно много переделок в парсере, так как синтаксис сильно отличается от исходного. Фактически нужно вводить новый вид квази-цитат.

Это конечно серьезный аргумент.
Однако возможно этот шаг поможет найти еще сторонников из мира C#.

Есть много обсуждений с желанием свойств-расширений: Extension Properties.

Я вот не понимаю зачем нужно придумывать имя переменной в методах расширения и почему нельзя было сделать как указано выше

Одно из возможных полезных применений: http://rsdn.ru/forum/nemerle/4526729.1.aspx
Автор: _NN_
Дата: 05.12.11
http://rsdn.nemerleweb.com
http://nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.