注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

Delphi新语法和ifthen的扩展联想.  

2013-11-02 15:41:23|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源: 武稀松(wr960204)的博客

看看Delphi重载了多少个ifthen函数. Math单元

1 function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer= 0): Integer; overload; inline;

2 function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 =0): Int64; overload; inline;

3 function IfThen(AValue: Boolean; const ATrue: UInt64; const AFalse: UInt64 =0): UInt64; overload; inline;

4 function IfThen(AValue: Boolean; const ATrue: Single; const AFalse: Single =0.0): Single; overload; inline;

5 function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double =0.0): Double; overload; inline;

6 function IfThen(AValue: Boolean; const ATrue: Extended; const AFalse:Extended = 0.0): Extended; overload; inline;

StrUtils单元
1 function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ”):string; overload; inline;

 
Delphi从2009之后增加了泛型,那么之前math,strutils单元的ifthen函数有很多种重载形式似乎就可以合并成一个单独的泛型函数了.
type

02   TExtFuns = class

03     class function IfThen<t>(AValue: Boolean; const ATrue, AFalse: T): T; inline;

04   end;<p></p>

05  

06 <p>class function TExtFuns.IfThen<t>(AValue: Boolean; const ATrue, AFalse: T): T;

07 begin

08   if AValue then

09     Result := ATrue

10   else

11     Result := AFalse;

12 end;

13 </t></p></t>

使用
var

2   s : string;

3   i : Integer;

4   //

5   s := TExtFuns.IfThen(True, '条件成立', '条件不成立!');

6   i := TExtFuns.IfThen(GetTickCount > 1, 1, 2);

 
还有更便捷的办法,从XE3以后扩展了新的Helper语法,可以给任意类型增加扩展函数.就有更方便的技巧了.
TBoolHelper = record helper for Boolean

02 function IfThen<t>(const ATrue, AFalse: T): T; inline;

03 end;

04 function TBoolHelper.IfThen<t>(const ATrue, AFalse: T): T;

05 begin

06   if self then

07     Result := ATrue

08   else

09     Result := AFalse;

10 end;

11 //使用

12 var

13   s : string;

14   i : Integer;

15 //

16   s := True.IfThen('a','b');

17   i := (gettickcount >1).IfThen(1, 2);

18 //是不是很爽,方便程度不亚于C语言族系的?:语法吧.

19 end;</t></t>

XE3之后的SysUtils单元里面内置了TBooleanHelper,TByteBoolHelper,TWordBoolHelper,TLongBoolHelper四个布尔类型的Helper,那么如果易博龙肯把ifthen集成到这四个辅助类上我们用起来就会更方便.

  评论这张
 
阅读(440)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017