Russian Qt Forum
Ноябрь 23, 2024, 00:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: C++ property  (Прочитано 27134 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #30 : Апрель 18, 2015, 14:06 »

Цитировать
Тут не в реализации дело, а в принятии сообществом данных вещей.
Да просто нет никакой особой потребности для введения проперти в с++. К тому же этот механизм реализуется средствами самого языка.
Хотите проперти - пожалуйста..

Цитировать
Где ухудшение читаемости и увеличение кода?
А Вы пример с сеттером привидите..)


« Последнее редактирование: Апрель 18, 2015, 14:08 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
AzazelloAV
Гость
« Ответ #31 : Апрель 18, 2015, 14:41 »

Цитировать
Да просто нет никакой особой потребности для введения проперти в с++. К тому же этот механизм реализуется средствами самого языка.
Хотите проперти - пожалуйста..
Ну это вопрос комфортности языка. И на чистом С тоже можно писать ООП.

Цитировать
А Вы пример с сеттером привидите..)

Усложняем задачу

class
public:
   property state read mState write setState   
private:
  setState(state) { mState = state }
  mState

Если нужен виртуал, меняем приват на протектед с соответствующим ключевым словом.

Также прошу обратить внимание, у нас пропал из области видимости сетер. Т.е. можно прозрачно менять это всё дело, не тревожа основной код. Мы понимаем, что данные сетер (в примере) не отличается от прямого доступа, но в реальности там есть всегда проверки.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #32 : Апрель 18, 2015, 14:49 »

Цитировать
Ну это вопрос комфортности языка.
Скорее вопрос синтаксического сахара.. И здесь я уже упоминал о тех ограничениях с проперти..
В плюсах работает принцип бритвы Оккамы, и это один из плЮсов плюсОв)

Цитировать
Усложняем задачу
 
Ну и чем это принципиально отличается от того примера выше, что я приводил?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
AzazelloAV
Гость
« Ответ #33 : Апрель 18, 2015, 15:04 »

Вы предлагаете увеличить количество кода, сложность кода, ради "не писать геттер". А смысл?

Я предлагаю уменьшить количество кода, а также его сложность, чтобы легче дебажить, когда я могу заменить одно другим.
Давайте смотреть правде в глаза. Вы прекрасно понимаете, что "появилась идея, быстрей кодить"  с опытом проходит. Нефиг садится за комп без плана действий. Также вы прекрасно понимаете, что проект (проект как документацию)  программы создать невозможно. К примеру проект дома можно, таких строились тысячи. ПО - никогда. Нет, его делают, но от первоначального вида рожки да ножки остаются. Поэтому мы ходим этими грёбаными кругами, проектируем, отвергаем, опять по новому кругу. Короче рефакторинг. И без него, без планового рефаторинга, будет абзац. (кроме программы калькулятор). Мы создаём структуры и все такое. Структура - это же наш класс дебажный, и мы себе говорим - закроем потом переменные. Мне бы это упростило жизнь, если бы были проперти.
Записан
AzazelloAV
Гость
« Ответ #34 : Апрель 18, 2015, 15:10 »

Цитировать
Ну и чем это принципиально отличается от того примера выше, что я приводил?

Так, ничем. Кроме проперти. Вы пытаетесь реализовать нереализуемое. Я приведу пример. Где вы видели систему сигналов/слотов кроме Qt. Им понадобилось десятилетие, чтобы мы все "забыли", что сигналы и слоты это не часть С++ и библиотеки Qt, это просто реализация, которую каждый может реализовать в своей программе. Так понятно? Это целая культура, которая поначалу отвергалась.

Также приняты умные указатели, которые каждый может сам реализовать. Вы разницу видите? Т.е. вопрос как не стоит, вопрос стоит почему.
« Последнее редактирование: Апрель 18, 2015, 15:12 от AzazelloAV » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #35 : Апрель 18, 2015, 15:18 »

Цитировать
Я предлагаю уменьшить количество кода, а также его сложность, чтобы легче дебажить, когда я могу заменить одно другим.
Ой, нет, не надо навязывать всем свою идеологию как за истину в последней инстанции..

Вот я смотрю чужой код, в котором автор направо и налево использует проперти.
Код
C++ (Qt)
object.value = 123;
 
То что value - это проперти сразу так совсем не очевидно.. Казалось бы безобидное присваивание, но последствия этого могут кардинально изменить состояние всего объекта..
И ищи потом свищи, что потом пошло не так, что оказывается такое присваивание дёргает закрытый метод, который что то там ещё и делает исподтишка..
Не очевидность того, что происходит здесь и сейчас в когде - это как то явно в разрез с тезисом "легче дебажить"..    
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
AzazelloAV
Гость
« Ответ #36 : Апрель 18, 2015, 15:28 »

Цитировать
Вот я смотрю чужой код, в котором автор направо и налево использует проперти.
Код
C++ (Qt)
object.value = 123;
 
То что value - это проперти сразу так совсем не очевидно.. Казалось бы безобидное присваивание, но последствия этого могут кардинально изменить состояние всего объекта..
И ищи потом свищи, что потом пошло не так, что оказывается такое присваивание дёргает закрытый метод, который что то там ещё и делает исподтишка..
Не очевидность того, что происходит здесь и сейчас в когде - это как то явно в разрез с тезисом "легче дебажить"..    

Эмоционально слишком и не продумано. А вы и не должны знать, вызывается там какой то метод или нет. Вы установили значение объекта, пусть он сам реагирует. Я вообще не вижу разницы между вашим примеро и object.SetValue(123). Потом ищи свещи, что сет валуе дёргает закрытый метод, который что то там ещё и делает исподтишка. Так и перегрузку операторов отменим ещё, мало ли что там "+" делает.

Да и вообще, забудьте про идеологию. Прочитайте начало топика.
« Последнее редактирование: Апрель 18, 2015, 15:35 от AzazelloAV » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #37 : Апрель 18, 2015, 15:32 »

Цитировать
Вы пытаетесь реализовать нереализуемое.
Что значит не реализуемое? Я же привёл код который в точности воспроизводит механизм проперти)

Цитировать
Где вы видели систему сигналов/слотов кроме Qt.
В boost'е, например, и здесь на этом форуме https://www.gitorious.org/lightssp
И что?
Цитировать
Так понятно?
А вы понимаете разницу между тем: что является непосредственной частью языка и каких либо реализаций (те же умные указатели) с помощью его же (языка) средств?
Это разные вещи.
Вы же нам категорически пытаетесь навязать (на примере проперти), чтобы они стали частью языка.


    



Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #38 : Апрель 18, 2015, 15:39 »

Цитировать
Я вообще не вижу разницы между вашим примеро и object.SetValue(123).
Разница в том, что когда я увижу в коде строчку
Код
C++ (Qt)
object.SetValue(123)
 
я буду осознавать, что там возможно может быть дёрнуто ещё что-то.. И что это потенциально может существенно поменять состояние объекта.
В отличии от варианта с проперти..   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
AzazelloAV
Гость
« Ответ #39 : Апрель 18, 2015, 15:41 »

Цитировать
Вы пытаетесь реализовать нереализуемое.
Что значит не реализуемое? Я же привёл код который в точности воспроизводит механизм проперти)

Цитировать
Где вы видели систему сигналов/слотов кроме Qt.
В boost'е, например, и здесь на этом форуме https://www.gitorious.org/lightssp
И что?
Цитировать
Так понятно?
А вы понимаете разницу между тем: что является непосредственной частью языка и каких либо реализаций (те же умные указатели) с помощью его же (языка) средств?
Это разные вещи.
Вы же нам категорически пытаетесь навязать (на примере проперти), чтобы они стали частью языка.

Прочитайте начало топика. Первый пост.
Я, что, к вам пришёл домой и паяльником стал угражать, пишите все с проперти? Или здесь сидит Страуструп и читает мои сообщения и думает - а это ИДЕЯ! Я просто высказываю свои мысли на расслабоне, сегодня суббота, весна настала, птички поют, а вы про какое-то навязывание.

