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

Ключевое слово "with"

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



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

СообщениеДобавлено: Вт Апр 24 2007 03:16    Заголовок сообщения: Ключевое слово "with" Ответить с цитатой

Товарищи! В свое время я уже поднимал эту тему, но в другом контексте. Трабл такой: в Дельфях, в Вижл Бейсике, в еще куча чем, есть такой киверд - with. Но в C/C++ он отсутствует. Может, оно и к лучшему, но тут вот прогу пишу, где надо в рантайме создать кучу контролов и, естественно, придать значения их свойствам. Свойств - море! Логично предположить, что with был бы здесь как никогда кстати (ну, ради сокращения писанины). Неужели ничего не предусмотрено в Сях под подобные нужды?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Вт Апр 24 2007 07:44    Заголовок сообщения: Если в си чего-то нет, значит, это вам не нужно Ответить с цитатой

функциональный #дефайн не подходит?
-------------------------------------------------
Если в си чего-то нет, значит, это вам не нужно
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



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

СообщениеДобавлено: Вт Апр 24 2007 20:47    Заголовок сообщения: Ответить с цитатой

Не думаю, что от дефайна будет какой-нить толк.
Собсна, как это все могло бы выглядеть на Дельфях:
Код:

var CheckBox: TCheckBox;
CheckBox := TCheckBox.Create(nil);
with CheckBox do begin
  Caption := 'blah-blah-blah';
  Left := 10;
  ...
  Top := 20;
  Width := 150 end;

То же на Сях:
Код:

TCheckBox *CheckBox = new TCheckBox(NULL);
CheckBox->Caption = "blah-blah-blah";
CheckBox->Left = 10;
...
CheckBox->Top = 20;
CheckBox->Width = 150;

Теперь представить себе еще штук десять-пятнадцать свойств для чекбокса... Честно признаться, каждый раз писать "CheckBox" немного лень. Да и размер кода - пусть даже и в ширину - но растягивается. Дефайном можно максимум заменить CheckBox на что-нить покороче, но в место этого логичнее было бы сразу создать указатель с более компактным именем.
Конечно, не так уж и страшно каждый раз указывать указатель (пардон за тафталогию), но не очень ясно, почему создатели синтаксиса Си (то бишь Майкрософт, если я не ошибаюсь) настолько умоляют перспективы использования with, что просто "забыли" про него?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sniper::p



Зарегистрирован: 04.10.2005
Сообщения: 237
Откуда: rus/73

СообщениеДобавлено: Ср Апр 25 2007 01:36    Заголовок сообщения: Ответить с цитатой

Во-первых, создатели С - не Майкрософт Evil or Very Mad . Во-вторых, почему бы не написать вместо "CheckBox" что-нибудь вроде "cb"? В-третьих, в С это дело (т.е. "with") не нужно, поскольку остальной синтаксис так и говорит - в 1й строке - 1 инструкция.
ЗЫ Кстати, есть такой инструмент - буфер обмена, в него можно копировать и вставлять Laughing
ЗЗЫ Между прочим, можно всю эту расстановку оформить в отдельную функцию, в которую передавать указатель (там формально уже его назвать "cb" и ковыряться с ним сколько угодно)
_________________
Нет предела совершенствованию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



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

СообщениеДобавлено: Ср Апр 25 2007 01:52    Заголовок сообщения: Ответить с цитатой

sniper::p, я совсем не против отсутсвия with. "cb", конечно, можно писать, но полтора десятка строк, начинающихся с "cb->".......

Остальные тобой приведенные варианты не решают вопрос сокращения кода. Но есть же какое-то разумное объяснение отсутсвия with'а в Сях Question Exclamation

Насчет Майкрософта я, действительно, ошибся. Перепутал его с Lucent Technologies (если опять ничего не путаю). Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Ср Апр 25 2007 08:39    Заголовок сообщения: В си, как в инете, есть всё. Вопрос в том, как это найти Ответить с цитатой

В заголовочном файле записать:
Код:
#define CAPTION STRUCT.Caption
#define LEFT STRUCT.Left
...
#define TOP STRUCT.Top
#define WIDTH STRUCT.Width


А в программном файле записать:
Код:
TCheckBox *CheckBox = new TCheckBox(NULL);

#define STRUCT (*CheckBox)
CAPTION = "blah-blah-blah";
LEFT = 10;
...
TOP = 20;
WIDTH = 150;
#undef STRUCT


#define будет аналогом предложения with, а #undef -- аналогом end.
Писанины будет больше только при определении структуры (фактически структуру придётся записать дважды), а при непосредственно программировании ровно также, как и в паскале

По поводу Lucent Technologies -- тоже ошибка. Си начинались в AT&T, в её подразделении Bell Laboratories

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



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

СообщениеДобавлено: Ср Апр 25 2007 09:22    Заголовок сообщения: Ответить с цитатой

А я всегда думал, что Си придумали Керниган и Ричи Rolling Eyes

Насчет with, в си его действительно заменить сложно. Но оператор with заметно снижает читабельность программы. А как известно код пишется один раз, а читается десятки.

В Си++, установка сразу нескольких свойств объекта константами должна быть перенесена в метод класса этого объекта. Другое дело, если класс сторонних разработчиков который нельзя наследовать, тогда ничего не остается как писать все.

Но я не вижу в этом проблемы, печатаю достаточно быстро, чтобы об этом не думать.
_________________
Самоловских Виталий aka Kefir
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...