Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (94 стр)

Страницы: 193 94 95 96325 Следующая »
#1395
11:46, 12 фев. 2020

Aroch
> назови кол-во, вместе посмеемся.
100+ против четырёх.
И, между прочим, это ты поднял тему, чего из них медленнее. Сразу после того, как я высказал, что на это вообще наплевать. Но ты всё равно поднял, и тут же ошибся. Ну как же мне пройти мимо такого?


#1396
(Правка: 12:13) 12:11, 12 фев. 2020

Delfigamer
> 100+ против четырёх.
мне интересно как ты насчитал 100? Расскажи.
> Но ты всё равно поднял, и тут же ошибся.
голословное утверждение. Рассказывай где у меня перебор по 100+ клавишам.

#1397
(Правка: 13:11) 13:11, 12 фев. 2020

Aroch
> static clock_t direction_time[5] = {0};
А, окей, не о том подумал.
Тогда вообще без разницы. Прям вообще. Системный шедулер накидает больше помех, чем наберётся разницы от этих алгоритмов. Вообще.

#1398
(Правка: 1:30) 1:29, 17 фев. 2020

Чего-то тут задумался о get'х и set'х.

class Something final {
public:
    void setPosition(const glm::vec3 &pos) {
        mPos = pos;
    }
    
    const glm::vec3 &getPosition() const {
        return mPos;
    }

private:
    glm::vec3 mPos;
};

class Something final {
public:
    void position(const glm::vec3 &pos) {
        mPos = pos;
    }
    
    const glm::vec3 &position() const {
        return mPos;
    }

private:
    glm::vec3 mPos;
};

class Something final {
public:
    glm::vec3 &position() {
        return mPos;
    }
    
    const glm::vec3 &position() const {
        return mPos;
    }

private:
    glm::vec3 mPos;
};

class Something final {
public:
    glm::vec3 position;
};

Вот 4 варианта. Сам я всегда использовал и использую 1-й вариант, но он в большинстве моих случаев избыточен и неудобен.
Кто какие варианты пользует или, быть может, их комбинации?

#1399
1:40, 17 фев. 2020

первый вариант. иногда удобно еще добавить getPositionX(), getPositionY(), getPositionZ().

#1400
(Правка: 1:43) 1:42, 17 фев. 2020

BingoBongo
> иногда удобно еще добавить getPositionX(), getPositionY(), getPositionZ()
Да вроде getPosition().x не особо долго писать. Ну position тут в любом случае просто чтобы как-то обозвать переменную.
А почему именно первый вариант? Хотелось бы как-то более развернутое мнение увидеть.

#1401
(Правка: 1:56) 1:54, 17 фев. 2020

Vlad2001_MFS
кроме 4го варианта - это все одно и тоже. обычно через функцию лучше, потому что при изменении позиции может потребоваться что-нибудь еще обновить, например, m_matrixDirty. остаются первые три варианта, и выбор между ними - дело вкуса. но 2й и 3й выглядят не по-людски. часто пишешь ->set или ->get и смотришь, какие методы доступны у класса, а 2й и 3й варианты - все это ломают. не говоря уже о путанице, что противоположные действия выполняются методом с общим именем. в итоге если ты выбираешь 2й или 3й вариант, получается, что ты отказываешься от get/set в принципе, и у тебя весь проект должен быть написан соответствующим образом в едином стиле. потом любой кто увидит всю эту кашу тебя не поймет.

#1402
(Правка: 2:00) 1:59, 17 фев. 2020

BingoBongo
> обычно через функцию лучше, потому что при изменении позиции может
> потребоваться что-нибудь еще обновить, например, m_matrixDirty
Не, это понятно само собой.

> но 2й и 3й выглядят не по-людски. часто пишешь ->set или ->get и смотришь,
> какие методы доступны у класса, а 2й и 3й варианты - все это ломают.
Тут согласен.

А что можешь сказать о комбинации 1-го и 4-го варианта? То есть для случаев, когда get/set избыточны просто выносить переменную в public.
Мне это кажется немного странно, но хотелось бы еще услышать мнение других людей.

#1403
2:00, 17 фев. 2020

Vlad2001_MFS
Единственное, если класс Something служит для хранения данных у какого-то внутреннего оптимизированного алгоритма, который относится к приватному апи, то бывает удобнее использовать 4й вариант.

#1404
2:01, 17 фев. 2020

Vlad2001_MFS
> А что можешь сказать о комбинации 1-го и 4-го варианта? То есть для случаев,
> когда get/set избыточны просто выносить переменную в public.
У меня такой стиль: если class, то поля читаются и обновляются через методы, если struct, то напрямую.

#1405
2:03, 17 фев. 2020

BingoBongo
> У меня такой стиль: если class, то поля читаются и обновляются через методы,
> если struct, то напрямую.
Да, я как раз всегда такого же стиля и придерживался. Ладно, переучивать себя не нужно. Спасибо.

#1406
(Правка: 3:22) 3:21, 17 фев. 2020

Довольно давно придерживаюсь принципа, что чистые функции - это существительные, процедуры - это глаголы.

class Something
{
private:
    glm::vec3 pos;

public:
    glm::vec3 const& Position() const
    {
        return pos;
    }

    void SetPosition(glm::vec3 const& value)
    {
        pos = value;
    }    
};

BingoBongo
> кроме 4го варианта - это все одно и тоже. обычно через функцию лучше, потому
> что при изменении позиции может потребоваться что-нибудь еще обновить,
> например, m_matrixDirty.
Посмотри на третий вариант внимательно. Ничего ты там не обновишь.

#1407
(Правка: 8:40) 8:34, 17 фев. 2020

Vlad2001_MFS
> Кто какие варианты пользует или, быть может, их комбинации?
4 вариант + менеджер.

class Actor
{
public:
  vec3 pos;
  vec3 dir;
  float speed;
};
vector<Actor> actors;
Actor * player;
class App
{
public:
  void set_player ( string n )
  {
    for (auto & a : actors)
    {
      if (a.name == n)
      {
        player = &a;
        break;
      }
    }
  }
  void update_player ()
  {
    player->pos += player->speed * player->dir;
  }
};
App app;
#1408
10:50, 17 фев. 2020

Delfigamer
> Ничего ты там не обновишь
ты о чем?

#1409
11:02, 17 фев. 2020

Vlad2001_MFS
> Сам я всегда использовал и использую 1-й вариант, но он в большинстве моих
> случаев избыточен и неудобен.
Этот вариант единственно верный, в контексте С++, т.к. он исключает возможность изменять внутренние данные объекта за его пределами.

Страницы: 193 94 95 96325 Следующая »
ФлеймФорумПрограммирование