線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1957
推到 Plurk!
推到 Facebook!

有關於Result的問題~

答題得分者是:小傑克
terrygobb
一般會員


發表:5
回覆:22
積分:5
註冊:2009-04-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-12 13:46:04 IP:220.130.xxx.xxx 訂閱
因為小弟之前曾經學過c#~但對於delphi 的回傳方式有些地方不是很了解

以下列程式說明


[code delphi]
function TSQL.GetAllTB: TstringList;
var ds: TADODataSet;
i: integer;
begin
result := TstringList.Create; //為什麼會在這result呢?
result.Clear;
ds := TADODataSet.Create(nil);
openSchema(DS, 7);
ds.First;
while not ds.Eof do
begin
result.Add(ds.fieldByName('Table_Name').AsString);
ds.Next;
end;
ds.Free;
end;
[/code]

因為在小弟認知的程式當中,大多都是在程式結尾才做Result的動作

但我搞不懂為什麼在程式開始的區段就用到Result了

況且還是Create,著實不太了解

有翻過書本了,但好像這方面的資料有點少

不曉得是否有經驗的前輩們幫忙一下,謝謝
------
尋找對的人,對的方法,對的態度跟對的環境
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-12 14:11:52 IP:59.115.xxx.xxx 訂閱
不同語言,行為定義有些不同很正常
對delphi 而言是會執行到function 結束, 或是中斷function exit();

底下這從classes.pas 中隨便找的一個function, 這是回傳字串的

function TPersistent.GetNamePath: string;
var S: string;
begin
Result := ClassName; //等於先給個default 值
if (GetOwner <> nil) then
begin
S := GetOwner.GetNamePath;
if S <> '' then
Result := S '.' Result;
end;
// 程式會執行到這邊, 這時Result 有可能已經變成 S '.' Result;
end;

至於你問的 Create , 因為你回傳的 TStringList 是一個Class , 這個Class要使用method,property之前要先Create
類似這種東西一般應用程式書比較不會談到, 要看 Object Pascal 語法的書才會有, 不過一理通百理明,有用過C , delphi上手很快的

------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-05-12 14:16:28, 註解 無‧
小傑克 重新編輯於 2009-05-12 14:23:58, 註解 無‧
terrygobb
一般會員


發表:5
回覆:22
積分:5
註冊:2009-04-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-12 14:37:19 IP:220.130.xxx.xxx 訂閱
恩恩  謝謝小傑克前輩的回答

等等我會try try看的

而我比較好奇的原因可能是我沒有表達清楚

因為物件的關係,在使用該class的時候,必須先Create

這到是沒啥問題

我好奇的是result 的 TStringList.Create會是個什麼樣的東西

是一個全新的TStringList 或者該程式執行結束時所回傳的TStringList

因為有想過要測試一下,但卻不曉得怎麼抓前後值,真糟糕 @@"

謝謝小傑克前輩,發表的文章沒表達清楚 不好意思~
------
尋找對的人,對的方法,對的態度跟對的環境
terrygobb
一般會員


發表:5
回覆:22
積分:5
註冊:2009-04-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-12 14:39:25 IP:220.130.xxx.xxx 訂閱
剛仔細揣摩小傑克前輩的程式

大概了解您想要跟我說的意思

所以我的問題解決啦

謝謝您細心的指導 感謝^^
------
尋找對的人,對的方法,對的態度跟對的環境
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-12 14:44:26 IP:122.116.xxx.xxx 未訂閱
function TSQL.GetAllTB: TstringList;
var ds: TADODataSet;
i: integer;
begin
result := TstringList.Create; //為什麼會在這result呢? 請看下面紅字
result.Clear;
ds := TADODataSet.Create(nil);
openSchema(DS, 7);
ds.First;
while not ds.Eof do
begin
result.Add(ds.fieldByName('Table_Name').AsString); // 因為在這裡要用到, 所以在這之前要先定義
ds.Next;
end;
ds.Free;
end;

您也可以改成到最後才用到 result, 如下, 但是有疊床架屋的感覺,

function TSQL.GetAllTB: TstringList;
var ds: TADODataSet;
i: integer;
mylist : tstringlist;
begin
mylist := TstringList.Create;
mylist.Clear;
ds := TADODataSet.Create(nil);
openSchema(DS, 7);
ds.First;
while not ds.Eof do
begin
mylist.Add(ds.fieldByName('Table_Name').AsString);
ds.Next;
end;
ds.Free;
result := tstringlist.create; // 不做 create 不行, 因為要佔有記憶体空間
result.text := mylist.text;
mylist.free;

end;

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
terrygobb
一般會員


發表:5
回覆:22
積分:5
註冊:2009-04-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-12 14:48:25 IP:220.130.xxx.xxx 訂閱
謝謝 st33chen 前輩的指教 ^^~

這邊果然是很有人情味的地方

雖然我已經結案了,但還是有不同的人提出不一樣的看法給我學習

在此謝謝各位前輩們了 ^^~
------
尋找對的人,對的方法,對的態度跟對的環境
編輯記錄
terrygobb 重新編輯於 2009-05-12 14:48:53, 註解 無‧
roviury
一般會員


發表:3
回覆:49
積分:15
註冊:2008-08-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-18 19:34:30 IP:203.186.xxx.xxx 訂閱
要理解result不困難
你把他當作一個變數就可以
而最後就會return result
===================引 用 terrygobb 文 章===================
因為小弟之前曾經學過c#~但對於delphi 的回傳方式有些地方不是很了解

以下列程式說明


[code delphi]
function TSQL.GetAllTB: TstringList;
var ds: TADODataSet;
i: integer;
begin
result := TstringList.Create; //為什麼會在這result呢?
result.Clear;
ds := TADODataSet.Create(nil);
openSchema(DS, 7);
ds.First;
while not ds.Eof do
begin
result.Add(ds.fieldByName('Table_Name').AsString);
ds.Next;
end;
ds.Free;
end;
[/code]

因為在小弟認知的程式當中,大多都是在程式結尾才做Result的動作

但我搞不懂為什麼在程式開始的區段就用到Result了

況且還是Create,著實不太了解

有翻過書本了,但好像這方面的資料有點少

不曉得是否有經驗的前輩們幫忙一下,謝謝
系統時間:2024-05-17 4:10:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!