Re: хромая логика
От: __kot2  
Дата: 01.12.16 18:47
Оценка: +1 -1
Здравствуйте, Кодт, Вы писали:
К>Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
подчеркивания в членах класса — фуу
Re[3]: хромая логика
От: SaZ  
Дата: 01.12.16 18:56
Оценка: +2 :))) :)
Здравствуйте, Кодт, Вы писали:

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


O>>вместо x/y/width/height стали юзать left/top/right/bottom?


К>вместо x/y стали юзать TOP / LEFT.

К>а вместо width/height — vertical/horizontal, соответственно

Да, как тут когда-то писали — это неполиткорректно. Правильно dimension1, dimension2...
Re[5]: хромая логика
От: Dair Россия  
Дата: 01.12.16 19:05
Оценка:
Здравствуйте, ononim, Вы писали:

D>>Так это ж insets, у них ну ладно ещё x/y (вместо left/top, а что писать вместо right/bottom?), но width/height у них точно нет.

D>>Николай, не очень понял
O>Основной прикол в том что ордината идете впереди абсцисс, пардон май френч.

А, вот это да, в самом деле, косяк.

left, top, right, bottom
Re[2]: хромая логика
От: Dair Россия  
Дата: 01.12.16 19:09
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, Кодт, Вы писали:

К>>Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
__>подчеркивания в членах класса — фуу

Мне тоже не нравится, особенно в конце, но у каждого свой coding style, и это уже религиозный вопрос
Re[2]: хромая логика
От: Кодт Россия  
Дата: 01.12.16 19:43
Оценка: :))
Здравствуйте, Слава, Вы писали:

С>Потому что шутки на С++ доступны только Кодту. Остальные такого уровня просветления не достигли.


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

Примечание.
Нет, это не мой сон разума породил такие весёлые конструкторы; маньяк сидит где-то в пучинах Гугла, и зовут его Питер Кастинг.

Поправка.
Кастинг не при чём, это другой отецъ-основатель, Бен Гуджер.
Гугл помнит всё! А гит помнит всё о Гугле!
Перекуём баги на фичи!
Отредактировано 01.12.2016 19:50 Кодт . Предыдущая версия . Еще …
Отредактировано 01.12.2016 19:46 Кодт . Предыдущая версия .
Re[3]: хромая логика
От: __kot2  
Дата: 01.12.16 20:10
Оценка:
Здравствуйте, Dair, Вы писали:
D>Мне тоже не нравится, особенно в конце, но у каждого свой coding style, и это уже религиозный вопрос
разумеется. просто предпочитаю не иметь чего-то, чем иметь что-то лишнее, непонятно зачем нужное. а то попахивает "C" перед именами классов

ну и сама реализация класса тоже спорная. я бы лично оставил x и y публичными, чем городить геттеры-сеттеры к ним
https://chromium.googlesource.com/chromium/src/+/lkgr/ui/gfx/geometry/point.h

и, соотв-но передавал бы const Point & туда, где не хотел бы, чтобы кто-то ручками своими поля эти крутил. а читать — на здоровье.
Re[4]: хромая логика
От: Кодт Россия  
Дата: 01.12.16 20:31
Оценка:
Здравствуйте, __kot2, Вы писали:

__>ну и сама реализация класса тоже спорная. я бы лично оставил x и y публичными, чем городить геттеры-сеттеры к ним


У прямоугольника это связано с тем, что его можно хранить как {left,top,right,bottom} или {left,top,width,height}, — поэтому либо одни, либо другие величины будут доступны только через геттер.
А если всё через геттер — то это единообразие.
Перекуём баги на фичи!
Re[3]: хромая логика
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.12.16 20:42
Оценка: +1
Здравствуйте, Dair, Вы писали:

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

__>>подчеркивания в членах класса — фуу

D>Мне тоже не нравится, особенно в конце, но у каждого свой coding style, и это уже религиозный вопрос


