goto
, GOTO
, GO TO
or other case combinations, depending on the programming language) is a statement found in many computer programming languages. It performs a one-way transfer of control to
another line of code; in contrast a function call normally returns control. The jumped-to locations are usually identified using labels, though some languages use line numbers. At the machine code
level, a goto
is a form of branch or jump statement. Many languages support the goto
statement, and many do not; see language support for discussion.
The structured program theorem proved that the goto
statement is not necessary to write programs; some combination of the three programming constructs of sequence, selection/choice, and
repetition/iteration are sufficient for any computation that can be performed by a Turing machine, with the caveat that code duplication and additional variables may need to be introduced.
At
machine code level, goto
is used to implement the structured programming constructs.
In the past there was considerable debate in academia and industry on the merits of the use of goto
statements.
Use of goto
was formerly common, but since the advent of structured programming in the
1960s and 1970s its use has declined significantly.
The primary criticism is that code that uses goto
statements is harder to understand than alternative constructions.
Goto remains in use in certain common usage patterns, but alternatives are generally used if available.
Debates over its (more limited) uses continue in academia and software industry circles.
Probably the most famous criticism of GOTO
is a 1968 letter by Edsger Dijkstra called Go To Statement Considered Harmful.
In that letter Dijkstra argued that unrestricted GOTO
statements should be
abolished from higher-level languages because they complicated the task of analyzing and verifying the correctness of programs (particularly those involving loops).
The letter itself sparked a debate,
including a 'GOTO
Considered Harmful' Considered Harmful letter
sent to Communications of the ACM (CACM) in March 1987, as well as further replies by other people, including Dijkstra's On a
Somewhat Disappointing Correspondence.
Casiano Rodriguez León 2015-01-07