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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Эмуляция null-объекта  (Прочитано 15029 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #15 : Март 16, 2012, 18:40 »

Не совсем понимаю в чём эта эстетическая проблема(
Можете кодом пояснить, в чём проблема?
Записан

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

Arch Linux Plasma 5
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #16 : Март 16, 2012, 18:45 »

Проблема в том, что это некрасиво чисто с эстетической точки зрения, т.к. в линейной алгебре нет понятия вектора нулевой размерности и без дополнительных объяснений/комментариев стороннему человеку непонятно что это за зверь. Опять же использование такого объекта некорректно только с логической точки зрения. С точки зрения языка - это абсолютно обычный объект класса.
А нечего в исходниках вашей программы делать стороннему человеку. Он всё равно ничего не поймёт.
Записан
Bepec
Гость
« Ответ #17 : Март 16, 2012, 18:52 »

Черный Странник - вы сейчас несёте чушь.

Вы хотите создать свой новый ( НОВЫЙ) класс с неизвестными ( НЕИЗВЕСТНЫЙ) методами. Выдающим некорректные(НЕКОРРЕКТНЫЙ) данные при (НЕЯСНЫЕ УСЛОВИЯ) условиях.
Который так же будет скрыт (СКРЫТЫЙ) и будет являтся членом класса.

Как вы думаете, человек заглянувший в ваш код поймет НОВЫЙ НЕИЗВЕСТНЫЙ НЕКОРРЕКТНЫЙ с НЕЯСНЫМИ УСЛОВИЯМИ СКРЫТЫЙ класс?

PS бредом страдаете. Исходники ваши должны быть понятны человеку, знающему данный язык написания программы. А не "знать непонятные математические аксиомы и реализующий их только для КРАСИВОСТИ".

PPS С таким подходом у вас появится новый язык программирования - математический непонятный невнятный скрытый некорректный Сиподобный Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Март 16, 2012, 19:03 »

Бурная реакция непонятна, и, на мой взгляд, неадекватна, каким-то образом показать/намекнуть (хоть самому себе месяц спустя) - это нормально

Код
C++ (Qt)
void UpdateBounds( const Point & pt, Point * box );
void UpdateBounds( const Point & pt, Point box[2] );
 
В первом случае хз что то за бокс, хотя компилятору одинаково
Записан
Blackwanderer
Гость
« Ответ #19 : Март 16, 2012, 19:11 »

Не совсем понимаю в чём эта эстетическая проблема(
Можете кодом пояснить, в чём проблема?
Сравните:
Код
C++ (Qt)
for(int i = m_Portrait.Dimension - 1; i > 0; i--)
    for(int j = m_Portrait.IG[i + 1] - 1; j >= m_Portrait.IG[i]; j--)
        vector[m_Portrait.JG[j]] -= m_GGU[j]*vector[i];
 
 
и
Код
C++ (Qt)
for(int i = m_Portrait.Dimension - 1; i > 0; i--)
    for(int j = m_Portrait.IG[i + 1] - 1; j >= m_Portrait.IG[i]; j--)
         (*vector)[m_Portrait.JG[j]] -= m_GGU[j]*(*vector)[i];
 
Лично мне второй вариант кажется более плохим
Записан
Blackwanderer
Гость
« Ответ #20 : Март 16, 2012, 19:12 »

Код
C++ (Qt)
typedef Vector TEmptyVec;
 
Так нередко делают именно из-за соображений читабельности, чтобы написать TEmptyVec где надо

Спасибо! Пожалуй лучшее, что можно сделать в данной ситуации.
Записан
Blackwanderer
Гость
« Ответ #21 : Март 16, 2012, 19:13 »

Черный Странник - вы сейчас несёте чушь.

Вы хотите создать свой новый ( НОВЫЙ) класс с неизвестными ( НЕИЗВЕСТНЫЙ) методами. Выдающим некорректные(НЕКОРРЕКТНЫЙ) данные при (НЕЯСНЫЕ УСЛОВИЯ) условиях.
Который так же будет скрыт (СКРЫТЫЙ) и будет являтся членом класса.

Как вы думаете, человек заглянувший в ваш код поймет НОВЫЙ НЕИЗВЕСТНЫЙ НЕКОРРЕКТНЫЙ с НЕЯСНЫМИ УСЛОВИЯМИ СКРЫТЫЙ класс?

PS бредом страдаете. Исходники ваши должны быть понятны человеку, знающему данный язык написания программы. А не "знать непонятные математические аксиомы и реализующий их только для КРАСИВОСТИ".

PPS С таким подходом у вас появится новый язык программирования - математический непонятный невнятный скрытый некорректный Сиподобный Подмигивающий

В идеале я хочу всего-навсего что-то аналогичное null в Java.
Записан
Bepec
Гость
« Ответ #22 : Март 16, 2012, 19:23 »

Каждый выбирает для себя. Успехов!

Себе же я желаю не встречаться с вашим кодом, написанном высокой прозой Подмигивающий
Записан
BRE
Гость
« Ответ #23 : Март 16, 2012, 19:24 »

В идеале я хочу всего-навсего что-то аналогичное null в Java.
Я не знаю как там null в java, но насколько я понял что ты хочешь, можно попробовать так. Конструктор по умолчанию создает не валидный объект (с нулевой разрядностью, например). Все методы проверяют разрядность и генерируют исключения при работе с таким вектором или отрабатывают assert.
Код
C++ (Qt)
class vector
{
public:
   vector();    // Конструктор по умолчанию, создающий "плохой" объект
   vector( int size );
 
   static vector null;    // Статический объект создаваемый конструктором по умолчанию (плохой)
};
 

Тогда можно использовать такие сравнения:
Код
C++ (Qt)
if( vec != vector::null )
{
}
 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #24 : Март 16, 2012, 19:31 »

В идеале я хочу всего-навсего что-то аналогичное null в Java.
Я не знаю как там null в java, но насколько я понял что ты хочешь, можно попробовать так. Конструктор по умолчанию создает не валидный объект (с нулевой разрядностью, например). Все методы проверяют разрядность и генерируют исключения при работе с таким вектором или отрабатывают assert.
Код
C++ (Qt)
class vector
{
public:
   vector();    // Конструктор по умолчанию, создающий "плохой" объект
   vector( int size );
 
   static vector null;    // Статический объект создаваемый конструктором по умолчанию (плохой)
};
 

Тогда можно использовать такие сравнения:
Код
C++ (Qt)
if( vec != vector::null )
{
}
 


А если просто включить метод, типа bool isEmpty() ?
Код
C++ (Qt)
if (vector.isEmpty())
  ...
else
  ...
 

Не совсем понимаю в чём эта эстетическая проблема(
Можете кодом пояснить, в чём проблема?
Сравните:
Код
C++ (Qt)
for(int i = m_Portrait.Dimension - 1; i > 0; i--)
    for(int j = m_Portrait.IG[i + 1] - 1; j >= m_Portrait.IG[i]; j--)
        vector[m_Portrait.JG[j]] -= m_GGU[j]*vector[i];
 
 
и
Код
C++ (Qt)
for(int i = m_Portrait.Dimension - 1; i > 0; i--)
    for(int j = m_Portrait.IG[i + 1] - 1; j >= m_Portrait.IG[i]; j--)
         (*vector)[m_Portrait.JG[j]] -= m_GGU[j]*(*vector)[i];
 
Лично мне второй вариант кажется более плохим

И что? А как собственно это соотносится с те, что вы хотите то?
 
Записан

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

Arch Linux Plasma 5
BRE
Гость
« Ответ #25 : Март 16, 2012, 19:32 »

А если просто включить метод, типа bool isEmpty() ?
+ isValid()
Записан
Blackwanderer
Гость
« Ответ #26 : Март 16, 2012, 19:37 »

Я не знаю как там null в java, но насколько я понял что ты хочешь, можно попробовать так. Конструктор по умолчанию создает не валидный объект (с нулевой разрядностью, например). Все методы проверяют разрядность и генерируют исключения при работе с таким вектором или отрабатывают assert.
Увы, это будет слишком долго. У векторов размерность десятки тысяч, и подобная проверка где-нибудь в operator[] существенно замедлит программу.
Записан
Blackwanderer
Гость
« Ответ #27 : Март 16, 2012, 19:41 »

И что? А как собственно это соотносится с те, что вы хотите то?
Это я показал, почему не хочу работать с указателями.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #28 : Март 16, 2012, 19:46 »

Увы, это будет слишком долго. У векторов размерность десятки тысяч, и подобная проверка где-нибудь в operator[] существенно замедлит программу.
То да. Также бывает конструктор по умолчанию оказывается существенно затратным
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #29 : Март 16, 2012, 19:49 »

И что? А как собственно это соотносится с те, что вы хотите то?
Это я показал, почему не хочу работать с указателями.

Ну это я понял..
Так вы приведёте пример кода, где вы видите эту вашу эстетическую проблему?   
Записан

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

Arch Linux Plasma 5
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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