Ну и  в ответ на ваш пост - нет, вы не правы. умные указатели стали частью языка (не в прямом смысле), т.к. приняты всеми, принята всеми их идеология и ценности которые они несут. Есть ли менеджеры памяти другие, да наверное тысячи. Как и библиотека STD является частью языка (официально), хотя к с++ не имеет никакого отношения.

И про нереализуемое - вы слишком буквально воспринимаете слова.
« Последнее редактирование: Апрель 18, 2015, 15:44 от AzazelloAV » Записан
Bepec
Гость
« Ответ #40 : Апрель 18, 2015, 16:17 »

Вы добавляете ещё одну искусственную сущность в язык.
Мало того, что это реализация нуждается в дополнительных утилитах (коде и прочем), она ещё и неочевидна.

И по поводу "быстрей кодить" - кодить надо быстрее. Да, нужно продумать архитектуру перед этим, но дальше пишется всё тот же код, который в вашем случае будет увеличиваться.

PS и вообще, что спорим то о неубитом медведе - сделайте нам тестовый пример с возможностями пропертей. Рабочий пример. 

Записан
AzazelloAV
Гость
« Ответ #41 : Апрель 18, 2015, 19:14 »

Вы добавляете ещё одну искусственную сущность в язык.
Мало того, что это реализация нуждается в дополнительных утилитах (коде и прочем), она ещё и неочевидна.

И по поводу "быстрей кодить" - кодить надо быстрее. Да, нужно продумать архитектуру перед этим, но дальше пишется всё тот же код, который в вашем случае будет увеличиваться.

PS и вообще, что спорим то о неубитом медведе - сделайте нам тестовый пример с возможностями пропертей. Рабочий пример. 

Рассуждения зашли в тупик. Какая искусственная сущность? Вы употребляете слова - гетеры/сетеры. Вот это искуссвенно. Вы эмулируете уже проперти. Какие примеры? Это что, новое что-то? да в других языках есть, куда примеры то приводить.
Записан
Bepec
Гость
« Ответ #42 : Апрель 18, 2015, 19:16 »

Вы сделайте и мы посмотрим Улыбающийся Почему у других есть, а у нас нету.

PS А как ручками сделаете, вы пройдёте все этапы написания и использования данных пропертей. И сможете уже основываясь на реальном опыте нас приучать к ним Веселый
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #43 : Апрель 18, 2015, 19:59 »

На самом деле свойства это отличная штука и когда они являются частью языка, то и вопросов с ними возникать не будет.

При виде такой строчки: a.value=10; вы будете морально готовы к тому, что это может быть property.

Другое дело, что в плюсы их почему-то не добавили, хотя с каждым новым стандартом добавляют кучу менее полезных штук. И реализовать их идеально средствами существующего языка не получается, у каждой реализации из виденных мною есть недостатки.

Эм, о чем это я? +1 за property на уровне языка в плюсах. К примеру, в шарпе отличные property.
Записан

Гугль в помощь
AzazelloAV
Гость
« Ответ #44 : Апрель 18, 2015, 20:48 »

Вы сделайте и мы посмотрим Улыбающийся Почему у других есть, а у нас нету.

PS А как ручками сделаете, вы пройдёте все этапы написания и использования данных пропертей. И сможете уже основываясь на реальном опыте нас приучать к ним Веселый

Опять, сделайте сделайте. Да в инете кучу примеров и десятки реализаций. Но не являясь частью стандарта они принесут геморой, а не красивость кода. Кстати, только что узнал, что MS их в своем компиляторе поддерживает. Правда, опять же, они мне не нужны только от МС.

Подытожу: проперти для меня дают ясность и прозрачность кода, вместо
string.append(string2)
вы пишете string + string2. Вы же не жалуетесь, что перегрузка операторов от вас "что-то скрывает". (проперти в данном примере не причем, я привел как метафору)

Вообще не понятно, как люд пережил появление в стандарте переменной auto.
« Последнее редактирование: Апрель 18, 2015, 21:05 от AzazelloAV » Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.181 секунд. Запросов: 22.