Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Mebiys
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 32
#1

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

07.10.2016, 15:44. Просмотров 1066. Ответов 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
Всем привет! Вот мой вопрос: unit Unit1; interface uses Windows,...

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

Игра морской бой.Можете объяснить операцию case что она делает ?И что означает переменная m3,m2,m1, и переменная z?
Листинг программы: var Form1: TForm1; i,j,g,x1,y1,k11,k21,...

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

identifier redeclared 'result'
Прошу помощи.Компилятор пишет ошибку "identifier redeclared 'result' at line...

8
qwertehok
2210 / 2199 / 599
Регистрация: 29.08.2013
Сообщений: 14,677
07.10.2016, 15:51 #2
Цитата Сообщение от Mebiys Посмотреть сообщение
мне не понятно зачем делают:
функция должна что-то возвращать, если не поставить то компилятор напишет предупреждение
1
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 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
пофигист широкого профиля
3418 / 2318 / 630
Регистрация: 15.07.2013
Сообщений: 13,700
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 / 25
Регистрация: 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 / 146
Регистрация: 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 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
07.10.2016, 19:02 #9
Лучший ответ Сообщение было отмечено Mebiys как решение

Решение

Цитата Сообщение от 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

Ошибка I/O Result 103
Помогите разобраться в чем проблема: //добавление записей в телефонную книгу...

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

Рандом букв, result в char
function rand: String; const s = 'abcdefghijklmnopqrstuvwxyz'; var i:...


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

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

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