Но зачем в членах класса? Я тоже иногда их использую, когда аргументы конструктора/метода по смыслу совпадают с членами класса. Тогда использую подчеркивания для аргументов, так как аргументы — в одном месте, а для членов класса их везде таскать придется. Да, я знаю, что компилятор (в случае конструктора, как минимум) сам разберется, но парсить глазами всё равно неудобно, поэтому и добавляю
Маньяк Робокряк колесит по городу
Re[5]: хромая логика
От: __kot2  
Дата: 01.12.16 20:42
Оценка:
Здравствуйте, Кодт, Вы писали:
К>У прямоугольника это связано с тем, что его можно хранить как {left,top,right,bottom} или {left,top,width,height}, — поэтому либо одни, либо другие величины будут доступны только через геттер.
тогда логично хранить {left,top,right,bottom} и иметь методы width() и height()

К>А если всё через геттер — то это единообразие.

все сделано через геттеры
Re[4]: хромая логика
От: __kot2  
Дата: 01.12.16 20:46
Оценка:
Здравствуйте, Marty, Вы писали:
M>Но зачем в членах класса? Я тоже иногда их использую, когда аргументы конструктора/метода по смыслу совпадают с членами класса. Тогда использую подчеркивания для аргументов, так как аргументы — в одном месте, а для членов класса их везде таскать придется. Да, я знаю, что компилятор (в случае конструктора, как минимум) сам разберется, но парсить глазами всё равно неудобно, поэтому и добавляю
есть такое древнючее баянское поверье, что приватные члены нужно обозначать с подчеркиванием — до или после. я видел человека, который на полном серьезе рассказывал, что это ему делает код понятнее — видно, что приватное, а что нет
правда, в самой упоротой стадии обычно используется еще суффикс m для членов класса и the для переданных параметров
Re[5]: хромая логика
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.12.16 20:49
Оценка:
Здравствуйте, __kot2, Вы писали:

__>есть такое древнючее баянское поверье, что приватные члены нужно обозначать с подчеркиванием — до или после. я видел человека, который на полном серьезе рассказывал, что это ему делает код понятнее — видно, что приватное, а что нет

__>правда, в самой упоротой стадии обычно используется еще суффикс m для членов класса и the для переданных параметров

Суффикс "_m" используется у Микрософта для членов классов с любой видимостью. Тот же WTL, да и MFC вроде тоже
Маньяк Робокряк колесит по городу
Re[6]: хромая логика
От: __kot2  
Дата: 01.12.16 20:52
Оценка:
Здравствуйте, Marty, Вы писали:
__>>есть такое древнючее баянское поверье, что приватные члены нужно обозначать с подчеркиванием — до или после. я видел человека, который на полном серьезе рассказывал, что это ему делает код понятнее — видно, что приватное, а что нет
__>>правда, в самой упоротой стадии обычно используется еще суффикс m для членов класса и the для переданных параметров
M>Суффикс "_m" используется у Микрософта для членов классов с любой видимостью. Тот же WTL, да и MFC вроде тоже
во-во, я и говорю — самые упоротые
вообще, кстати, в хромиуме еще очень странно выглядит использование паскалевского именования. правда, не всегда, но это выглядит еще более странным

https://chromium.googlesource.com/experimental/chromium/src/+/lkcr/ui/gfx/geometry/cubic_bezier.h

double GetX1() const; — фуу, паскаль

double range_min() const { return range_min_; } — ой, нет, Си
Отредактировано 01.12.2016 20:53 __kot2 . Предыдущая версия .
Re[2]: хромая логика
От: Ops Россия  
Дата: 01.12.16 21:10
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Единственная странность, это то, что у них порядок не как в CSS (top, right, bottom, left)


А откуда, кстати, этот порядок в CSS? Какой-то он неочевидный и неинтуитивный.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: хромая логика
От: Ops Россия  
Дата: 01.12.16 21:11
Оценка:
Здравствуйте, __kot2, Вы писали:

__>подчеркивания в членах класса — фуу


