Re[11]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 07:44
Оценка:
Здравствуйте, Аноним, Вы писали:

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

Да-да, я к этому и клонил

А>Не отменяют. Просто специфика классов из STL и работы с шаблонами в плюсах минимизируют возможность глупых ошибок от невнимательности.

Да вы оптимист.

А>Я просто не понимаю в чем недостаток той же приставки "С" у классов? Лишний символ писать надо и это напрягает?

Ну, кстати, казалось бы старушку за 10 копеек, а ведь 10 старушек -- уже рубль (с)

А>Или то, что это майкрософт любит использовать и когда-то возможно ваш класс может пересечься с классом из MFC?

Я стараюсь не загрязнять global namespace без нужды.

A>В общем мне интересно: что в этих приставках не так?

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

A>Может я о каких-то их недостатках не догадываюсь? Я сейчас без иронии говорю. Просто, пока не поздно, надо отвыкать так классы называть и писать "нормально", если конечно это не Ваше субъективное ИМХО, что приставки — зло.

Я не говорил, что это зло. Я говорил, что они не нужны.

A>Ну и опять же как нормально? Класс с большой буквы называть без приставок всяких или как в STL — с маленькой?

Да нет нормального. Как в проекте принято, так и надо писать. Если бы я начинал сейчас проект в одно лицо, то придерживался бы стандартного варианта. Наверное. Если пишите только под MS — ну возьмите их последний Internal Coding Guidelines, да и следуйте ему. Они там, правда требуют I в интерфейсах, от чего мне станет неприятно в C++. С другой стороны, если у вас в проекте некоторые абстрактные классы используются именно с целью фиксации public contract, и архитектуру проекта сложно описать, не используя термина Interface в java смысле, то тогда уже I вначале никого не покоробит.

А>В шарпе без приставок всяких, хотя тот же майкрософт, который в плюсах пишет "С" (почему опять же? одумались со времен MFC и поняли, что приставка не нужна?).

[:]|||[:], но по теме:

Посадили в клетку 5 обезьян. У них в клетке под потолком висит связка бананов, а под потолок ведет приставная лестница. Конечно, как только они бананы увидели, они тут же бросились к лестнице. Но не тут-то было! Их сбивает с ног мощная струя ледяной воды из брандспойта. Оправившись от шока, обезьяны снова идут на штурм. Но их опять обливают холодной водой! После нескольких попыток обезьяны бросили это дело и перестали подходить к лестнице.

Затем одну обезьяну убрали и посадили новую. Она (разумеется!) сразу полезла к бананам. Ее никто водой не обливал. Но остальные обезьяны набросились на нее и стащили с лестницы. И так несколько раз. «Новенькая» тоже смирилась и сидела спокойно.

После этого поменяли еще одну обезьяну, и история повторилась. Причем оттаскивала очередную «новенькую» вместе со всеми та, что была такой же совсем недавно…

Наступил момент, когда в клетке не сталось ни одной обезьяны, которую когда-то обливали ледяной водой. И что же? Очередную «новенькую» всё равно оттащили от лестницы!

Почему? Потому что так у них принято!


В MS, кстатии, от "m_" отказались. Не прошло и 15 лет.

А>Получается тогда, что надо и в плюсах ориентироваться на остандартную библиотеку STL в оформлении?

imho, лучше всего ориентироваться на текущий проект. Смена codestyling всегда напрягает людей, да и проект с перемешанными стилями смотрится неоднозначно.

Хотя, на самом деле, лучше взглянуть на содержание C++ Coding Standards. 100 важных тем. Ни одна не касается наименований. Nobody cares. Вот так-то.
Re[6]: Имена классов и объектов
От: zitz  
Дата: 07.08.09 08:23
Оценка: +2
Здравствуйте, Dmi3S, Вы писали:

Z>>Приставки — это прекрасно!

DS><нас всех тошнит>

Рад за вас, но это ваши проблемы.

Z>>Почему их люди не используют повсеместно?

DS>namespace это не модно?

Я чесно говоря так и не смог к ним привыкнуть. Зачем городить огород когда можно просто пару букв добавить в название?
Выглядят неймспейсы в коде ИМХО ужастно, типа
namespace::класс
короче куча визуального мусора
Если писать using, так от этого смысл этих неймспесов теряется. Ниже вы предлагаете так делать
using std::ostream;
typedef std::ostream default_stream;

