On Saturday 23 November 2013 18:55:00 Marcos Douglas wrote:
> On Sat, Nov 23, 2013 at 8:20 AM, Martin Schreiber <[email protected]>
wrote:
> > On Thursday 21 November 2013 08:32:57 Martin Schreiber wrote:
> >> ...
> >
> > sub strfunc2(const avalue: msestring,para: boolean): msestring;
> > begin
> > if para then
> > return 'The not string result';
> > end;
> >
> > := 'The string result: '+avalue;
> >
> > end;
> > "
>
> The 'return' returned? :)
>
Additional returns always were possible, the last mandatory 'return'
before 'end' has been replaced by the assignment.
> Why not this simple syntax?
> "
> sub strfunc2(const avalue: msestring,para: boolean): msestring;
> begin
> if para then
> return 'The not string result';
> end;
> return 'The string result: '+avalue;
> end;
> "
>
> The 'return' keyword is simple, clean and readable... think about it,
> please.
>
The last return is mandatatory and at fix position the others are not. I don't
like that. It should be possible to program without 'return' completely
because 'return' is dangerous if one overlooks it.
"
var
globflag: bool8;
sub test(a: bool8, b: bool8, c: bool8): int32;
var
result: int32;
begin
result:= 0; //initilization
if a then //long deeply nested processing
result:= 123;
else
if b and c then
result:= -100;
else
result:= 88;
end;
end;
globflag:= result > 0; //terminating statement, cleanup
:= result;
end;
"
After some time one needs to fix a bug:
"
begin
result:= 0; //initilization
if a then //long deeply nested processing
result:= 123;
else
if b and c then
result:= -100;
else
if not (a or b) then
return 1000; //aua, the globflag will not be set!
else
result:= 88;
end:
end;
end;
globflag:= result > 0; //terminating statement, cleanup
:= result;
end;
"
So it should be possible to completely work without 'return' statement
(or 'exit' in Delphi). In order to cancel operation it is often better to use
a goto.
"
var
globflag: bool8;
sub test(a: bool8, b: bool8, c: bool8): int32;
var
result: int32;
label
abort;
begin
result:= 0; //initilization
if a then //long deeply nested processing
result:= 123;
else
if c then
goto abort; //abort processing
end;
if b and c then
result:= -100;
else
result:= 88;
end;
end;
abort:
globflag:= result > 0; //terminating statement, cleanup
:= result;
end;
"
Martin
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
mseide-msegui-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk