Gamedev LectureСтатьи

Лекция #1: Property в Delphi [Открытая]

Автор:

[02:27] *** Cote-Duke changes topic to 'Лекция #1: "property в Delphi" - 15/01/06'
[02:40] <Rageous> они просто предоставляют более удобный доступ к гет/сет: без скобочек и т.п. шелухи
[02:41] <MiF> они добавляют неявности в вызовы, которой итак хватает
[02:41] <Zeux> хз. какая разница, object.setValue(b) или object.Value = b;

[02:46] <Rageous> еще пять копеек про пропертис: если я вижу класс сокет и вижу у него setPort() и send(), то я понимаю, конечно, что setPort просто сетит порт - и все
[02:47] <Rageous> но когда я вижу свойство port и метод send(), то я уверен в этом
[02:47] <Rageous> т.к. если это не так, то я пойду и дам по шапке тому, кто это написал
[02:47] <Rageous> т.о. я сразу разделяю все на свойства и функционал - что облегчает понимание архитектуры класса
[02:48] <Rageous> мой поинт в том, что класс - это черный ящик для его пользователя
[02:48] <Rageous> в код надо лезть в двух случаях: ошибки и тестирование
[02:48] <Rageous> ну оптимизация еще, ладно
[02:49] <Rageous> но на этапе кодирования тебя не должно волновать, что там делает сет

[02:55] <Rageous> вообще, много ли в твоих классах (кроме базовых типа вектора и точки) открытых переменных?
[02:55] <xmvlad> а это плжэйн структы с открытыми членами
[02:55] <xmvlad> остальные все закрыты :)))
[02:55] <xmvlad> ладно, основной пойнт ни в этом :)
[02:56] <xmvlad> какой смысл в пропертях, кроме экономии буковок?
[02:56] <MiF> никакого

[03:01] <xmvlad> Rageous: неочевидный выйгрыш, кроме экономии буковок :) здоровый консерватизм :)

[03:02] <Zeux> я могу сказать, в чем выигрыш на мой взгляд
[03:02] <Zeux> когда нет пропертей - к почти каждой переменной надо писать аксессор. Потому что интерфейс менять - это зло
[03:03] <Zeux> вот сегодня у меня set на color не имеет side-effects. А завтра?
[03:03] <Zeux> если есть проперти - пофиг
[03:03] <xmvlad> и? я же не говорю что это не будет работать, в чем плюс кроме экономии буковок?

[03:04] <Zeux> смотри, есть класс Car
[03:04] <Zeux> пусть я сделал там public color4 Color;
[03:04] <MiF> либо паблик, либо аксесор писать, что ломает
[03:05] <Zeux> да, либо паблик, либо аксессор писать. Аксессор - влом, паблик - зло, если нет пропертей
[03:05] <Rageous> пишутсе везде, кроме структур аксессоры
[03:05] <Zeux> ага
[03:05] <Zeux> вот в этом и минус :)
[03:05] <Rageous> это неудобно, да

[03:07] <MiF> про интерфейс
[03:07] <MiF> жил паблик, код писался
[03:07] <MiF> и тут вдруг захотели стейт менять при обращении
[03:07] <MiF> обернули прпоерти и все рады
[03:07] <MiF> а так пришлось бы поменять интерфейс (добавить аксесоры), поменять код
[03:07] <MiF> где обращения к паблику были :)
[03:08] <MiF> это в гипотетическом предположении, что мы лентяи

[03:10] <Zeux> лениво для каждой переменной set/get писать
[03:10] <Zeux> для КАЖДОЙ!!!
[03:10] <MiF> но надо :)

[03:11] <xmvlad> set_some_data(data1, data2, data3)
[03:11] <Zeux> ага, ну-ну
[03:11] <Zeux> setPositionOrientationAndColor(vec3,quat,color)
[03:12] <xmvlad> опять :) если данные связанные то будут одной функциией, если нет несколько
[03:12] <Zeux> связанных данных типично немного
[03:12] <Rageous> дык они весьма редко связаны
[03:12] <Rageous> вообще высокая связность для них - не есть гут
[03:12] <xmvlad> и ну, да будет get/set для нисвязанных..
[03:12] <Zeux> ну вот. Лениво.
[03:13] <xmvlad> кхм копи паст рулит :)
[03:13] <MiF> что дают проперти: можно смело юзать паблик и не бояцца, что при желании последующем менять стейт придется сделать что-то большее, чем обернуть в проперти

[03:14] <xmvlad> но опять же ничего кроме экономии буковок это ни дает :) синтаксический сахар не более :)
[03:14] <Rageous> рефакторить не надо
[03:14] <Zeux> ну, в конечном итоге все - это экономия буковок

[03:14] <Zeux> кстати, видимо, скорость компиляции растет
[03:14] <Rageous> угу
[03:15] <Zeux> короче, бонусы есть. Дальше каждый решает для себя сам :)

[03:16] <Zeux> пока нет в стандарте вообще рыпаться рано
[03:18] <Zeux> вот, но такие вот вещи:
[03:18] <Zeux> So, i guess now you would appreciate the purpose of "Property". So, no more public fields! Always have private fields and write public properties as wrapper for them if required to expose them to outside the class.
[03:18] <Zeux> конечно нифига не лучше аксессоров
[03:18] <Zeux> т.к. для каждой переменной писать проперти так же лениво, как и писать аксессоры :)

[13:08] <_Winnie> провперти бывают published.
[13:09] <_Winnie> можно легко отмапить проперти на переменную, без определения метода.
[13:09] <_Winnie> если паблишед - можно их перечислить у класса/объекта.
[13:09] <_Winnie> ещё бываю default-проперти -
[13:10] <_Winnie> тогда их можно присваивать без указания их имени.
[13:10] <_Winnie> вместо Object.xxx = 10
[13:10] <_Winnie> просто Object = 10
[13:10] <_Winnie> такой вот кривой аналог переопределения оператора присваивания в С++
[13:10] <_Winnie> лекция закончена.

15 января 2006

Комментарии [3]