ну уж не хуже m_
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: хромая логика
От: CreatorCray  
Дата: 01.12.16 21:50
Оценка: +2
Здравствуйте, Ops, Вы писали:

__>>подчеркивания в членах класса — фуу

Ops>ну уж не хуже m_
Если на то пошло то m_ лучше чем просто подчёркивание.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: хромая логика
От: __kot2  
Дата: 01.12.16 22:17
Оценка: -2
Здравствуйте, CreatorCray, Вы писали:
__>>>подчеркивания в членах класса — фуу
Ops>>ну уж не хуже m_
CC>Если на то пошло то m_ лучше чем просто подчёркивание.
все это разговоры про сорта говна. никакие префиксы не делают код читабельней. они появляются тогда, когда человек открывает для себя новую концепцию — клссов, интерфейсов или приватных членов и начинает везде пихать поначалу
Re[5]: хромая логика
От: CreatorCray  
Дата: 01.12.16 22:55
Оценка: +3
Здравствуйте, __kot2, Вы писали:

__>все это разговоры про сорта говна. никакие префиксы не делают код читабельней.

Таки делает, если употреблять разумно.
В данном случае префикс позволяет понять в какую переменную в данном месте мы лезем: член класса, локальную или, простигосподи, глобальную.
Это единственный случай когда префикс приемлем.
Как только сделают хорошую схему для syntax highlighting которая бы этот вопрос качественно решала без превращения кода в цветомузыку — это применение тоже отсохнет естественным путём.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: хромая логика
От: __kot2  
Дата: 01.12.16 23:23
Оценка:
Здравствуйте, CreatorCray, Вы писали:
CC>В данном случае префикс позволяет понять в какую переменную в данном месте мы лезем: член класса, локальную или, простигосподи, глобальную.
с учетом того, что большая часть кода работает именно с локальными переменными, имело бы смысл делать префикс скоре не для них, а то весь код в префиксах получается. но все же понимают, что это изврат, потому что без классов такого не было.
вот и решили ввести подчеркивания для приватных.

CC>Как только сделают хорошую схему для syntax highlighting которая бы этот вопрос качественно решала без превращения кода в цветомузыку — это применение тоже отсохнет естественным путём.

у С++ есть одно прекрасное свойство — можно любой обьект вернуть как const и он будет только для чтения разумеется.

не вижу никакой разницы — вызывать p.x() или читать напрямую p.x из const Point &p;
нафиг тогда вообзе p.x() нужен? единственный случай — есть какой-то шаблонный код, который всегда вызывает именно p.x(), который для некоторых обьектов вычисляется. но я не думаю, что это по этой причине сделано.

людям, пришедшим из явы-C# это концепция дается с трудом, но все-таки надо же пользоваться именно инструментами языка, а не писать в стиле другого

вообще, на самом деле к оечно придирабс и хромиум — один из лучших проектов на С++. есть такой мрак, что прямо кровь из глаз течет и ничего — пользуются люди. но если придираться, то я мое ревью бы на Point.h выглядело бы так:
constexpr Point() : x_(0), y_(0) {}  - нафиг constexpr. что он дает?
  constexpr Point(int x, int y) : x_(x), y_(y) {} - зачем два конструктора, когда одного достаточно с дефолтными параметрами?

 constexpr int x() const { return x_; } - убрать нафиг эти методы, сделать члены x и y публичными
  constexpr int y() const { return y_; }

  void set_x(int x) { x_ = x; } - наркомания!
  void set_y(int y) { y_ = y; }
  void SetPoint(int x, int y) { - тяжелая наркомания! зачем нужен метод копирующий реализацию конструктора? почему не p = Point(10, 20), зачем вообще нужен этот set?
    x_ = x;
    y_ = y;
  }

почему паскалевское именование в С++ проекте?

 void SetToMin(const Point& other);  - непонятная фигня. почему это метод класса Point?

 std::string ToString() const; - почему это метод класса а не статич ф-ия?
