如此简洁、优美的代码!my god!!!(0分)

  • 主题发起人 主题发起人 txmaster
  • 开始时间 开始时间
T

txmaster

Unregistered / Unconfirmed
GUEST, unregistred user!
我一直以为,我的pascal还过得去。(^_^我要说“但是”了)
但是,偶然看到了Delphi的一段Source,不夸张地说,我为我有上述的想法而羞愧。
乡亲们!革命尚未成功,同志仍需努力!
PS:此同志非彼同志。
判断闰年的Function:
function IsLeapYear(AYear: Integer): Boolean;
begin
Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;
我在M.. C..写的Delphi x系列中也没有看到如此简洁的代码。他也是用Case来Case去写的。
根据年、月来判断该月最大天数的Function:
function DaysPerMonth(AYear, AMonth: Integer): Integer;
const
DaysInMonth: array[1..12] of Integer =
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
Result := DaysInMonth[AMonth];
if (AMonth = 2) and IsLeapYear(AYear) then
Inc(Result);
{ leap-year Feb is special }
end;

......
不要笑我少见多怪。我相信,这里能写出这样的代码的人不会多。实际写时肯如此优化的更少。
如果要笑的话,贴你写的代码!
 
function IsLeapYear(AYear: Integer): Boolean;
begin
Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;

Delphi是這樣寫的
 
你語言也不簡潔
根据年、月来判断该月最大天数的Function
年,月確定月的天數,何來最大?
 
to Richard3000
哦?
例:2002年3月,天数最大能取几?
  2002年2月,天数最大能取几?
是这个意思。呵呵。
 
這一月有多少天即是天數
2002年3月天數是?難道還有3,4,6,10,23?!
 
to Richard3000。
哦?
这个函数的功能是这样的。
传入年、月,比如说这样:
var
i_max_day: integer;
begin
i_max_day := DaysPerMonth(2000,2);
//i_max_day = 29;
end;
呵呵。
用繁体字?港台人士?
 
根据年、月来判断该月最大天数的Function:
function DaysPerMonth(AYear, AMonth: Integer): Integer;
begin
Result := MonthDays[IsLeapYear(AYear), AMonth];
end;

MonthDays已经在SysUtils定义了
 
老兄,看看SysUtils单元,说不定你会再来个:
如此简洁、优美的代码!my god!!! (二)
[:D][:D][:D][:D]
 
不要在这里大惊小怪的... 仔细研究过算法或经过专业学习都写得很漂亮~~~~~~~~
好象有本什么书,很早以前的了..... 恩. 记不得叫什么名字了,专门介绍优化代码的..
去找找.....
 
写完程序后多看看自己写的代码,
想想如何优化,
自然能够一步步改成高效的代码.
顶楼的两段函数我觉得很普通.
看看DELPHI带来的那些控件的代码,你就知道什么叫精炼.
 
呵~~不错哦~
看来是~~没有最好,只有更好了。。。
 
写程序不应该光在考虑如何将程序写的漂亮,我个人觉得这有点本末倒置。
 
Delphi源代码简洁没错。 高效则未必。
随便举两个例子: TWinControl.AlignControls.
SysUtils中的FastReplace. (尤其是这个, 用了一个低效之极的算法)
 
>>txmaster
哪裡.枝不過是為台灣人賣命,被同化了.你知不知道[red]農曆怎麼算[/red].我很想知道
 
代码简洁与可维护性或效率好象没有什么必然的联系,就好象所谓文学家的文字游戏。
但拿来消遣到是可以的,比打游戏强:)
 
下面是 我在delphi 中的adodb 中发现的一个函数 . 功能是删除 一条记录.
procedure do
RecordsetDelete(DataSet: TCustomADODataSet;
AffectRecords: TAffectRecords);
begin
with DataSet do
try
Recordset.Delete(AffectRecordsValues[AffectRecords]);
{ When CacheSize > 1, Recordset allows fetching of deleted records.
Calling MovePrevious seems to work around it }
if (CacheSize > 1) and (PRecInfo(ActiveBuffer).RecordNumber <> 1) then
begin
Recordset.MovePrevious;
Recordset.MoveNext;
end;
Recordset.MoveNext;
//???假如如是 eof=true 呢 为什么不加一下 if not eof then
recordset ,,,
except
on E: Exception do
begin
Recordset.CancelUpdate;
DatabaseError(E.Message);
end;
end;
end;

这个函数量我的找了半天才发现现为什么当 adodataset 中只有一条记录删除是总是报错 ,触发了个异常
 
不错,我也写过这样的函数,略繁。函数作者有一腚的创意。收藏。
 
我曾想了一个五子棋中判断五个子是否连成五子的函数,只要一个数组两句话就行,
思路是将棋盘填成5阶幻方,然后判断5个子对应数组的值之和是否等于幻方数就行,
当然还要判断这五个子在一定的范围中,是不是很妙?
 
// Delphi源代码简洁没错。 高效则未必。
就是了,还有 bug 呢(至少我认为是)[:)]
 
后退
顶部