Т.е. я везде где использую класс буду должен написать его псевдоним, да еще и помнить что этот псевдоним — это именно тот класс. Правильно?

DS>Ну сколько же нужно выпить, чтобы не отличить класс от экземпляра по контексту?


Я конечно понимаю что программирование это очень задорно и увлекательно, разбираться в различных контекстах, придумывать псевдонимы и прочие замечательные вещи — это так здорово! Но к сожалению в суровых реалиях, нужно код писать быстро, часто переписывать старые участки — и чем меньше времени на понимание потребуется тем лучше.
Да я пишу перед указателем p, перед членом класса m_, перед статическими переменными st_, перед названием переменной её тип b, dw, i, — потому что мне это удобно. А если тип поменялся — что само по себе событие требующее повышенной внимательности, я переименовываю переменную. С современными инструментами рефакторинга это не составляет вообще никаких проблем.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[12]: Имена классов и объектов
От: Erop Россия  
Дата: 07.08.09 09:21
Оценка:
Здравствуйте, Dmi3S, Вы писали:

A>>В общем мне интересно: что в этих приставках не так?

DS>Не нужны они. Ну сколько же нужно выпить, чтобы не отличить класс от экземпляра по контексту? Или что нужно покурить, чтобы написать так, чтобы было не понятно?

