Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Использование Out   Найти похожие ветки 

 
Rule ©   (2004-12-24 17:51) [40]

begin...end ©   (24.12.04 17:40) [33]
спасибо, не про тот абсолют подумал :), если этот, то да ... :)
y-soft ©   (24.12.04 17:42) [36]
Это распространенная задача. Например, при парсинге динамических пакетов переменной структуры...

ну извините, не все с этим работают ... но мне понятно ... это ближе к нижнему уровню, давно с этим не работал, мы "всё выше и выше и выше" как в пестне ... а печально :(


 
DiamondShark ©   (2004-12-24 17:57) [41]


> Rule ©   (24.12.04 17:27) [19]
> DiamondShark ©   (24.12.04 17:24) [18]
> ого, а это что за извращение, можно узнать назначение вот
> этого, что в результате намечалось получить ?

Отчего же извращение?

Вот примерчик из жизни.
Есть некий девайс, который хочет обмениваться через порт такими пакетами:

type
 TPacket = packed record
   Signature: word;
   Size: word;
   case Command: byte of
   // Здесь разные наборы полей в зависимости от кода команды
   // а последний байт -- контрольная сумма
 end;

И процедура:

procedure CalcChecksum(var Data: TPacket);
var
 ByteData: TByteArray absolute Data;
 i: integer;
 b: byte;
begin
 b := 0;
 for i := 0 to Data.Size - 2 do b := b + ByteData[i];
 ByteData[Data.Size - 1] := b;
end;


 
Anatoly Podgoretsky ©   (2004-12-24 17:57) [42]

Так out для строк по смыслу требует обязательной инициализации, в отличии от var. И как раз указание out и предназначено на уменьшение ошибок в программе. var означает что переменная есть и она инициализирована, то есть и входно и выходной параметр одновременно и с ней не обязательно работать, а вот с out нет, это выходной параметр. Аналог var это inout

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn’t provide any input.


 
y-soft ©   (2004-12-24 17:58) [43]

>Rule ©   (24.12.04 17:51) [40]

При работе с потоками байтов иногда только так и приходится...
Иногда через указатель на массив байтов, иногда вообще инкрементируя по мере надобности указатель на байт...


 
Rule ©   (2004-12-24 18:04) [44]

DiamondShark ©   (24.12.04 17:57) [41]
понял понял, спасибо, в данном контексте, я просто не привык к программам на сравнительно низком уровне, написаных на паскале :), не много их :)


 
Rule ©   (2004-12-24 18:05) [45]

y-soft ©   (24.12.04 17:58) [43]
а ты уверен что только так ???
или может тебе это только кажется ...


 
begin...end ©   (2004-12-24 18:08) [46]

> [44] Rule ©   (24.12.04 18:04)

> понял понял

Нет уж, смотри дальше про "извращения":

http://delphimaster.net/view/1-1103631124/

:-)))


 
PVOzerski ©   (2004-12-24 18:11) [47]

Нетипизированные параметры использую очень часто. Также обожаю GetMem/FreeMem/ReallocMem - для виртовского паскаля это совершенная экзотика. Дело в том, что у меня много что написано на D3, где нет еще одной экзотики - динамических массивов - вот сам их делаю. А классы, да и объекты, - это тоже ведь экзотика  с такой точки зрения :^). Кстати, кто-нибудь помнит: есть ли в виртовском паскале приведение типов и адресный оператор?


 
y-soft ©   (2004-12-24 18:15) [48]

>Rule ©   (24.12.04 18:05) [45]

DiamondShark © привел пример очень простой структуры пакета, реально используются и гораздо более извращенные структуры с многоуровневыми вложенными блоками данных, которые невозможно описать целиком в виде packed record (сами используем такие).

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

В прочем, я не настаиваю на единственности такого подхода - возникнет задача, так решайте способом, который Вам кажется более правильным... :)


 
Rule ©   (2004-12-24 18:20) [49]

begin...end ©   (24.12.04 18:08) [46]
ну добил, стучу три раза по мату :)))

зачем же так издеваться :))))

y-soft ©   (24.12.04 18:15) [48]
В прочем, я не настаиваю на единственности такого подхода - возникнет задача, так решайте способом, который Вам кажется более правильным... :)


абсолютно согласен, главное - лишь бы на пользу :)))

