Version 22 of break

Updated 2012-11-30 19:42:34 by pooryorick

Name

break - Abort looping command

A Tcl Command

See Also

Synopsis *

break

Description

Description

This command is typically invoked inside the body of a looping command such as for or foreach or while. It returns a TCL_BREAK code, which causes a break exception to occur. The exception causes the current script to be aborted out to the innermost containing loop command, which then aborts its execution and returns normally. Break exceptions are also handled in a few other situations, such as the catch command, Tk event bindings, and the outermost scripts of procedure bodies.

official reference
official

See Also

other return functions: continue, return

loop functions: for, foreach, while

Examples

Print a line for each of the integers from 0 to 5:

for {set x 0} {$x<10} {incr x} {

    if {$x > 5} {
        break
         break
    puts "x is $x"

}

This is the same as:

One surprising use of break is to make sure a `[foreach]` loop runs exactly
One surprising use of break is to make sure a [foreach] loop runs exactly once (because we're only interested in the list assignment, not the actual body):
 foreach {a b} [list $b $a] break ;# (1)

RS 2006-04-20: This code for swapping two variables can however be had RS 2006-04-20: This code for swapping two variables can however be had simpler:

 foreach a $b b $a break          ;# (2)

Lars H: No, that sets a to the first element of b and b to the first element of a, which isn't in general the same thing as swapping the values. - RS: True. I was thinking in terms of scalars only... For values parsable as lists, approach (1) is better.

''[escargo] 13 Jul 2004'' - I recently noted that in [Icon], the '''break''' expression
takes an optional expression just like the '''return''' expression does.  This allows a bit
more information to come out of a break.  (It's also probably not what Tcl considers an
exception.)
[escargo] 2004-07-13:   I recently noted that in [Icon Programming
[AMG]: [Perl]'s break expression takes an argument which gives the number of levels to break.  This avoids one common need for [goto]: breaking out of nested loops.  Tcl has another way to do this, though:
[AMG]: [Perl]'s break expression takes an argument which gives the number of
try {
    foreach x {a b c} {
        foreach y {d c f} {
            puts [list $x $y]
            if {$x eq $y} {
                return -level 0 -code 5
            }
        }
    }
} on 5 {} {}

Some sugar:

proc loop {script} {tailcall try $script on 5 {} {}}
proc stop {} {return -code 5}
loop {
    foreach x {a b c} {
        foreach y {d c f} {
            puts [list $x $y]
            if {$x eq $y} {
                stop
            }
        }
    }
}