foo()
{
    bar1( bar2() ); // bar -- это класс или функция? :shuffle: 
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[13]: Имена классов и объектов
От: Аноним  
Дата: 07.08.09 09:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>
foo()
E>{
E>    bar1( bar2() ); // bar -- это класс или функция? :shuffle: 
E>}


Функтор?
Re[7]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 10:33
Оценка: -1
Здравствуйте, zitz, Вы писали:

namespace Z { void put() { std::puts("
Z>Рад за вас, но это ваши проблемы.
"); }
Спасибо. Я не страдаю.

Z>Я чесно говоря так и не смог к ним привыкнуть.

Z::put();

Z>Зачем городить огород когда можно просто пару букв добавить в название?

Чтобы не добавлять пару букв в название.
Z>Выглядят неймспейсы в коде ИМХО ужастно, типа
Z>namespace::класс
Z>короче куча визуального мусора
using Z::put; put();

Z>Если писать using, так от этого смысл этих неймспесов теряется.

Говорите, это интересно.

Z>Ниже вы предлагаете так делать

Z>using std::ostream;
Z>typedef std::ostream default_stream;

Z>Т.е. я везде где использую класс буду должен написать его псевдоним, да еще и помнить что этот псевдоним — это именно тот класс. Правильно?
Нет. Это пример использования typedef в качестве 1. Импорта отдельного имени вместо всего пространства имен. 2. Зародыша traits.

DS>>Ну сколько же нужно выпить, чтобы не отличить класс от экземпляра по контексту?

Z>Я конечно понимаю что программирование это очень задорно и увлекательно, разбираться в различных контекстах, придумывать псевдонимы и прочие замечательные вещи — это так здорово!
Это не здорово. Это должностные обязанности. В любом языке есть тонкости. А тонкостей C++ хватит на десяток языков. Это не повод их использовать, но хотя бы раз понять их — обязательно.

Z>Но к сожалению в суровых реалиях, нужно код писать быстро, часто переписывать старые участки — и чем меньше времени на понимание потребуется тем лучше.

namespace { Z::put(); }
Частое переписывание старых участков вас не напрягает? В смысле, что что-то со старыми участками не то.

Z>Да я пишу перед указателем p, перед членом класса m_, перед статическими переменными st_, перед названием переменной её тип b, dw, i, — потому что мне это удобно.

namespace Z { put(); }
Я действительно не понимаю, чем это может помочь быстро разобраться в коде. Если перед вами дымятся последствия взрыва на макаронной фабрике, то что они с префиксами, что без — это все равно адский вырвиглаз. Если же соблюдены хотя бы элементарные сан-гигиенические нормы на локальность переменных, размеры и именования функций и т.д., то не думаю, что префиксы могут чем-то помочь.

Z>А если тип поменялся — что само по себе событие требующее повышенной внимательности, я переименовываю переменную.

Может, стоит включить все warnings, и компилятор сам все расскажет о подозрительных преобразованиях? Не доверяете?
Re[13]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 10:39
Оценка:
Здравствуйте, Erop, Вы писали:

E>
foo()
E>{
E>    bar1( bar2() ); // bar -- это класс или функция? :shuffle: 
E>}


А как бы вы ответили на этот вопрос? Я даже не понимаю, о чем речь.
Re[14]: Имена классов и объектов
От: Erop Россия  
Дата: 07.08.09 10:51
Оценка:
Здравствуйте, Dmi3S, Вы писали:

DS>А как бы вы ответили на этот вопрос? Я даже не понимаю, о чем речь.


Любой из двух...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Имена классов и объектов
От: D14  
Дата: 07.08.09 10:57
Оценка: :)
Здравствуйте, zitz, Вы писали:



Z>>>Почему их люди не используют повсеместно?

DS>>namespace это не модно?

Z>Я чесно говоря так и не смог к ним привыкнуть. Зачем городить огород когда можно просто пару букв добавить в название?


Что-то вроде этого

namespace Impl1
{
}
namespace Impl2
{
}
#ifdef ...
#define Impl Impl2
#endif

Impl::f(1);
Re[15]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 10:57
Оценка:
Здравствуйте, Erop, Вы писали:

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


DS>>А как бы вы ответили на этот вопрос? Я даже не понимаю, о чем речь.


E>Любой из двух...


bar1 и bar2 могут быть хоть typedef int. Я не про это. Я про то, что нету "bar" в исходном коде. Я его аж выделил. Ладно.
Чтобы так писать нужна сильная трава, я говорил об этом. Ну или злой умысел, что по умолчанию выключено.
Re[16]: Имена классов и объектов
От: Erop Россия  
Дата: 07.08.09 11:05
Оценка:
Здравствуйте, Dmi3S, Вы писали:

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


Или немного другой образ мыслей, или плохая клава, или спешка...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 11:32
Оценка: +1
Здравствуйте, D14, Вы писали:

D14>Что-то вроде этого


D14>
D14>namespace Impl1
D14>{
D14>}
D14>namespace Impl2
D14>{
D14>}
D14>#ifdef ...
D14>#define Impl Impl2
D14>#endif

D14>Impl::f(1);
D14>


Хотите вызвать легкий культурологический шок у читающего с помощью реализации статического полиморфизма средствами препроцессора?
На мне — сработало.
Re[17]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 07.08.09 11:36
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Или немного другой образ мыслей, или плохая клава, или спешка...


Плохому программисту клава мешает.

ЗЫ. Не примите на свой счет. Не могу удержаться от идиотской шутки.
ЗЫЫ. Про спешку не буду.
Re[10]: Имена классов и объектов
От: Draqon  
Дата: 08.08.09 18:27
Оценка: +1
Здравствуйте, Dmi3S, Вы писали:


А>>Сейчас видно в вашем коде, а завтра в чужом непонятно что за переменная такая.

DS>Пойти и задать два простых вопроса. Что за переменная, и почему я не понимаю этого сразу.

Ого, а вы оптимист. Не приходилось поддерживать код N-цадтилетней давности? Который написал неизвестно кто? Или известно, но фиг у него спросишь, т.к. он уже лет несколько как уволился?
Re[11]: Имена классов и объектов
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 08.08.09 18:40
Оценка:
Здравствуйте, Draqon, Вы писали:

D>Ого, а вы оптимист. Не приходилось поддерживать код N-цадтилетней давности? Который написал неизвестно кто? Или известно, но фиг у него спросишь, т.к. он уже лет несколько как уволился?


В любом случае это WTF. Основных направлений всего два. Первое — это когда хорошо, ясно написано, но не понятна общая картина происходящего (можно встретить с вероятностью более, чем 0). А второе (с вероятностью over 95%) — непонятна локальная картина, причем в любом месте исходного кода. Обычно даже трудно вывести понятие локальность, т.к. поведение всех функций связано друг с другом с помощью 9001 глобальной переменной. Очень хочется переписать, но не дают. Сжать зубы, терпеть. Искать другую работу или стать героем. В любом случае — для меня это <censored>.
Не думаю, что кто-то из коллег назвал бы меня оптимистом. Просто в первом случае префиксы не нужны, а во втором — тоже не нужны.
Re: Имена классов и объектов
От: Alexander G Украина  
Дата: 08.08.09 19:09
Оценка:
Здравствуйте, Sealcon190, Вы писали:

S>С нормальными названиями классов, CDrinks, CMartini, CAnimal, CGroundHog, лично мне было бы легче сосредоточиться, а так как есть – здорово запутывает и отвлекает от основной задачи.


Иногда в одном и том же проекте используются, например, Boost (с STL-way стилем), WTL (с MFC-way стилем), ну и десяток всячеких libastralов. Как же можно работать в таких проектах!?
Русский военный корабль идёт ко дну!
Re[13]: Имена классов и объектов
От: crable США  
Дата: 10.08.09 05:10
Оценка:
Здравствуйте, Erop, Вы писали:

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


A>>>В общем мне интересно: что в этих приставках не так?

DS>>Не нужны они. Ну сколько же нужно выпить, чтобы не отличить класс от экземпляра по контексту? Или что нужно покурить, чтобы написать так, чтобы было не понятно?

E>
foo()
E>{
E>    bar1( bar2() ); // bar -- это класс или функция? :shuffle: 
E>}


А не всё-ли равно? Тем более что в реальном коде будет скорее всего что-то вроде
drink( get_beverage() );

или
drink( martini() );

и уже вполне понятно, что get_beverage это функция, а martini класс, иначе есть большая вероятность, что код написан абы как и наличие всяких там префиксов и суффиксов всё равно не поможет, разве не так?
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[14]: Имена классов и объектов
От: Erop Россия  
Дата: 10.08.09 07:09
Оценка:
Здравствуйте, crable, Вы писали:


C>
C>drink( martini() );
C>

C>и уже вполне понятно, что get_beverage это функция, а martini класс, иначе есть большая вероятность, что код написан абы как и наличие всяких там префиксов и суффиксов всё равно не поможет, разве не так?

Не так. Процитированный код -- это не обязательно вызов кода в C++ Это может быть объявлением функции martini, возвращающей drink и не имеющей аргументов...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Имена классов и объектов
От: zitz  
Дата: 10.08.09 07:44
Оценка:
Здравствуйте, Alexander G, Вы писали:

S>>С нормальными названиями классов, CDrinks, CMartini, CAnimal, CGroundHog, лично мне было бы легче сосредоточиться, а так как есть – здорово запутывает и отвлекает от основной задачи.


AG>Иногда в одном и том же проекте используются, например, Boost (с STL-way стилем), WTL (с MFC-way стилем), ну и десяток всячеких libastralов. Как же можно работать в таких проектах!?


Если не использовать using, то просто дописываете std:: или boost:: — это сразу видно, что код от туда
Над другими библиотеками я делаю обёртки, чтобы минимизировать количество "плохого" кода.
В общем всё от ситуации зависит
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[15]: Имена классов и объектов
От: crable США  
Дата: 10.08.09 09:53
Оценка:
Здравствуйте, Erop, Вы писали:

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



C>>
C>>drink( martini() );
C>>

C>>и уже вполне понятно, что get_beverage это функция, а martini класс, иначе есть большая вероятность, что код написан абы как и наличие всяких там префиксов и суффиксов всё равно не поможет, разве не так?

E>Не так. Процитированный код -- это не обязательно вызов кода в C++ Это может быть объявлением функции martini, возвращающей drink и не имеющей аргументов...


Вопрос относился только к выделенной части. Чтобы этот код стал объявлением функции нужно, чтобы drink был именем типа (что в принципе не так страшно, но, пожалуй, лишет нас возможности дать подходящее имя функции 'пить'), но, в данном случае, непреднамеренно объявить функцию невозможно, а специально называть функцию 'martini' уже ненормально. Вообще, если кто-то написал код, в котором это дейсвительно объявление функции и это сошло ему с рук, то что могло помешать этому человеку начхать на все эти суффиксы/префиксы (если они используются) и написать так
Drink( CMaritini() );
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[16]: Имена классов и объектов
От: Erop Россия  
Дата: 10.08.09 10:23
Оценка:
Здравствуйте, crable, Вы писали:

C>...то что могло помешать этому человеку начхать на все эти суффиксы/префиксы (если они используются) и написать так

C>
C>Drink( CMaritini() );
C>


При просмотре кода, в этом случае видно, что тут скорее всего ошибка...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.