Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

with #$%&&#$ do

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пт Сен 09 2005 10:09    Заголовок сообщения: with #$%&&#$ do Ответить с цитатой

Тут наткнулся на вопрос по поводу аналога паскалевского case of для C - switch. И вспомнился мне вопрос, на который, не найдя ответа, я забил, но теперь снова вспомнил. Есть ли в C++ что-нибудь подобное оператору "with" Паскаля (или VB, или еще штук двадцать языков).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Пт Сен 09 2005 12:05    Заголовок сообщения: Ответить с цитатой

нет
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пт Сен 09 2005 12:08    Заголовок сообщения: Ответить с цитатой

Печально.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Пт Сен 09 2005 16:00    Заголовок сообщения: Ответить с цитатой

На самом деле все не так печально как кажется. Если вы пишете на Си, то все действительно печально. Если вы пишите на Си++ используя ООП (я говорю именно про ОО парадигму) то необходимость использования аналога with указывает на плохое проектирование иерархии классов. Вообще в ООП обращаться к членам класса на прямую не есть гуд. А про структуры надо забыть сразу.

Все вышесказанное относится лишь к ООП. Лично я не люблю использовать Си++ для создания ООП приложений, больше предпочитаю создавать структурные программы на Си++ с использованием некоторых преимуществ ООП. Си++ на мой взгляд не очень приспособлен, как бы это парадоксально не прозвучало, для создания ООП приложений.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пн Сен 12 2005 13:10    Заголовок сообщения: Ответить с цитатой

Поспорить не с чем. Но С++ мне нужен для работы, и тут не мне решать, пользоваться мне им или нет. Я бы с радостью на Delphi пописал бы (и не только потому, что там есть with).
Но все же интересно, почему не реализована такая хорошая и удобная, а местами - полезная, вещь with?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Пн Сен 12 2005 20:56    Заголовок сообщения: Ответить с цитатой

Цитата:
Я бы с радостью на Delphi пописал бы

Да за что ж ты их так?! Wink

Цитата:
почему не реализована такая хорошая и удобная, а местами - полезная, вещь with

1. Потому что организация классов в дельфях на порядок примитивнее (по версии оппонентов - проще и нагляднее Smile ) того же в сях++ и вполне сравнима с аналогичной в вижуал бейсике. И организация withа в сях привела бы в ряде случаев к неоднозначной трактовке кода.
2. Если десять строк подряд начинаются с "MyObject. ... ", это заставляет задуматься о том, понимает ли вообще автор, на фига нужны классы. Такие вещи следует стремиться организовывать _внутри_ класса, а там никакой with вообще не нужен.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Вт Сен 13 2005 08:48    Заголовок сообщения: Ответить с цитатой

Что ни говори, но всегда найдутся классы с такой кучей пропертей, что присвоить паре из них необходимые значения недостаточно. Это первый случай. Второй - возможность с помощью with избежать "длинных" строк. Сейчас я пишу xml-парсер на C++, используя компонент TXMLDocument. Полнейшее безобразие начинает твориться, когда мне нужно работать со вложенными XML-блоками, например, третьего уровня. Смотрите сами:

XMLDocument->DocumentElement->ChildNodes->Nodes[0]->
ChildNodes->Nodes[0];

Это я только до него добрался. А если мне нужно прочитать, скажем, пять его аргументов, так еще и содержимое его свойства Text. Я не любитель огромных строк, поэтому создаю указатель на строку, приведенную выше. Сами понимаете, что это не оптимально.
А вот пример, как бы это все "звучало" в Паскале:

with XMLDocument.DocumentElement.ChildNodes[0].ChildNodes do
begin
x := Nodes[0]->Attributes['Attr1'];
y := Nodes[0]->Attributes['Attr2'];
z := Nodes[1]->Text;
end;

Не правда ли, кажется более эстетично, нежели три строки полностью?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Вт Сен 13 2005 10:39    Заголовок сообщения: Ответить с цитатой

Перепроектируй прогу... Таких длинных строк быть не должно...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Вт Сен 13 2005 10:47    Заголовок сообщения: Ответить с цитатой

Так и я про тоже! Приходится делать что-то вроде:

_di_IXMLNode MyNode XMLDocument->DocumentElement->ChildNodes->Nodes[0];
MyNode->ChildNodes->Nodes[0] ...........
MyNode->ChildNodes->Nodes[0] ...........
MyNode->ChildNodes->Nodes[0] ........... и т.д.

Короче, могли бы Борландовцы "подкрутить" свой компилятор и воткнуть в него обработку какого-нить аналога with.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Вт Сен 13 2005 11:23    Заголовок сообщения: Ответить с цитатой

Я не о том. У тебя явно ошибки проектирования. Вот например я сейчас пишу систему тестирования. Там агрегации:

Тест->Вопрос->Ответ

Разбираю из XML. Передаю в конструктор теста элемент теста element и пишу
Код:
...
// создаю вопросы
NodeList list = element.getElementsByTagName("question");
for(int i=0; i<list.getLength(); i++)
  add(new Question(list.item(i)));
...


Как не трудно догадаться в конструктор вопроса передается элемент вопроса, имеем:
Код:
...
// Создаю ответы
NodeList list = element.getElementsByTagName("answer");
for(int i=0; i<list.getLength(); i++)
  add(new Answer(list.item(i)));
...


И т.д.

Как видите, никаких длинных строк...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Вт Сен 13 2005 11:28    Заголовок сообщения: Ответить с цитатой

Все, конечно, замечательно, но у меня немного другие требования к XML-документу и моему парсеру. Не буду сейчас во все это углубляться, а то и так от темы отошли - модераторы заругают.
Короче, все понятно: нету в C++ with, ну и хрен с ним!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...