编码/解码组件:Added System.NetEncoding unit in RTL. This unit provides a new TNetEncoding class to unify all internet encoding/decoding:
TNetEncoding.Base64.EncodeString(S);
TNetEncoding.Base64.DecodeString(S);
TNetEncoding.URL.EncodeString(S);
TNetEncoding.URL.DecodeString(S);
TNetEncoding.HTML.EncodeString(S);
TNetEncoding.HTML.DecodeString(S);
动态数组新语法,可以不用Setlength,赋值时候有点类似动态语言。
String-like operations on Dynamic Arrays
o B := [1, 2, 3, 4];
o B := B + [5, 6, 7];
o Insert([6, 7, 8], B, 5); // inserts array [6, 7, 8], into B at index 5
o Delete(B, 1, 3); // deletes 3 elements starting at index 1
o Concat([1,2,3,4],[5,6,7])
o var B: TBytes = [1, 2, 3, 4];
· Improved initialization for Dynamic Arrays
o B := [1, 2, 3, 4];
o B := B + [5, 6, 7];
type
TBytes = array of Byte;
TBytesArray = array of TBytes;
TStrDA = array of string;
resourcestring
Sabc = 'abc';
Sdef = 'def';
var
B: TBytes = [1, 2, 3, 4];
C: TBytesArray = [[1, 2, 3], [4,5,6]];
D: TStrDA = ['ABC', 'DEF'];
E: TStrDA = [ Sabc, Sdef ];
函数的返回,可以直接用exit(retuanvalue)来替代result:=retuanvalue;exit了.
匿名方法引用(reference to)
以前我们创建一个方法引用的时候会很麻烦,尤其是在类中,需要跳出去在别的地方写一段函数,然后再回来继续写。新的语法reference to避免了这种情况的发生,尤其是许多时候其实我们的方法实际上只有一两句的时候,它可以大大加快开发的速度,就像前面的Exit语法加强一样贴心。不过 遗憾的是,这个类lamda方法的语法糖还不够甜。
type
TFoo = reference to function(num: Integer): Integer; // reference to Method
var
func: TFoo;
n: Integer;
begin
func := function(a: Integer): Integer // *NOTE*: Do NOT Write ‘;’
begin
Result := a * a;
end;
n := func(10);