я надеюсь
так решайте способом
не лично ко мне, а то во первых "навыканья" не заслужил ни по возрасту не по соц.статусу, а во-вторых вроде бы это не прилично в сети "выкать"
так что если ко мне, то прошу лучше на "ты" ... а то неудобно както


 
y-soft ©   (2004-12-24 18:26) [50]

>Rule ©   (24.12.04 18:20) [49]

не лично ко мне, а то во первых "навыканья" не заслужил ни по возрасту не по соц.статусу, а во-вторых вроде бы это не прилично в сети "выкать"

А я вот как раз по возрасту и воспитанию не привык к "тыканью".

А насчет якобы неприличности "выканья" в сети - вопрос весьма спорный... IMHO вежливость (без расшаркивания) всегда прилична...


 
Rule ©   (2004-12-24 18:32) [51]

y-soft ©   (24.12.04 18:26) [50]
ну тут можно спорить ...

во первых когда общаешься в сети, то очень часто приходиться общаться на разных языках, а вот известно что во многих языках, в частности английском нет даже такого понятия, поэтому для так сказать "совместмости" принято "ты"

во-вторых в сети очень трудно определить что говорить "ты" или "вы", так как в реале это очень размыто, то в сети - это вообще воздушный вопрос

в-третих уважение,помоему, проявляется в содеражании написанного, а не в способе обращения ..., ИМХО конечно ...

и ещё одним оправданием "тыкания" может служить тот факт, что в сети все равны (исключаю деловую переписку и спец. ситуации конечно) ...

все конечно "ИМХО", но  как бывший фидошник и радиолюбитель (кстати в эфире такие же правила :) ) смею утверждать всё вышенаписаноое :)))


 
y-soft ©   (2004-12-24 18:38) [52]

>Rule ©   (24.12.04 18:32) [51]

Правильно упоминаете английский язык. Тем более, что правила "нетикета" первоначально на этом языке и были написаны.

Только вот местоимение "You" означает в переводе "Вы", а метоимение "Thou" ("Ты") употребляется исключительно при обращении к Богу и в поэзии...


 
Rule ©   (2004-12-24 18:46) [53]

y-soft ©   (24.12.04 18:38) [52]
мне право неудобно, когда вы мне на "вы" называете :))))))

уж не заслужил, ей богу, и очень неудобно, а вот общаться с собеседником так, чтоб ему было неудобно - это, согласитесь, неэтично, как минимум ...

Только вот местоимение "You" означает в переводе "Вы", а метоимение "Thou" ("Ты") употребляется исключительно при обращении к Богу и в поэзии...
ого, я так глубоко не вникал, сильно забурился в технический и американский (в процессе общения) английский и забыл об английской классике :)))....
спасибо за инфо, буду знать


 
Verg ©   (2004-12-24 18:47) [54]


> [47] PVOzerski ©   (24.12.04 18:11)


На сколько память не изменяет есть (был), только он возвращает строго типизированный указатель.

Приведение типа разрешено во многих канонических языках, но я считаю, что применять это бездумно - чревато прежде всего для себя же. Вырабатывается привычка, которая приводит уже на "автопилоте" к вообще-то некорректным действиям, на что потом (в очередной ситуации) начнает "отваливаться челюсь" и кажется, что мир перевернулся.
А все потому, что "если работает - значит правильно" - в корне неверное, даже вредное утверждение.
Например, это преславутое приведение поинтера к интегеру или чего-нибудь к boolean, или получение младших/старших байтов слова подразумевая единственное (как им кажется) устройство endian - это вообще полная за...ца, хотя люди этим пользуются меного раз и беззаботно... до поры, до времени...
После того, как обстоятельства повозят "мордой об асфальт", вырабатывается жесткий эммунитет от всяго рода сомнительных "операций над"....


 
y-soft ©   (2004-12-24 18:48) [55]

>Rule ©   (24.12.04 18:46) [53]

В любом случае прошу мое старческое "Выканье" ни в коем случае не воспринимать в качестве попытки оскорбления :)


 
Rule ©   (2004-12-24 18:49) [56]

y-soft ©   (24.12.04 18:38) [52]
обратная логика, тоесть Бога на ты, а всех остальных на вы ?, очень интересно и кстати может не в тему, но интересный факт, может просветите,
заметил что даже аттеисты пишут слово "Бог" с большой буквы, слышал теорию что с маленькой буквы - это будет противоположно значение этого слова, тоест  дьявол, а почему ?


 
y-soft ©   (2004-12-24 18:52) [57]

Rule ©   (24.12.04 18:49) [56]

