2016/08/26

Delphi 免寫 FreeAndNil 的方法

好的 Free 帶你上天堂 (咦?) 圖片來源


最近看到一篇關於葡萄牙人寫的文章:FreeAndNil... Esqueça

內文是說明在物件導向的時代,JAVA、C# 這類的語言都有垃圾自動回收機制,進化中的 Delphi 其實也有。

接著便開始說明了使用 FreeAndNil 讓我們的原始碼非常噁心的經過。


提出的解法是使用 Interface!


原先我們的寫法可能是:

2016/08/19

泛型(Generic)容器的小技巧

泛型 (Generic) 是程式毒藥還是解藥? 圖片來源

在Delphi 2009開始便加入了【泛型容器】相關類別,如下所列:

  • TList,TObjectList
  • TQueue,TObjectQueue
  • TStack,TObjectStack
  • TDictionary,TObjectDictionary

不過也只知道可以放像是「string, Integer, TComponent」等,基本型別或是物件都可以自由宣告使用。

乍看下和 TStringList 重疊率很高啊,如果是宣告TList,居然不能使用以下的函式:
  • CommaText
  • DelimitedText 

不能用這兩個常用率特高的函式感覺很廢啊。泛型容器到底有什麼好用的?

一直到需要放置物件時,才開始覺得泛型容器超好用。


2016/08/12

[整理]如何計算出一個字元,在一個字串中出現的次數

字元(Char)計數
1
2
3
4
5
6
7
8
9
function OccurrencesOfChar(const S: stringconst C: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := 1 to Length(S) do
    if S[i] = C then
      inc(result);
end;



字串(String)計數
1
2
3
4
5
6
7
8
9
10
11
12
function Occurrences(const Substring, Text: string): integer;
var
  offset: integer;
begin
  result := 0;
  offset := PosEx(Substring, Text, 1);
  while offset <> 0 do
  begin
    inc(result);
    offset := PosEx(Substring, Text, offset + length(Substring));
  end;
end;

資料來源: