Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Mebiys
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 32
#1

Как работает переменная Result - Delphi

07.10.2016, 15:44. Просмотров 935. Ответов 8
Метки нет (Все метки)

Всем привет!В дельфи я совершенный новичок, вот объясните мне как работает этот код, вернее скажите правильно ли я его понял.


Delphi
1
2
3
4
5
6
7
8
9
10
function Tetst: string;
var
  i, j, step_cnt: integer;
begin
     Result := '';
     i:=2;
     if i>=1 then
           Result := 'e';
 
end;
Как я это понял:
Result - это системная переменная возвращаемого значения, то есть когда написана она она возвращает значение.
Я перевожу из делфи в С++, и вот хочу понять как работает эта переменная.
Весь код не привожу так как 5 тысяч строк.
Собственно не пойму Result это аналог return?
Интересует вопрос, как только компилятор встречает Result происходит выход из функции и передача управления вызвавшему коду??Или все таки идет дальнейшее выполнение, мне не понятно зачем делают:
Delphi
1
Result := '';
Понятно что переменная result теперь содержит пустоту, на ведь она возвращает значение и получается выход из функции??или тут что-то другое происходит???
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2016, 15:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как работает переменная Result (Delphi):

Переменная Result - Delphi
Всем привет! Вот мой вопрос: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Как записать этот код проще и понятнее и без переменн temp и result - Delphi
Условие задания: Есть строка что состоит из групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами....

Как найти количество элементов в списке (Tlist), если переменная такого типа объявлена как private? - Delphi
Друзья! Вот есть такой класс, не мой, я щас в нём ковыряюсь, он большой, я поубирал все ненужные на мой взгляд поля и методы для лучшего...

Ошибка I/O Result 103 - Delphi
Помогите разобраться в чем проблема: //добавление записей в телефонную книгу procedure TSMS.N14Click(Sender: TObject); var F:...

identifier redeclared 'result' - Delphi
Прошу помощи.Компилятор пишет ошибку "identifier redeclared 'result' at line 84....и.....99" На паскале запускаю нормально,но на делфи...

Обнуление функции с result:TCanvas - Delphi
Здравствуйте, уважаемые светлые головы! ;) В общем у меня такая проблема. Вот написал функцию которая будет рисовать координатные оси( не...

8
qwertehok
2187 / 2177 / 514
Регистрация: 29.08.2013
Сообщений: 14,529
07.10.2016, 15:51 #2
Цитата Сообщение от Mebiys Посмотреть сообщение
мне не понятно зачем делают:
функция должна что-то возвращать, если не поставить то компилятор напишет предупреждение
1
Hikari
Хитрая блондиночка $)
1451 / 960 / 284
Регистрация: 21.12.2015
Сообщений: 3,785
07.10.2016, 15:54 #3
Цитата Сообщение от Mebiys Посмотреть сообщение
Собственно не пойму Result это аналог return?
Нет. Return это аналог комбинации
Delphi
1
2
Result:=...;
Exit;
Result же просто хранит возвращаемый результат, как будто ее объявили в var секции функции.
Это простая переменная, которая по выходу из подпрограммы по умолчанию считается результирующей.
1
Mebiys
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 32
07.10.2016, 16:10  [ТС] #4
Hikari, получается все тело программы выполнится и вернется самый последний result?
Например если в функции их много???
0
northener
пофигист широкого профиля
3244 / 2296 / 496
Регистрация: 15.07.2013
Сообщений: 13,539
07.10.2016, 16:11 #5
Рассматривай Result как обычную переменную.
1
Mebiys
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 32
07.10.2016, 16:33  [ТС] #6
northener, а если она в самом конце , то там уже ставить return???
0
MyEternity
96 / 96 / 20
Регистрация: 25.04.2016
Сообщений: 525
07.10.2016, 16:52 #7
Цитата Сообщение от Mebiys Посмотреть сообщение
Result := '';
Значение по умолчанию. Так заведено.
Функция выполняется до конца, если нету Exit;
Значение Result будет тем, которые было ему присвоено до Exit/Завершения функции.

Добавлено через 4 минуты
Вот еще пример.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function SimpleByte: Byte;
var
  n: Byte;
begin
  Randomize;
  Result:=0; //По умолчани = 0.
  for n:=0 to 10 do
    begin
      Result:=Result+Random(3);
      if Result > 20 then Break; //По достижению результата - будет последнее значение Result;
    end;
end;
1
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
07.10.2016, 17:57 #8
В Делфи нету Return в том виде, каков он в Си.
В старых Делфи его вообще нету:
Цитата Сообщение от Mebiys Посмотреть сообщение
и получается выход из функции?
Нет. Считайте что тут делается вот такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
... {
  var Result;
  ...
  Result = '';
  ...
  if (...) {
    ...
    Result = 'ololo';
  }
  ..
  return Result;
}
А команда Exit обозначает:
C++
1
  return Result;
И будет вернуто то, что было последним присвоено в Result.

Но в новых Делфи появилось:
Delphi
1
Exit(Value);
Что будет эквивалентно:
C++
1
  return Value;
1
Hikari
Хитрая блондиночка $)
1451 / 960 / 284
Регистрация: 21.12.2015
Сообщений: 3,785
07.10.2016, 19:02 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Mebiys Посмотреть сообщение
получается все тело программы выполнится и вернется самый последний result?
Не самый последний, а тот, что окажется ближе к выходу из функции.
Delphi
1
2
3
4
5
6
function f(x:double):Douible;
begin
 if x<10 then Result:=13 else
 if x>10 then Result:=12 else
  Result:=0;
end;
При параметре равном 12 функция вернет 12 несмотря на то, что последний Result принимает ноль.
1
07.10.2016, 19:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2016, 19:02
Привет! Вот еще темы с ответами:

Рандом букв, result в char - Delphi
function rand: String; const s = 'abcdefghijklmnopqrstuvwxyz'; var i: Integer; begin for i:=1 to 10 do result:= result +...

Chromium (cef3): в методе Chromium1GetResourceHandler не присваивается Result - Delphi
Здравствуйте , проблема в следующем. В процедуре TForm1.Chromium1GetResourceHandler не выполняется строка result:=.. Программа...

Как сделать, чтобы переменная не затирала свое предыдущее значение? (См. внутри) - Delphi
При выборе нескольких значений RadioGroup нужно вывести все значения, которые выбрали. begin case RadioGroup1.ItemIndex of 0: begin...

Почему не отображается переменная $result? - PHP
Программа, высчитывающая расстояние между городами. &lt;table border=&quot;1&quot;&gt; &lt;tr&gt; &lt;th&gt;City A&lt;/th&gt;&lt;th&gt;City B&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru