Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 05:54   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Что лучше процедура или функция???

Вот ребята я где то слыхал что функция не уничтожает результат, что будет лучше:

Код:
function Func: integer;
begin
 Result := 5 + 5;
end;

procedure Proc(Var Res : integer);
begin
  Res := 5 + 5;
end;
Или как результат уничтожить???
VintProg вне форума
Старый 17.08.2010, 06:20   #2
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Как понять "уничтожить"?
r9m вне форума
Старый 17.08.2010, 06:22   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Как понять "уничтожить"?
Уничтожить переменную результата!
VintProg вне форума
Старый 17.08.2010, 06:34   #4
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Цитата:
Уничтожить переменную результата!
А, спасибо, спасибо.

А я где-то слышал, что переменная result существует только в функции, и уничтожается при ее отработке . Другое дело, что значение в памяти оставленное этой переменной ничем не очищается. Если нужно, чистить можно по указателю. Если нужно.

Последний раз редактировалось r9m; 17.08.2010 в 07:07.
r9m вне форума
Старый 17.08.2010, 07:29   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Зачем тебе уничтожать результат функции?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 17.08.2010, 07:58   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что будет лучше:
Что бы там лучше ни было учти - процедура в выражениях участвовать не может.
К тому же integer не требует освобождения.
I'm learning to live...
Stilet вне форума
Старый 17.08.2010, 09:05   #7
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Зачем тебе уничтожать результат функции?
Ну как зачем, не будеш уничтожать ресульты они будут жить в памяти столько их будет сколько ты функции на вызывал или как?
VintProg вне форума
Старый 17.08.2010, 09:18   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не будеш уничтожать ресульты они будут жить в памяти
Смотря какие. Если это объект то да. Жить он будет пока прога не закроется.
В твоем случае скорее всего результат попадет в регистр EAX. И чистить его глупо.
Но если хочешь :
Код:
asm xor eax,eax end;
Ты ж сразу оговори о каком типе результата идет речь.
I'm learning to live...
Stilet вне форума
Старый 17.08.2010, 09:36   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

VintProg, очень сильно рекомендую Вам почитать
Стив Тейксейра, Ксавье Пачеко. Borland Delphi 5. Руководство разработчика
там, прямо в первом томе подробно обсуждается, каким образом переменные представляются, что собой представляет уборка мусора, жизненный цикл переменной и т.д. и т.п.

По простому скажу так - если вы создаёте экземляр (объект) какого-то класса (например, так: ts := TStringList.Create(); или tb := TLabel.Create(self) и т.д. - тогда Вам нужно озаботится и о уничножении объекта (чтобы очистить занимаемую им память).

Функция же возвращает значение через стек/регистры, поэтому дополнительно очищать ничего не нужно!

p.s. но, как совершенно справедливо заметил Stilet, отличия есть в использовании процедуры и функции - обычно функция удобнее. Хотя, если нужно вернуть несколько значений, тогда без процедуры просто не обойтись.

p.p.s. приношу свои извинения, если был слишком резок. Если что-то непонятно - не стесняйтесь спрашивать.

Удачи.
Serge_Bliznykov вне форума
Старый 17.08.2010, 09:58   #10
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Ты ж сразу оговори о каком типе результата идет речь.
Да о всех рядах типов, можно для начала Integer;
VintProg вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна функция или процедура для того чтобы программа стала резидентной! star007 Помощь студентам 3 22.03.2010 08:59
Память, (что тяжелее:функция или процедура) WF7 Паскаль, Turbo Pascal, PascalABC.NET 4 08.06.2009 08:09
Процедура или функция, удаляющая окаймляющие пробелы в строке (Delphi) Аццкий прогер Помощь студентам 2 03.03.2009 04:12
Что лучше assembler или с++? Alabay Помощь студентам 13 11.01.2009 12:21