Delphi 这个'else'语句在哪里结束?
试图将Delphi 这个'else'语句在哪里结束?,delphi,if-statement,delphi-7,Delphi,If Statement,Delphi 7,试图将Delphi代码的这一部分转换为C#时,我对if/else语句的以下else部分的结束位置感到困惑。下面是代码的确切格式: try Root:=ExtractFileRoot(FileName); ErrorStr:=ExtractFileRoot(FileName)+' invalid name'; if not GetNextNumericSegment(Root,Segment) then exit; if length(Segment) = 4 the
Delphi
代码的这一部分转换为C#
时,我对if/else
语句的以下else
部分的结束位置感到困惑。下面是代码的确切格式:
try
Root:=ExtractFileRoot(FileName);
ErrorStr:=ExtractFileRoot(FileName)+' invalid name';
if not GetNextNumericSegment(Root,Segment) then exit;
if length(Segment) = 4 then
begin
Year:=StrToInt(Segment);
GetnextNumericSegment(Root,Segment)
end
else // Where does this else statement end?
Year:=Defaultyear;
ErrorStr:=ExtractFileRoot(FileName)+' invalid';
if Length(Segment) <> 3 then exit;
Jday:=StrToInt(Segment);
ErrorStr:=ExtractFileRoot(FileName)+' Bad File';
if not GetNextNumericSegment(Root,Segment) then exit; // bad Time of day
GetTimeFromFileName:=EncodeDate(Year,1,1)+Jday-1+
EncodeTime(StrToInt(Copy(Segment,1,2)),StrToInt(Copy(Segment,3,2)),StrToInt(Copy(Segment,5,2)),0);
except
GetTimeFromFileName:=0;
end;
试试看
Root:=ExtractFileRoot(文件名);
ErrorStr:=ExtractFileRoot(文件名)+“无效名称”;
如果未获取下一个数值段(根,段),则退出;
如果长度(段)=4,则
开始
年份:=stroint(段);
GetnextNumericSegment(根,段)
终止
else//else语句在哪里结束?
年份:=默认年份;
ErrorStr:=ExtractFileRoot(文件名)+“无效”;
如果长度(段)为3,则退出;
Jday:=stroint(段);
ErrorStr:=ExtractFileRoot(文件名)+“坏文件”;
如果不是GetNextNumericSegment(根,段),则退出;//一天中的糟糕时刻
GetTimeFromFileName:=EncodeDate(年份,1,1)+Jday-1+
编码时间(stroint(复制(段,1,2)),stroint(复制(段,3,2)),stroint(复制(段,5,2)),0);
除了
GetTimeFromFileName:=0;
终止
我知道您不必使用begin/end,但到目前为止,我在这段代码中看到的一切都使用了它。我还读到你不需要如果语句的部分中出现了code>,并且第一个else
后面的code>是else
的结尾
我的猜测是else
下和上除
之外的所有内容都是else
语句的一部分
注意:如果我真的可以调试,这将很容易,但不幸的是,我只是得到了代码片段和函数来转换,而没有真正的上下文 一个else
分支包含
- 下一条语句(方法调用、赋值等)
因此,在您的例子中,这是整个else
分支
Year:=Defaultyear;
旁注:
格式在这里并不重要。这只是为了便于阅读。只有begin
和end
才可以更改else
分支中的语句量。我建议阅读文档
Year:=Defaultyear;
在之后,else
后面跟着一条语句。每个语句(结构化或非结构化)都可以用分号分隔符结尾代码>
声明可以是。在这种情况下,它被封装在开始/结束
构造中
在您的情况下,else
语句以Year:=DefaultYear结尾代码>
我建议始终使用“开始/结束”对,即使语句是单行。代码更具可读性,如果您稍后添加一行代码,错误也会更少。除了上面提到的“阅读文档”之外,如果您需要一个可视化工具来帮助您跟踪Delphi 7中的if/else对和其他内容,我建议您安装Castalia工具。这将对您有很大帮助。我发现无论有多少语句,始终使用Begin/End都很有用。比如,
If A = 1 then
Begin
// Every line here executes if A = 1
ShowMessage('A does in fact equal 1');
ShowMessage('These messages can be annoying')
end
else
Being
// Everything here executes if A doesn't equal 1
ShowMessage('A was not equal to 1');
ShowMessage('This is still an annoying message')
End;
else
将在此语句之后结束:Year:=Defaultyear代码>谢谢!我能问一下这是为什么吗?这是因为格式或其他原因吗?请阅读该语言的文档。没有任何东西可以替代对它的理解。也许会有所帮助。@pfferno-如果您的代码的格式和上面的示例一样糟糕,我建议使用代码格式化程序。旧版本的Delphi没有内置的,但是有几个第三方免费的版本可用-参见FWIW,the代码>是分隔符而不是终止符。语句后面不一定要有代码>“始终使用‘开始/结束’对是一个很好的编码标准”,谁说?我认为这是基于观点/口味的。看看Delphi的源代码。@kobik,我看到了太多的错误和误解。使用begin/end是我的建议:-)我个人觉得使用比必要的更多begin/end对的代码更难阅读。如果这句话可以简化为一句话,我个人就不提了。但我同意科比克的观点,这是一种偏好。我理解始终使用begin/end是好的观点,以及为什么,但我认为这会使代码过于冗长。@kobik:看看Delphi源代码通常是一个非常糟糕的想法。它充满了不一致和糟糕的编程习惯,在某些情况下,代码编写得很糟糕。谢谢。我感到困惑的原因是,在另一个代码片段中,有几行的格式与else
下的下一条语句的空格数相同。我不确定它是要有一个开始/结束
,还是写它的人只是意外地缩进了行。
If A = 1 then
Begin
// Every line here executes if A = 1
ShowMessage('A does in fact equal 1');
ShowMessage('These messages can be annoying')
end
else
Being
// Everything here executes if A doesn't equal 1
ShowMessage('A was not equal to 1');
ShowMessage('This is still an annoying message')
End;