我目前正在开发一个有点复杂的应用程序,我发现了一个问题。我将尝试将应用程序的复杂性降低到一个简单的应用程序中,例如。关键是,我有16个区域,每个区域都有变量和程序。每个程序必须对每个区域都是通用的。目前我通过在程序的开头写一个“if”来解决这个问题,然后将它们复制15次并稍微改变一下,因为对于每个区域,它只是用几个词来区分。所以我必须在每一个中改变这个词。这使得代码不清楚,浪费时间。有没有办法,如何将这16个“ifs”写成一个?使用像模板之类的东西?
示例应用程序:
密码:
procedure TForm1.WriteItem;
var item:integer;
begin
if currentFile='FirstFile' then begin
Seek(FirstFile,filesize(firstfile)-1);
read(FirstFile,item);
inc(item);
write(FirstFile,item);
end;
if currentFile='SecondFile' then begin
Seek(SecondFile,filesize(SecondFile)-1);
read(SecondFile,item);
inc(item);
write(SecondFile,item);
end;
end;
完整版:
https://drive.google.com/drive/folders/0BzhR4bZa5iBuazJuX0FWQzBXcHM?usp=sharing
答案 0 :(得分:1)
我猜测FirstFile,SecondFile等等都是TFile类型或者它的后代,所以我要做的第一个改变就是制作' currentFile'相同类型(或其祖先)。然后,不要将currentFile设置为字符串,而是添加类似
的内容currentFile := FifthFile;
例如。
然后你的程序就变成了
procedure TForm1.WriteItem;
var item:integer;
begin
Seek(CurrentFile,filesize(CurrentFilefile)-1);
read(CurrentFile,item);
inc(item);
write(CurrentFile,item);
end;
但是,更好的是,您可以将文件作为参数传递,例如
procedure TForm1.WriteItem( const CurremtFile : TYourFileType);
var item:integer;
begin
Seek(CurrentFile,filesize(CurrentFilefile)-1);
read(CurrentFile,item);
inc(item);
write(CurrentFile,item);
end;
正如评论中指出的,这个过程不需要任何对象变量(尽管你的真实程序可能)。您可以通过以下两种方式之一使其独立于任何对象:将该函数完全移出对象
procedure WriteItem( const CurremtFile : TYourFileType);
或使其成为课程程序
class procedure TForm1.WriteItem( const CurremtFile : TYourFileType);
作为一般原则,我更喜欢后一种方法,但我可能会把它移到另一个专门设计用来处理这种功能的类(不是我的形式)。