Ну, это тема для отдельной ветки. В прочем, исторических корней, почему именно так, я не знаю (наверное, по причине атеизма:) )


 
Rule ©   (2004-12-24 18:52) [58]

y-soft ©   (24.12.04 18:48) [55]
тогда как вым/тебе будет лучше, чтоб я обращался к вам/тебе, на "ты" или на "вы" ?

а оскарбленным от того что меня на "вы" не чувствую, только если бы меня назвал бы 10 летний мальчик на "вы", то ничего, а когда человек постарше и помудрее, то чувствую себя очень неуютно и автоматически переходишь на "ВЫ", так как чувствуешь себя невеждой ... а вроде всё по общепринятым правилам (это так, полет мысли :))


 
Rule ©   (2004-12-24 18:53) [59]

y-soft ©   (24.12.04 18:52) [57]
пока модераторы спят, можно и сдеся :)))
(шутка),
а если они это читают, то прошу их искринне нас извинить за разведенный оффтоп ...


 
y-soft ©   (2004-12-24 18:54) [60]

>Rule ©   (24.12.04 18:52) [58]

Это, млинн, наш полуазиатский менталитет сказывается :)


 
Rule ©   (2004-12-24 19:00) [61]

y-soft ©   (24.12.04 18:54) [60]
эт точно :))))

ЗЫ: а по поводу первой части вороса ?


 
y-soft ©   (2004-12-24 19:15) [62]

По первой части в общем-то без большой разницы.
Лишь бы не в оскорбительном контексте :)


 
тварь   (2004-12-24 19:20) [63]

о даже аттеисты пишут слово "Бог" с большой буквы
Это как имя. Почему атеисты пишут "Велес" или "Один" с большой буквы? Это имена.


 
DiamondShark ©   (2004-12-24 19:30) [64]


> PVOzerski ©   (24.12.04 18:11) [47]
> Кстати, кто-нибудь
> помнит: есть ли в виртовском паскале приведение типов и
> адресный оператор?

Именно в виртовском не было ни того, ни другого.
Более того, сам Вирт сильно сокрушался по поводу того, что в язык, таки, попало средство, допускающее приведение типов, а именно -- записи с вариантами, позволяющие трактовать физическое представление одного типа как значение другого типа.
В Обероне он убрал из языка вариантные записи.

Зато в авторской версии Паскаля были другие интересные кострукции.
Например, параметры-процедуры:


procedure TabulateFunc(function F(X: integer): real);
var
 x: integer;
begin
 for x := 0 to 100 do
   writeln("x=", x, " f(x)=", F(x));
end;

function MyFunc(X: integer): real;
begin
 MyFunc := sin(x) * cos(x) / sqrt(x);
end;
...
begin
 TabulateFunc(MyFunc);
 ...

Или расширение процедуры New для вариантных записей:


type
 TData = record
   Field: TType;
   case Selector: integer of
     0: (...);
     1: (...);
     2: (...)
 end;
 PData = ^TData;
...
var
 P: PData;
begin
 New(P, 1); { выделяем память для варианта 1 }
 ...


 
PVOzerski ©   (2004-12-24 19:35) [65]

С параметрами-функциями я встречался в Think Pascal для Mac. Кстати, не понимаю, что мешало Борланду оставить эту конструкцию, как альтернативу процедурным переменным. Еще убирание get/put понять могу (это увеличило эффективность работы с файловыми переменными, пожалуй), а вот это - не понимаю.


 
DiamondShark ©   (2004-12-24 19:43) [66]


> PVOzerski ©   (24.12.04 19:35) [65]

Видимо, посчитали излишеством.
Да и процедурные типы всё-таки, красивше смотрятся.

Вирт сам к этому пришёл: в Обероне есть тип POINTER TO PROCEDURE(...), причём, он включает и аналог борландовского procedure(...)  of object.



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.59 MB
Время: 0.039 c
1-1103929199
serko
2004-12-25 01:59
2005.01.16
Как загрузить процессор?


1-1104692206
TechnoDreamer
2005-01-02 21:56
2005.01.16
Добавление элемента в TreeView без потери сортировки


9-1096003204
Rem
2004-09-24 09:20
2005.01.16
Перпендикуляр


1-1104335957
Тимур
2004-12-29 18:59
2005.01.16
Проблема с Dll


1-1104485183
гость
2004-12-31 12:26
2005.01.16
Подскажите в чем ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский