Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему функция возвращает данные, которые ей недоступны [D7, Win2k, WinXP]


Страницы:   1 2 3 4 5

gosha67 ©   (2006-09-26 16:49:00) 

Здравствуйте уважаемые.
Я программист с некоторым опытом, но только сегодня я обнаружил сие недоразумение. Объясните мне пожалуйста почему в конечном итоге Data := 'some text bla bla bla ....'? По идее она должна быть равно только 'bla bla bla'. Загадка какая-то.
function GetSomeData: string;
var i : integer;
begin
 for i := 1 to 20 do
 begin
   Result := Result + ' bla bla bla';
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Data : string;
begin
 Data := 'some text';
 Data := GetSomeData;
 ShowMessage(Data);
end;


Ketmar   (2006-09-28 11:36:00) [1]

>[81] Игорь Шевченко(c) 28-Sep-2006, 10:57
>Говорит об этом Борланд. Только не в Help, а в
>news-groups и на bdn.borland.com
а-а-а. так с этого и надо было начинать. а то я уже пол-справки перерыл. %-)

>за других не знаю). Тебя же не удивляет, что
>каждому методу класса передается неявный параметр
да я, как бы, немного в курсе всей этой механики. меня удивило именно упоминание, что борланд говорит. я решил, что прямо в справке говорит. был неправ -- о справке не было ни слова. %-)

>Ну это да. Но обычно стараются выдерживать
>совместимость с предыдущими версиями, нес па ?
оно-то так. но полагаться на это с вероятностью 100% я бы не стал. %-)


Игорь Шевченко   (2006-09-28 10:57:00) [2]

Ketmar ©   (28.09.06 10:10) [79]


> ну, Игорь придёт -- прочитает. пояснит, надеюсь. %-)


Говорит об этом Борланд. Только не в Help, а в news-groups и на bdn.borland.com, что если функция возвращает строку, то возвращаемое значение передается скрытым параметром. Причем такое поведение у всех паскалей (борландовских, за других не знаю). Тебя же не удивляет, что каждому методу класса передается неявный параметр Self, вот и тут то же самое.


> это не есть документированное поведение. мало ли, какой
> там код компилятор генерирует сейчас, и какой код появится
> потом...


Ну это да. Но обычно стараются выдерживать совместимость с предыдущими версиями, нес па ?


Palladin   (2006-09-28 10:51:00) [3]


> тут ты имеешь ввиду class а не object


угу... прошу прощения... смысл в том, что объявить переменную ты можешь одного типа, а инициализировать любыми данными


Ketmar   (2006-09-28 10:10:00) [4]

>[78] Johnmen(c) 28-Sep-2006, 10:06
>Ты вообще ветку с начала читал?
да читал, вроде. %-)

>Обрати внимание на [9] и [10]. Теперь понимаешь,
>к кому надо обращаться с этой просьбой? :)))
ну, Игорь придёт -- прочитает. пояснит, надеюсь. %-)


Johnmen   (2006-09-28 10:06:00) [5]


> Ketmar ©   (28.09.06 10:02) [76]


Ты вообще ветку с начала читал?
Обрати внимание на [9] и [10]. Теперь понимаешь, к кому надо обращаться с этой просьбой? :)))


zamtmn   (2006-09-28 10:06:00) [6]

>>зыж вот интересно, тут идёт попытка доказать глупость просто из вредности, или как?
тут идет подмена понятия инициализации присвоением начального значения


Ketmar   (2006-09-28 10:02:00) [7]

хм. "инициализация мусором" -- это новое слово в терминологии.

зыж вот интересно, тут идёт попытка доказать глупость просто из вредности, или как?


Ketmar   (2006-09-28 10:02:00) [8]

>[74] Johnmen(c) 28-Sep-2006, 10:01
>Если об этом говорит сам Борланд, то
>документированное.
э-э-э... а можно раздел справки, где это сказано? или хотя бы цитату?


Johnmen   (2006-09-28 10:01:00) [9]


> Ketmar ©   (28.09.06 09:56) [72]
> это не есть документированное поведение.


Если об этом говорит сам Борланд, то документированное.


zamtmn   (2006-09-28 09:59:00) [10]

>>только в том случае, если s -- глобальная. иначе в неё радостно попадает мусор со стека.
глобальная, локальная - без разницы, будет проинициализирована. C неопределенным значением в случае [0]. если в стринге мусор - будет av

>>какого объекта? ты о чем?
>>>нет, понятие объекта не является понятием переменной
тут ты имеешь ввиду class а не object


Ketmar   (2006-09-28 09:56:00) [11]

>[70] Johnmen(c) 28-Sep-2006, 09:53
>В данном рассматриваемом случае [0] Result
>инициализирован.
это не есть документированное поведение. мало ли, какой там код компилятор генерирует сейчас, и какой код появится потом...


Palladin   (2006-09-28 09:54:00) [12]

Значение его не инициализированно...


Johnmen   (2006-09-28 09:53:00) [13]


> Palladin ©   (28.09.06 09:07) [63]
> о чем и сказал Джо, при вызове функции Result не инициализирован


В данном рассматриваемом случае [0] Result инициализирован.
О чём уже было сказано и мной, и Sha, и Игорем Шевченко, и Borland'ом :)


Palladin   (2006-09-28 09:48:00) [14]


> zamtmn ©   (28.09.06 09:24) [67]

какого объекта? ты о чем?

r:=TList(3423523);

какой тут объект? причем здесь объект? я просто использую r как целочисленную переменную, причем тут объект?


Ketmar   (2006-09-28 09:44:00) [15]

>[64] zamtmn(c) 28-Sep-2006, 09:10
>var s:string;
>begin
>      s:=''; тут ты ниче не проинициализировал, s
>уже была проинициализирована компилятором, ты
>присвоил значение
только в том случае, если s -- глобальная. иначе в неё радостно попадает мусор со стека.


zamtmn   (2006-09-28 09:24:00) [16]

>>нет, понятие объекта не является понятием переменной
объекта какраз является, ты говоришь о классах


Palladin   (2006-09-28 09:15:00) [17]

Хорошо, тогда война разгорелась из-за терминологии.


zamtmn   (2006-09-28 09:12:00) [18]

а я говорю, что в делфи нету неинициализированных стрингов, а если они появляются, то нужно их обнулить


zamtmn   (2006-09-28 09:10:00) [19]

var s:string;
begin
     s:=''; тут ты ниче не проинициализировал, s уже была проинициализирована компилятором, ты присвоил значение


Palladin   (2006-09-28 09:07:00) [20]

о чем и сказал Джо, при вызове функции Result не инициализирован, он может не содержать (а в большинстве случаев так оно и есть) пустую строку на которое расчитывал автор ветки...


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо