A curious case

Nonsanity form at nonsanity.com
Wed Mar 2 10:40:52 EST 2011


Others have answered this pretty well, but I thought I'd add some examples
for clarity - With future readers in mind.

The following won't work:

if x = 1 then
    doSomething
else if x = 2 then
    if y = 3 then doSomethingElse
else if x = 2 then  -- little lost else
    doThirdThing
end if

This is because the y = 3 line thinks the next else belongs to it, like so:

if x = 1 then
    doSomething
else if x = 2 then
    if y = 3 then doSomethingElse
    else if x = 2 then
       doThirdThing
    end if

Because the following is a valid if-else format:

    if true then Blah1
    else Blah2

If there's another line between the dangling if and the parent structure's
next else, all is fine.

if x = 1 then
    doSomething
else if x = 2 then
    if y = 3 then doSomethingElse
    get it
else if x = 2 then
    doThirdThing
end if

But the best practice, as Terry said, is to use the long form in situations
like these.

if x = 1 then
    doSomething
else if x = 2 then
    if y = 3 then
        doSomethingElse
    end if
else if x = 2 then
    doThirdThing
end if

That way the code is clear to everyone, at least in regard to
else-ownership. Clarity of the code itself varies by programmer... :)


 ~ Chris Innanen
 ~ Nonsanity



On Tue, Mar 1, 2011 at 7:40 PM, Bob Sneidar <bobs at twft.com> wrote:

> Hi all.
>
> I just came across a curious issue where I had an if then else control
> structure inside another if then structure.
>
> I *thought* I used toe be able to use the form
>
> if statement then
>    -- do somestuff
> else if anotherstatement then
>    -- do someotherstuff
> else
>    -- do defaultstuff
> end if
>
> When I nested this inside another if then else control structure it told me
> I was missing an end if! However if I converted the above structure to a
> switch control structure the script compiled fine. Have I stumbled upon
> something here? It kind of makes sense to me because the compiler may be
> having trouble knowing which control structure *else if anotherstatement*
> belongs to.
>
> This is not a problem per se, but I am just curious and it may help someone
> else who encounters it in the future to not spend an hour or two poring over
> code that is technically correct but won't compile.
>
> Bob
>
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>



More information about the use-livecode mailing list