Отредактировано 01.12.2016 23:34 __kot2 . Предыдущая версия .
Re[3]: хромая логика
От: andrey.desman  
Дата: 01.12.16 23:25
Оценка:
Здравствуйте, Ops, Вы писали:

AD>>Единственная странность, это то, что у них порядок не как в CSS (top, right, bottom, left)

Ops>А откуда, кстати, этот порядок в CSS? Какой-то он неочевидный и неинтуитивный.

Х.з. Может прошлись по часам с полуночи/полудня.
Re[7]: хромая логика
От: CreatorCray  
Дата: 02.12.16 00:17
Оценка:
Здравствуйте, __kot2, Вы писали:

CC>>В данном случае префикс позволяет понять в какую переменную в данном месте мы лезем: член класса, локальную или, простигосподи, глобальную.

__>с учетом того, что большая часть кода работает именно с локальными переменными, имело бы смысл делать префикс скоре не для них, а то весь код в префиксах получается.
Ну так и получается. Все локальные (параметры функции — локальные) без префикса, любые мемберы с m_, статики s_, глобальные g_. Больше никаких префиксов не надо.

__>вот и решили ввести подчеркивания для приватных.

ИМХО это как то буэ. Какая разница приватный или паблик? У них разные контейнеры, это как раз и важно видеть.

__>у С++ есть одно прекрасное свойство — можно любой обьект вернуть как const и он будет только для чтения разумеется.

__>не вижу никакой разницы — вызывать p.x() или читать напрямую p.x из const Point &p;
Потому что далеко не всегда у тебя есть исключительно const ссылка на объект, и тогда в том месте можно в p.x ещё и писать, что может вызвать совсем не тот эффект, который ожидался. Получается дыра в интерфейсе через которую можно внутрях всё испортить.
Так что нет.

__>людям, пришедшим из явы-C# это концепция дается с трудом, но все-таки надо же пользоваться именно инструментами языка, а не писать в стиле другого

в жабашарпах есть синтаксическая сахарная нашлёпка, называется property. Это автоматически создаваемый getter + setter, который можно переопределить.

__>constexpr Point() : x_(0), y_(0) {} — нафиг constexpr. что он дает?

Мне кстати тоже непонятно.

__> constexpr Point(int x, int y) : x_(x), y_(y) {} — зачем два конструктора, когда одного достаточно с дефолтными параметрами?

Спорно, ну да ладно. Тут скорее вопрос стилистики, единообразия интерфейсов и чистоты кода в более сложных случаях чем этот.

__> constexpr int x() const { return x_; } — убрать нафиг эти методы, сделать члены x и y публичными

__> constexpr int y() const { return y_; }
Категорически нет.
Публичные поля в классе — один из признаков говнокода. Хочешь публичные поля — определяй struct.

__> void set_x(int x) { x_ = x; } — наркомания!

__> void set_y(int y) { y_ = y; }
Нет.

__> void SetPoint(int x, int y) { — тяжелая наркомания! зачем нужен метод копирующий реализацию конструктора? почему не p = Point(10, 20), зачем вообще нужен этот set?

__> x_ = x;
__> y_ = y;
__> }
Для простого класса с POD типами да, разницы никакой, для более тяжёлых разница начинает появляться. Если стоит задача придерживаться единой стилистики интерфейсов для базовых классов, к которым этот явно относится, то лучше делать единообразно — компилятор потом всё заинлайнит всё равно.

__>почему паскалевское именование в С++ проекте?

А какая компилятору разница?
Что и как называть определяется принятым в команде coding standard.

__> void SetToMin(const Point& other); — непонятная фигня. почему это метод класса Point?

А почему нет? Что оно делает внутри?

__> std::string ToString() const; — почему это метод класса а не статич ф-ия?

А почему это должна быть статическая функция? Её ж пользовать неудобно.
Если чо, это вообще могло бы быть operator std::string () const;

Вообще ветку пора в срачи переносить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.