[Lazarus] 'with' is evil, isn't it?
Alexander Klenin
klenin at gmail.com
Thu Aug 4 15:52:36 CEST 2011
On Thu, Aug 4, 2011 at 22:32, Martin <lazarus at mfriebe.de> wrote:
> IF something like alias were to be introduced (and I am *not* for this),
> then pascal style, with a declaration above the code. It could then be used
> in a "with" statement, or anywhere else.
>
> procedure foo;
> var
> c: TObject; alias;
> begin
>
> OR
> procedure foo;
> alias
> c: TObject;
> begin
>
>
> and then
> with c = SomeFoo do c.DoBar
That would defeat the whole purpose of the aliases vs variables, which
is to avoid junk declaration.
> Of course, the question is why? IT had to be defined where the difference to
> a normal variable is?
Aliases should not be declared, only defined.
> So currently "With" does NOT save a variable (it only saves the reader from
> spotting the variable).
Of course.
> On the other hand, if it truely was an alias, then if it was set to an
> expression:
> with c = SumeFuncWithSideEffects(1,2,3) do begin
> c.DoBar;
> c.DoOther;
> end;
>
> should c expand each time, and call the function (with side effects) or
> should c alias the result. And how could one (as programmer) express, if one
> wants to allias the function-call (including specific param list), or the
> result ?
Alias should behave like variable (or, rather, constant), except it
should not require declaration.
> So aliases, if existent could be used in "with" but are not something
> special to (or limited to) "with". Aliases would be a generic thing (pretty
> much like "absolute", only they can be set to alias difference things in the
> code block).
Maybe, but the difference between
with a := MuFunc do begin .. end;
and
alias a := MuFunc;
is that in the former case the scope of the alias is explicitly
limited to the 'with' statement,
which I think better suits Pascal style (and also has very good
analogy to the 'let' statement in Haskell and other functional languages).
As an aside, note that using "=" instead of ":=" is impossible due to
syntax ambiguity -- "with a = b do" is already a valid syntax.
--
Alexander S. Klenin
More information about the Lazarus
mailing list